Wearable • Raspberry Pi Pico 2 W • DSP • Body-Coupled Communication
Handoff: สายรัดข้อมือที่ส่ง Contact ผ่านการจับมือด้วย Body-Coupled Communication
ไปงาน Expo หรือ Meetup แล้วคุยกับใครถูกคอ ช่วงท้ายบทสนทนามักจบด้วยคำถามเดิม: มีนามบัตรไหม? สแกน QR ตรงไหน? LinkedIn ชื่ออะไร? แต่โปรเจกต์ Handoff ตั้งคำถามอีกแบบ ถ้า “การจับมือ” ที่เราใช้ทักทายหรือบอกลา กลายเป็นช่องทางแลก Contact ได้เลยจะเป็นอย่างไร?
Rahul Jeyaraj จึงสร้างสายรัดข้อมือ Handoff ขึ้นมาเป็นคู่ เมื่อคนสองคนที่ใส่ Band จับมือกัน Contact Card จะถูกส่งจาก Band หนึ่ง ผ่านร่างกายของทั้งสองคน ไปยังอีก Band แล้วส่งต่อเข้า Android Phone ผ่าน Bluetooth
สิ่งที่ทำให้โปรเจกต์นี้น่าสนใจไม่ใช่แค่ Contact Sharing แต่คือ Physical Layer ที่ผู้สร้างออกแบบขึ้นเอง: ใช้ Capacitive Body-Coupled Communication, Tone 180/200 kHz, Goertzel DSP, Manchester Coding และ Protocol ที่ต้องทำงานให้ทันช่วงจับมือประมาณหนึ่งวินาที
- Handoff ใช้ Raspberry Pi Pico 2 W เป็น MCU หลักของสายรัดข้อมือ
- Physical Link ใช้ Capacitive Body-Coupled Communication ผ่านผิวและการจับมือ
- ใช้ Tone 180 kHz และ 200 kHz พร้อม Noise Bins ที่ 140, 160 และ 220 kHz
- ADC Sample ที่ 500 ksps และใช้ Goertzel Filter วิเคราะห์ Frequency ที่ต้องการ
- ข้อมูลใช้ Manchester Coding ที่ 2,000 bit/s
- ตัวอย่าง vCard ถูก Pack จาก 169 bytes เหลือ 79 bytes ก่อนส่ง
- แต่ละ Band ใช้ Bluetooth ส่ง Contact เข้า Android App
- Prototype ปัจจุบันยังมี Near-field Leak เมื่อ Band อยู่ใกล้กันประมาณ 10 cm
- Battery Life ยังไม่ได้วัดจริง แม้ใช้ Li-ion ประมาณ 500mAh
- Source มี STL, KiCad, Firmware, Android App และ Build Files ให้ศึกษาต่อ
Handoff คืออะไร?
แนวคิดของ Handoff เริ่มจากการมอง Communication ในทางตรงกันข้ามกับการพยายามส่งสัญญาณให้ไกลขึ้นเรื่อย ๆ
Source ยกตัวอย่างตั้งแต่ Shortwave, FM, Wi-Fi, Bluetooth และ NFC ก่อนจะมาถึงแนวคิดสุดท้าย:
Handoff: 0 cm
เป้าหมายไม่ใช่การส่งข้อมูลข้ามห้องหรือข้ามเมือง แต่ให้ Contact เดินทางระหว่างคนสองคน ในช่วงเวลาที่ทั้งคู่สัมผัสกันอยู่แล้ว
เมื่อจับมือสำเร็จ Contact จาก Band หนึ่งจะเข้า Band อีกฝั่ง และถูกส่งเข้า Phone ของอีกคน ส่วน Contact ของอีกฝ่ายก็เดินทางย้อนกลับในกระบวนการเดียวกัน
ดู Handoff ทำงานจริง
Video แสดง Concept ของโปรเจกต์ตั้งแต่ Band, การจับมือ ไปจนถึง Contact ที่ปรากฏใน Companion App หลังการแลกข้อมูล
Contact เดินทางจาก Phone หนึ่งไปอีก Phone ยังไง?
เก็บ Contact Card ของเจ้าของ
เก็บ Card ที่ Pack แล้วไว้พร้อมส่ง
รับ Frame และประกอบ Contact
แสดง Contact ใน Handoff App
Bluetooth จึงไม่ใช่ช่องทางแลก Contact ระหว่างคนสองคนโดยตรง แต่ใช้สำหรับเชื่อม Band กับโทรศัพท์ของเจ้าของแต่ละคน
Hardware หลักมีอะไรบ้าง?
| ส่วน | Hardware จาก Source | หน้าที่ |
|---|---|---|
| MCU | Raspberry Pi Pico 2 W | DSP, Protocol, PIO Tone Generation และ Bluetooth |
| Analog Front End | MCP6292-E/MS Dual Op-Amp | Amplify สัญญาณขนาดเล็กที่รับจาก Body Link |
| Skin Electrode | Copper Plate ที่หุ้มฉนวน | Capacitive Coupling ระหว่าง Circuit กับ Skin |
| Outer Electrode | Copper Plate ต่อ Board Ground | Couple กับ Environment เพื่อช่วย Return Path |
| Feedback | RGB LED + Coin Vibration Motor | แจ้งสถานะ Pair / Exchange / Result |
| Battery | 1S Li-ion 3.7V ประมาณ 500mAh | จ่ายไฟให้ Band |
| Charging | TP4056 Module | อยู่ภายนอก Enclosure ใน Prototype ปัจจุบัน |
Body-Coupled Communication ทำงานยังไง?
Metal Plate ด้านหลัง Band ไม่ได้แตะผิวแบบ Conductive Contact ตรง ๆ เพราะมีชั้นฉนวนคลุมอยู่
Plate กับ Skin จึงทำตัวเหมือน Capacitor:
- Metal Plate เป็นด้านหนึ่ง
- Skin เป็นอีกด้าน
- Insulation เป็น Dielectric
Tone จาก Pico Coupling ผ่าน Plate เข้าสู่ Skin ก่อนเดินทางผ่านแขน, Handshake และแขนของอีกคน ไปยัง Receiver Plate ของอีก Band
เนื่องจากไม่มี Return Wire เชื่อมคนสองคน Prototype จึงใช้ Outer Electrode ซึ่งต่อ Board Ground และ Coupling กับ Environment รอบตัว เพื่อช่วยสร้าง Return Path
ทำไมใช้ 180 และ 200 kHz?
Physical Layer รุ่นปัจจุบันส่ง Tone สองค่า:
180 kHz และ 200 kHz
Raspberry Pi Pico 2 W ใช้ PIO สร้าง Tone จาก Pin โดยตรง ทำให้ Source ไม่ต้องใช้ Oscillator หรือ Dedicated Driver Chip เพิ่ม
MCU ถูกตั้ง Clock ที่: 144 MHz
Source อธิบายว่าเลือกค่านี้ เพราะทำให้ Period ของ Tone 180 และ 200 kHz สอดคล้องกับจำนวน Clock Cycles ที่ลงตัวตาม Design
ฝั่งรับ Sample สัญญาณที่: 500,000 samples/second
ทำไมใช้ Goertzel แทน FFT?
Receiver ไม่ได้ต้องการรู้ว่า Spectrum ทั้งย่านมีอะไรบ้าง แต่ต้องตอบคำถามง่ายกว่านั้น:
ตอนนี้ 180 kHz หรือ 200 kHz เด่นกว่า?
จึงใช้ Goertzel Filters รวม 5 Bins:
| Frequency | หน้าที่ |
|---|---|
| 140 kHz | Noise / Guard Bin |
| 160 kHz | Noise / Guard Bin |
| 180 kHz | Data Tone |
| 200 kHz | Data Tone |
| 220 kHz | Noise / Guard Bin |
ทุก 25 Samples ระบบจะประเมินพลังงานของ Frequency ที่สนใจ ซึ่งที่ Sample Rate นี้เท่ากับ Window ประมาณ: 50 µs
Guard Bins 140, 160 และ 220 kHz ไม่ได้ Carry Data แต่ใช้เป็น Measurement ของ Noise รอบข้าง ในเวลาเดียวกับ Data Tone
Manchester Coding และ Data Rate 2 kbps
Handoff ใช้ Manchester Coding โดยหนึ่ง Bit มีสอง Chips
- 180 → 200 kHz = 0
- 200 → 180 kHz = 1
Source ระบุ Data Rate: 2,000 bit/s
ข้อดีของ Scheme นี้คือ ทุก Bit มี Transition ตรงกลาง และแต่ละ Bit ใช้ทั้งสอง Tone ทำให้ Receiver พึ่งการเปรียบเทียบ มากกว่าการจำ Absolute Signal Level เพียงค่าเดียว
Handshake สั้นมาก แล้ว Contact Card จะส่งทันได้ยังไง?
vCard มีข้อความมาตรฐานซ้ำจำนวนมาก เช่น Field Label และ Header ซึ่งกิน Airtime โดยไม่ได้เพิ่มข้อมูลส่วนบุคคล
Source ยกตัวอย่าง Card หนึ่งใบ:
169 bytes → Pack เหลือ 79 bytes
เทคนิคที่ใช้รวมถึง Tag แบบหนึ่ง Byte, การ Pack ตัวเลข และแทน Common Email Domains ด้วยค่า Compact
หลัง Pack แล้ว Contact จะแบ่งเป็นหลาย Frame โดยข้อมูลสำคัญมาก่อน:
- Name + Phone
- ข้อมูลที่เหลือ
Frame หนึ่งใช้เวลาประมาณ: 156 ms
ถ้า Handshake สั้นเกินไป Protocol ถูกออกแบบให้ Frame สำคัญ มีโอกาสเดินทางก่อน แทนการรอให้ Contact ทั้งใบครบแล้วค่อยส่ง
ไม่มี Touch Sensor แล้วรู้ได้ยังไงว่าจับมือ?
Prototype ไม่มี Trigger จาก Touch Sensor, Accelerometer หรือ Button สำหรับประกาศว่า “มือแตะกันแล้ว”
Logic ของระบบจึงกลับด้าน:
แต่ละ Band ทำ Loop:
ส่ง Frame สั้นพร้อม Random Nonce
รอช่วงเวลา Random
ตรวจ Checksum และ Nonce
ฝั่งที่ได้ยินก่อนส่ง Frame ก่อน แล้วสลับกันทีละ Frame
Android App ทำอะไร?
Companion App ดูแลฝั่ง Phone ได้แก่:
- Pair Band
- สร้าง Contact Card
- ดูคนที่เคยพบ
- Search และ Sort
- เพิ่ม Note
- Save Contact ที่เลือกเข้า Phone Contacts
- ดู Battery / Firmware Information
- สั่ง Find My Band
Source ระบุว่า Contact ที่รับมาจะอยู่ใน Handoff App ก่อน ไม่ได้ถูกยัดเข้ารายชื่อโทรศัพท์อัตโนมัติทั้งหมด
อีกจุดที่น่าสนใจคือ Android App ไม่มี Internet Permission ตาม Design ที่ผู้สร้างอธิบาย ดังนั้น Contact History ถูกเก็บบน Phone ตามระบบของ Project
Story ดูเหมือน Product พร้อมใช้ แต่ Prototype จริงยังมีข้อจำกัด
ต้นฉบับใช้ Storytelling จำลองภาพ Handoff ถูกแจกในงาน Expo ซึ่งช่วยอธิบาย User Experience ได้ดี แต่ช่วง Technical Conclusion ผู้สร้างเปิดข้อจำกัดของ Hardware รุ่นปัจจุบันไว้หลายข้อ
| สิ่งที่ Concept ต้องการ | สถานะ Prototype ปัจจุบัน |
|---|---|
| จับมือธรรมดาแล้วแลก Contact | Held Clasp ที่ Skin Contact ชัดทำงานดีกว่า และผู้สร้างต้องการปรับรุ่นถัดไปให้ Ordinary Shake ทำงานได้ดีขึ้น |
| ใส่ข้อมือไหนก็ได้ | ต้องอยู่บนมือข้างที่ใช้จับมือ |
| 0 cm / Touch-only | พบ Near-field Leak เมื่อ Band สองตัวอยู่ใกล้กันประมาณ 10 cm |
| ใช้ได้ทั้ง Event | ยังไม่ได้วัด Current Draw และ Battery Runtime |
| App พร้อมติดตั้ง | Prototype ปัจจุบันเป็น Android App ที่ต้อง Build จาก Source |
| ขนาดแบบ Watch | Enclosure ปัจจุบันประมาณ 45 × 65 × 25 mm |
ผลการวัด Physical Layer v2
Official GitHub ของ Project รายงาน Worn Link Test ของ v2 ไว้ว่า:
- 1,015 good frames
- Frame Error Rate 0.163
ขณะที่ v1 ใน Test เดียวกัน:
- 447 good frames
- Frame Error Rate 0.296
ตัวเลขนี้เป็น Measurement จาก Setup ของผู้สร้าง ไม่ใช่ Product Reliability Specification สำหรับทุกสภาพแวดล้อม
Safety ก่อนคิดจะสร้าง
- ใช้ Battery เท่านั้น เมื่อ Band ถูกสวมบนตัว
- ห้ามใช้ Band ที่ยังต่อกับ Mains-powered Laptop ขณะสวม
- Skin Electrode ต้องมีฉนวนปิดครบ Edge-to-edge
- Outer Electrode ต้องหันออกจากร่างกายตาม Design
- Source ระบุ Hand-to-hand only
- Source ระบุไม่ให้ใช้กับผู้ที่มี Pacemaker หรือ Implanted Defibrillator
R1 / R2 มี Caveat ใน Source
Prototype ที่สร้างจริง ใช้ R1 และ R2 ที่: 100 kΩ
แต่ Design Rule เดิม และบางส่วนของ Silkscreen / BOM ยังอ้าง: 1 MΩ
PCB, Firmware และ GitHub Files มีให้ศึกษาจริง
Official Repository แยก Project ออกเป็นหลายส่วน:
- firmware/ — Pico SDK Firmware และ DSP / Protocol
- hardware/ — KiCad PCB, Schematic, BOM และ Fab Files
- hardware/enclosure/ — Enclosure Files
- android/ — Native Android App
- docs/ — Design, Link, Bring-up และ Full Write-up
- scripts/ — Build, Test และ Hardware Bring-up Tools
Repository ที่ตรวจรอบนี้เป็น Public แต่ไม่ได้พบ Project-wide LICENSE File ที่ประกาศ License ชัดเจน จึงไม่ควรสมมติว่าเป็น MIT, GPL หรือ License อื่น เพียงเพราะ Source Code เปิดให้ดู
Build และ Test จาก Official GitHub
Official Repository ใช้ Raspberry Pi Pico SDK, CMake และ Ninja และมี Script สำหรับ Build / Test โดยตรง
python scripts/build.py --target handoff
python scripts/test.py
python scripts/bringup.py flash handoff
Repository ยังระบุ Host Test Suite สำหรับ DSP, Link, Record และ Protocol เพื่อให้หลายส่วนของ Firmware ทดสอบได้โดยไม่ต้องมี Hardware จริง
3D Printed Enclosure: มี STL ให้ครบ Top, Bottom และ Button
Source มีไฟล์ Enclosure แยกเป็น:
- Top
- Bottom
- Button
Print Information ที่ Source ระบุ:
- Material: PLA หรือ PETG
- Layer Height: 0.2 mm
Source ไม่ได้ให้ค่า Infill, Nozzle, Support, Print Temperature หรือ Bed Temperature จึงไม่ควรสร้างค่าขึ้นเพิ่มเติม
รุ่นต่อไปผู้สร้างอยากแก้อะไร?
Chapter ท้ายของ Source ไม่ได้ปิดแบบ “เสร็จสมบูรณ์” แต่ระบุสิ่งที่ควรปรับต่อไว้อย่างชัดเจน
- ทำให้ Ordinary Handshake ทำงานได้ดีขึ้น
- ลด Near-field Leak
- ทดลอง Frequency ที่สูงกว่า 200 kHz ซึ่งต้องเปลี่ยน Hardware
- ลดขนาด Board / Enclosure ให้ใกล้ Watch-sized
- ลด Power Consumption และวัด Battery Life จริง
- รวม Charging Circuit เข้า Board แทน TP4056 ภายนอก
- เก็บ Contact ไว้บน Band ได้ทั้งวันโดยไม่ต้องพึ่ง Phone ตลอด
- เพิ่ม Clock บน Band เพื่อ Timestamp ตอนจับมือจริง
- รองรับ Work Card และ Personal Card
- ทำ iPhone App
ทำให้ Handoff เป็น Project ที่น่าสนใจ ไม่ใช่เพราะมันแก้ทุกอย่างเสร็จแล้ว แต่เพราะผู้สร้างบันทึกทั้งสิ่งที่เวิร์ก และสิ่งที่ยังไม่เวิร์กไว้ค่อนข้างละเอียด
โปรเจกต์นี้มีหลายขั้น แนะนำอ่านต้นฉบับควบคู่กัน
Handoff มีทั้ง Analog Front End, DSP, Protocol, BLE, Android App, PCB และ Body-Coupled Communication รวมถึง Safety Rule เฉพาะของระบบ จึงไม่ควรอาศัยบทความสรุปเพียงหน้าเดียวหากต้องการสร้างจริง
FAQ: คำถามที่พบบ่อย
1. Handoff คืออะไร?
เป็น Wearable Prototype แบบสองสายรัดข้อมือ ที่แลก Contact Card ผ่านการจับมือ แล้วส่ง Contact เข้า Android Phone ผ่าน Bluetooth
2. ใช้ Raspberry Pi รุ่นไหน?
ใช้ Raspberry Pi Pico 2 W เป็น MCU Board หลักของแต่ละ Band
3. Contact ส่งผ่าน Bluetooth ระหว่างคนสองคนโดยตรงไหม?
ไม่ Body Link ระหว่าง Band ใช้ Capacitive Body-Coupled Communication ส่วน Bluetooth ใช้เชื่อม Band กับ Phone ของเจ้าของแต่ละคน
4. Body-Coupled Communication คืออะไรใน Project นี้?
เป็นการ Couple Signal จาก Electrode ที่มีฉนวนผ่าน Skin แล้วใช้ร่างกายและการจับมือ เป็นส่วนหนึ่งของ Signal Path
5. Handoff ใช้ Frequency เท่าไร?
Data Tone ใช้ 180 และ 200 kHz ส่วน 140, 160 และ 220 kHz ใช้เป็น Noise / Guard Bins
6. ทำไมใช้ Goertzel แทน FFT?
Source อธิบายว่าระบบต้องวัดเพียง Frequency ไม่กี่ค่า Goertzel จึงตอบโจทย์กว่าการคำนวณ Spectrum ทั้งชุด
7. Data Rate เท่าไร?
Source ระบุ 2,000 bit/s โดยใช้ Manchester Coding
8. ทำไม Contact Card ต้องถูก Pack?
Link มีเวลาสั้นและ Data Rate จำกัด Source จึง Pack ตัวอย่าง vCard จาก 169 bytes เหลือ 79 bytes เพื่อลดข้อมูลมาตรฐานที่ซ้ำกัน
9. ต้องจับมือนานแค่ไหน?
Source ใช้ช่วงประมาณหนึ่งวินาทีเป็นบริบทของ Handshake และ Build Guide ระบุให้จับแบบ Firm Grip ประมาณหนึ่งวินาที แต่ Prototype ยังไม่ให้ Ordinary Shake ทำงานได้สมบูรณ์ทุกกรณี
10. ใส่ Band ข้อมือไหนก็ได้ไหม?
Prototype ปัจจุบันต้องใส่บนข้างที่ใช้จับมือ ผู้สร้างระบุว่าอีกข้างไม่ทำงานตามที่คาด
11. ต้องแตะกันจริง 0 cm เท่านั้นไหม?
Design Intent คือ Touch-only แต่ Prototype พบ Near-field Leak ที่ Band สองตัวสามารถ Complete Exchange ได้เมื่ออยู่ใกล้กันประมาณ 10 cm ในบาง Test
12. Contact ถูกเก็บบน Cloud หรือไม่?
Source ระบุว่า Android App ไม่มี Internet Permission และ Contact History อยู่บน Phone แต่ Source ไม่ได้ระบุ Cloud Architecture หรือ Encryption เพิ่มเติมนอกเหนือจากนั้น
13. มี iPhone App หรือยัง?
ยังไม่มีใน Prototype ปัจจุบัน ผู้สร้างระบุ iPhone App เป็นหนึ่งในสิ่งที่อยากเพิ่มในรุ่นต่อไป
14. Battery ใช้ได้นานแค่ไหน?
Source ยังไม่ได้วัด Current Draw และ Battery Runtime จริง จึงไม่มีตัวเลขชั่วโมงที่ยืนยันได้
15. มีไฟล์ STL ไหม?
มี Source ให้ไฟล์ Enclosure Top, Bottom และ Button สำหรับ 3D Printing
16. มี Schematic และ PCB Files ไหม?
มี Official Repository มี KiCad Schematic, PCB, BOM และ Fabrication Files
17. ต้องใช้ Oscilloscope หรือไม่?
Source ระบุว่า Build นี้ทำ Bring-up ด้วย Multimeter และไม่ได้ใช้ Oscilloscope ในขั้นตอนที่ผู้สร้างบันทึกไว้
18. Handoff พร้อมเอาไปแจกคนใน Event จริงหรือยัง?
Source แสดง Prototype ที่ทำงานจริง แต่ยังมีข้อจำกัดเรื่อง Near-field Leak, Wrist Position, Ordinary Handshake, Battery Measurement, Charging Design และขนาด Enclosure จึงไม่ควรตีความว่าเป็น Commercial Product ที่พร้อม Deploy ทันที
References / แหล่งข้อมูลต้นฉบับ
- Hackster.io — Handoff: shake hands, share contacts
- Rahul Jeyaraj — Official Handoff GitHub Repository
- Handoff — Design / Link / Hardware Documentation
- Handoff — KiCad Hardware, BOM and Fabrication Files
- Handoff — Firmware Source
- Handoff — Android App Source
- YouTube — Handoff: shake hands, share contacts
Wearable ที่น่าสนใจ ไม่ได้เริ่มจากหน้าจอเสมอไป
Handoff เป็นตัวอย่างว่า Raspberry Pi Pico 2 W สามารถถูกใช้มากกว่าการต่อ Sensor หรือควบคุมอุปกรณ์ทั่วไป: PIO สร้าง Tone, ADC รับ Signal, DSP แยก Frequency, BLE เชื่อม Phone และ Protocol ทั้งชุดถูกออกแบบรอบ Interaction ที่ธรรมดามากอย่าง “การจับมือ”
หากกำลังทำ Raspberry Pi Pico, Embedded, Sensor, Wearable หรือ Electronics Project สามารถสอบถามทีม Globalbyte เรื่อง Development Board และอุปกรณ์ที่เหมาะกับ Project ได้
และถ้ามีไฟล์ STL / Enclosure แต่ไม่มีเครื่องพิมพ์ สามารถส่งไฟล์ให้ทีม Globalbyte ช่วยประเมินบริการพิมพ์ 3D ได้เช่นกัน