ไอเดียเจ๋งๆ มาจากไหน
เพื่อนพวกเราคนนึงเพิ่งรับน้องหมาสูงวัยชื่อ "เจลลี่" มาเลี้ยง แล้วน้องเป็นโรคกระวนกระวายเวลาอยู่ตัวคนเดียว (Separation Anxiety) เพื่อช่วยฝึกน้องเวลาต้องปล่อยให้อยู่บ้านตามลำพัง เขาก็เลยขอให้พวกเราช่วยทำเครื่องจ่ายขนมแบบไร้สาย เอาไว้คู่กับกล้องดูสัตว์เลี้ยงที่เขามีอยู่แล้ว ในวิดีโอ เราสาธิตหลักการทำงานด้วยความช่วยเหลือจาก "ทิโมธี" กระต่ายน้อยของเรา
ภาพรวมการออกแบบ
เครื่องจ่ายขนมตัวนี้ถูกออกแบบมาให้แขวนกับตะขอบนผนัง และควบคุมผ่าน WiFi ทางแอปในมือถือผู้ใช้ มีช่องใส่ขนมทั้งหมด 8 ช่อง ใช้เซอร์โว (Servo) เป็นตัวจ่าย ช่องพวกนี้อาจจะใหญ่พอที่จะใส่อาหารให้สัตว์เลี้ยงตัวเล็กๆ เช่น แฮมสเตอร์หรือปลา ได้หลายวันเลยทีเดียว (ถ้าปรับแต่งหน่อย) แต่สำหรับงานของเรา แค่ใส่ขนมชิ้นเล็กๆ สำหรับน้องหมาได้สักสองสามชิ้นก็พอแล้ว
วิดีโอใน YouTube
ดูวิธีประกอบและเห็นมันทำงานจริงในวิดีโอของพวกเรา:
ล้วงลึกเทคนิค (Technical Deep-Dive)
ระบบ "Treat-Link" นี้เป็นโซลูชัน IoT แบบ Dual-Core สุดล้ำ สร้างบนบอร์ด Nano RP2040 Connect ที่ผสานซิลิคอนประสิทธิภาพสูงเข้ากับความปลอดภัยระดับคลาวด์เนทีฟ
- การผสานงานของ Nano RP2040 & NINA-W102:
- ศูนย์กลางซิลิคอน: โปรเจกต์นี้ใช้ ไมโครคอนโทรลเลอร์ RP2040 (Dual ARM Cortex-M0+) จาก Raspberry Pi ขณะที่คอร์หนึ่งจัดการสแต็ก Wi-Fi ผ่านโมดูล u-blox NINA-W102 อีกคอร์ก็จัดการจังหวะเวลาจริง (Real-time PWM timing) สำหรับเซอร์โวจ่ายขนม
- การยืนยันตัวตนที่ปลอดภัย: RP2040 Connect มี Crypto-element ATECC608A ซึ่งเก็บคีย์ส่วนตัวที่ไม่ซ้ำใครไว้สำหรับยืนยันตัวตนกับ Arduino Cloud ทำให้การสื่อสารปลอดภัยแน่นอน
- ตรรกะสองทางของ IoT Cloud:
- การซิงโครไนซ์ตัวแปร: เฟิร์มแวร์ใช้ ไลบรารี ArduinoIoTCloud เมื่อตัวแปรบูลีน
drop_treatถูกสลับค่าในแอปมือถือ ข้อความจะถูกเผยแพร่ผ่าน โปรโตคอล MQTT RP2040 จะติดตาม (Subscribe) หัวข้อนี้และเรียกฟังก์ชันonDropTreatChange()ทำงานเกือบจะทันที - วิดเจ็ตเทเลเมทรี: ระบบรายงานสถานะ เกจ
treats_leftให้ข้อมูลย้อนกลับแบบเรียลไทม์เกี่ยวกับสถานะของช่องใส่ขนม สะท้อนดัชนีที่คำนวณได้ของช่องทั้ง 8
- การซิงโครไนซ์ตัวแปร: เฟิร์มแวร์ใช้ ไลบรารี ArduinoIoTCloud เมื่อตัวแปรบูลีน
- กลไกเซอร์โวและการกู้คืนข้อผิดพลาด:
- อัลกอริทึมการหมุน: เครื่องจ่ายใช้การหมุนเพิ่มทีละ 45 องศา ($360/8$) เซอร์โวถูกขับด้วยสัญญาณ PWM 50Hz โดยที่ความกว้างพัลส์ตั้งแต่ 1000µs ถึง 2000µs จะจับคู่กับตำแหน่งช่องทางกายภาพที่แน่นอน
- ควบคุมด้วยมือเอง: เพื่อจัดการกับปัญหาขนมติดค้าง ระบบมีวิดเจ็ต "Position Slider" นี้จะให้ผู้ใช้สามารถ "เขย่า" เซอร์โวด้วยมือผ่านระยะการหมุนของมันได้จากระยะไกล เพื่อเคลียร์ขนมที่ติดขัด
วิศวกรรมและการลงมือทำ
- การเข้ารหัสสถานะ HMI:
- ไฟ LED RGB บนบอร์ดถูกแมปกับตัวแปร Cloud ชื่อ
rgb_lightตัวนี้ทำหน้าที่เป็น HMI สำหรับตรวจสอบภายใน ช่วยให้ผู้ใช้เช็คความแรงสัญญาณ Wi-Fi หรือสถานะการเชื่อมต่อได้ง่ายๆ แค่ดูจากสีของไฟที่กระพริบ (เช่น เขียว = เชื่อมต่อแล้ว, แดง = ผิดพลาด) ง่ายมั้ยล่ะ!
- ไฟ LED RGB บนบอร์ดถูกแมปกับตัวแปร Cloud ชื่อ
- การรักษาเสถียรภาพของสายไฟเลี้ยง (Power Rail Stabilization):
- เซอร์โวมันกินกระแสเป็นพักๆ นะเว้ย! โปรเจคนี้เลยต่อไฟเลี้ยงเซอร์โว ($V_{cc}$) เข้ากับ ขา VIN ของบอร์ด Nano (ซึ่งรับไฟมาจาก USB 5V) เพื่อให้สายไฟเลี้ยงส่วนที่ไวต่อสัญญาณรบกวน (RP2040 logic rail) แยกออกจากมอเตอร์โดยสิ้นเชิง ห้ามช็อตนะตัวนี้!
- การออกแบบตัวถังและการติดตั้ง:
- ดีไซน์ 8 ช่องนี้เหมาะกับขนมสัตว์เลี้ยงไซส์มินิสุดๆ ตัวเคสออกแบบมาให้มีกลไกช่วยทอร์กสูง เพื่อให้เซอร์โวตัวจิ๋วสามารถดันขนมที่ติดกับผนังกั้นได้สบายๆ ไม่มีสะดุด สู้งานนะน้อง!
การสร้างตัวถัง:
อยากรู้ว่าเราสร้างตัวถังยังไง ไปดูได้ที่ Instructable ของเราเลย (ลิงก์ด้านล่าง) แต่ออกตัวก่อนว่าเราใช้เทคนิคการผลิตที่หลากหลายกว่าที่หลายคนจะเข้าถึงได้ ดังนั้น แนะนำให้ปรับดีไซน์ให้เหมาะกับเครื่องมือและประสบการณ์ของตัวเองนะจ๊ะ
การเดินสาย Arduino:
วงจรในโปรเจคนี้เรียบง่ายมากๆ แค่ต่อสายเซอร์โวตามนี้เลย:
- สายแดง = Vin
- สายน้ำตาล/ดำ = GND
- สายเหลือง/ขาว = D9
ของเราใช้วิธีบัดกรีสายเหล่านี้ผ่านแผ่น Stripboard ไปยัง Arduino
บนคอมพิวเตอร์ของคุณ:
สร้างบัญชี Arduino IoT Cloud
สร้าง "Thing" ใหม่ขึ้นมา
ในแท็บ Setup:
สร้าง Cloud Variables ทั้ง 4 ตัวนี้ขึ้นมา:
- bool drop_treat - Read & Write - On Change
- int position - Read & Write - On Change
- CloudColoredLight rgb_light - Read & Write - On Change
- int treats_left - Read Only - On Change
เชื่อมต่อบอร์ด Arduino Nano RP2040 ของคุณ ถ้ายังไม่เคยใช้ Arduino IoT Cloud มาก่อน คุณต้องทำตามขั้นตอนเพื่อติดตั้งซอฟต์แวร์ Create Agent
ตั้งค่า ชื่อ WiFi และรหัสผ่านของคุณ
ในแท็บ Sketch:
คัดลอกสคริปต์จาก GitHub repository ของโปรเจค
วางลงในตัวแก้ไขสคริปต์ (แทนที่โค้ดเดิมทั้งหมด) จากนั้นคลิกไอคอนเครื่องหมายถูกที่มุมซ้ายบนเพื่อตรวจสอบ (Verify) สคริปต์
ในแท็บ Dashboards:
สร้าง Dashboard ใหม่และตั้งชื่อให้มัน
ตรวจสอบให้แน่ใจว่าคุณอยู่ในโหมดแก้ไข (มุมซ้ายบน)
คลิกปุ่ม Add จากนั้นเลือก "Widgets" และสร้าง Widget แต่ละตัวตามนี้ โดยผูกกับตัวแปรที่กำหนด:
- Push Button: drop_treat
- Slider: position (ช่วงค่า: Min = 0, Max = 180)
- Colored light: rgb_light
- Gauge: treats_left (ช่วงค่า: Min = 0, Max = 8)
- [Optional] Sticky note สำหรับเขียนคำอธิบายเพิ่มเติม
จัดเรียง Widget ต่างๆ ตามใจชอบได้เลย อยากให้อยู่ตรงไหนก็ลากไปวาง ง่ายๆ จัดไปวัยรุ่น!
ใน Things -> Pet feeder -> Sketch:
เสียบ Arduino Nano RP2040 Connect เข้ากับพอร์ต USB ของคอม แล้วกดปุ่ม Upload ได้เลย
ติดตั้ง:
หาที่แขวนตัวจ่ายขนมให้เหมาะกับน้องหมาน้องแมว แล้วต่อ Arduino เข้ากับแหล่งจ่ายไฟด้วยสาย MicroUSB
บนมือถือหรือแท็บเล็ต:
ดาวน์โหลดแอป Arduino IoT Remote แล้วล็อกอินด้วยบัญชีของตัวเอง
เปิด Nano Pet Feeder Dashboard แล้วลองกดๆ ทดสอบว่าแต่ละ Widget ทำงานตามที่คิดไว้มั้ย
วิธีใช้:
กดปุ่ม "Drop treat" เพื่อปล่อยขนมออกมา
ถ้าขนมติดขัด ใช้สไลด์ "Servo position" หมุนเซอร์โวเองได้ด้วยมือ
Widget ไฟ RGB ใช้ดีบั๊กเรื่องการเชื่อมต่อได้นะ มันจะเปลี่ยนสี LED บน Arduino ตามสีที่เราเลือกในตัวเลือกสี
สรุป
Treat-Link แสดงให้เห็นพลังของระบบ IoT สมัยใหม่ ด้วยการผสานซิลิคอนประสิทธิภาพสูง ความปลอดภัยบนคลาวด์แบบเนทีฟ และการขับเคลื่อนเชิงกลที่เชื่อถือได้ มันเป็นโครงสร้างระดับโปรสำหรับระบบอัตโนมัติในบ้านและการดูแลสัตว์เลี้ยง
Cloud Connectivity: เสริมสร้างสายสัมพันธ์ผ่านการเสริมแรงจากระยะไกลที่ปลอดภัย