บทนำ
บาร์บอทของเราถือกำเนิดขึ้นจากความหลงใหลในการสร้างแกดเจ็ตด้วย Arduino นะน้อง เราคิดว่ามันต้องสนุกแน่ๆ ถ้าเรานำเสนอผลิตภัณฑ์สุดแปลกใหม่ให้กับช่อง YouTube ของเรา โดยใช้เทคโนโลยีที่ Arduino มอบให้ บาร์บอทของเราเป็นวัตถุเชื่อมต่อ (connected object) ที่สามารถเตรียมเครื่องดื่มอร่อยๆ ได้ โดยใช้แดชบอร์ดบน Arduino IoT Cloud หรือใช้ MKR IoT Carrier เป็นรีโมทคอนโทรลวางไว้บนโต๊ะเลย
มุมมองของโปรเจกต์
The Cloud Barbot #cloudgames2022 คือการสำรวจเทคโนโลยีหุ่นยนต์และการโต้ตอบ IoT แบบจัดเต็มเลยว่ะ โดยเน้นไปที่บล็อกพื้นฐานสำคัญ—นั่นคือ โมดูล MKR WiFi 1010 และ ตรรกะการคำนวณปริมาตรแบบหลายปั๊ม (multi-pump volumetric logic) ของคุณ—น้องจะได้เรียนรู้วิธีการสื่อสารและประสานงานภารกิจการเตรียมเครื่องดื่ม โดยใช้ตรรกะซอฟต์แวร์เฉพาะทางและการตั้งค่าการเชื่อมต่อไร้สายที่เสถียร
การลงมือทำจริง: การคำนวณปริมาตรและแดชบอร์ดบนคลาวด์
โปรเจกต์นี้เผยให้เห็นเลเยอร์ที่ซ่อนอยู่เบื้องหลังการโต้ตอบแบบเซ็นส์แล้วเท:
- เลเยอร์ระบุตัวตน: MKR IoT Carrier ทำหน้าที่เป็นอินเทอร์เฟซความละเอียดสูงของเรา วัดทุกการเคลื่อนไหวของผู้ใช้เพื่อประสานงานภารกิจผสมเครื่องดื่ม
- เลเยอร์แปลงข้อมูล: ระบบใช้โปรโตคอล WiFi ความเร็วสูง (ผ่านเฟิร์มแวร์ WiFiNINA) เพื่อรับแพ็กเก็ตข้อมูลความเร็วสูงสำหรับประสานงานงานเซ็นซิ่งที่สำคัญ
- เลเยอร์อินเทอร์เฟซคลาวด์: Arduino IoT Cloud ทำหน้าที่เป็นแดชบอร์ดข้อมูลความละเอียดสูงสำหรับตรวจสอบสถานะบาร์บอทของคุณ (เช่น ขนาดแก้ว, ระดับการผสมเป็นมิลลิลิตร)
- เลเยอร์ตรรกะประมวลผล: โค้ด Arduino ใช้กลยุทธ์ "ตามเวลาและปริมาตร" (หรือแบบปั๊มส่งจ่าย): มันตีความการตั้งค่ามิลลิลิตรและจับคู่กับเวลาการทำงานของปั๊ม เพื่อให้การไหลของเครื่องดื่มปลอดภัยและเป็นจังหวะ (60 * ml / speed) ห้ามช็อตนะตัวนี้
- ลูปการสื่อสารรีโมทคอนโทรล: รหัสท่าทางจะถูกส่งเป็นจังหวะไปยัง Serial Monitor ในระหว่างการปรับเทียบเริ่มต้น เพื่อประสานสถานะ
แดชบอร์ด

แดชบอร์ดของบาร์บอทอนุญาตให้คุณปรับปริมาณของเหลวที่ต้องการสำหรับแต่ละส่วนผสมเป็นมิลลิลิตรได้เลยจ้า เป็นไปได้ที่จะเลือกขนาดแก้วจากขั้นต่ำ 0 ไปจนถึงสูงสุด 400 มล. ขอบคุณไลบรารี Barbot Nano Carrier เราจะสามารถรับระดับการเติมแก้วปัจจุบันและแสดงเปอร์เซ็นต์ให้เราดูได้ด้วย เครื่องหมายถูกสีเขียวบ่งชี้ว่าบาร์บอทพร้อมรับคำสั่งเริ่มทำงานแล้ว
รีโมทคอนโทรล
การใช้ Oplà IoT Kit เราได้เพิ่มรีโมทคอนโทรลแบบหนึ่งเพื่อเตรียมเครื่องดื่มจากระยะไกล โดยไม่ต้องใช้มือถือหรือพีซีเลย
ขอบคุณฟีเจอร์จับท่าทาง (gestures) ทำให้เราสามารถเปลี่ยนเครื่องดื่มที่จะปรับแต่งได้ โดยการขยับมือจากขวาไปซ้ายหรือซ้ายไปขวาเพื่อเลื่อนดูระดับต่างๆ ที่มีอยู่
การใช้ปุ่มสัมผัส 1 หรือปุ่มสัมผัส 4 ทำให้สามารถเปลี่ยนระดับของเหลวสำหรับแต่ละเครื่องดื่มที่จะผสมได้

ปุ่มสัมผัส 2 ช่วยให้คุณเริ่มผสมเครื่องดื่มตามระดับที่เลือกไว้ได้
เหมือนกับที่เกิดขึ้นบนแดชบอร์ด จอแสดงผลและ LED ของ MKR IoT Carrier จะเปลี่ยนเป็นสีเขียวหรือแดงตามการทำงานที่บาร์บอทกำลังทำอยู่: ถ้าเขียวคือพร้อมรับงานใหม่ ถ้าแดงคือกำลังยุ่งเตรียมเครื่องดื่มหรือยังไม่พร้อมเต็มที่

ฮาร์ดแวร์และโครงสร้างพื้นฐานหุ่นยนต์
- Arduino MKR WiFi 1010: ตัว "สมอง" ของโปรเจค จัดการการสื่อสาร WiFi แบบหลายทิศทางและประสานการซิงค์สถานะกับคลาวด์
- MKR IoT Carrier: จัดหา "ลิงก์ภาพ" ที่แม่นยำและน่าเชื่อถือให้กับทุกจุดของอินเทอร์เฟซ Oplà
- ปั๊มไดอะแฟรม (5x): จัดเตรียมอินเทอร์เฟซทางกายภาพที่ทรงพลังและน่าเชื่อถือสำหรับ "ภารกิจปรุงเครื่องดื่ม" ครั้งแรกให้สำเร็จ
- โครงสร้างตัวถัง: ให้อินเทอร์เฟซทางกายภาพที่ชัดเจนและดูโปรสำหรับทุกภารกิจหุ่นยนต์ของน้อง และปกป้องชิ้นส่วนภายใน
- MKR Relay Proto Shield: สำคัญมากสำหรับการจัดเตรียมแพลตฟอร์มควบคุม 12V ที่ชัดเจนและประหยัดพลังงานให้กับทุกจุดของปั๊ม
- สาย Micro-USB: ใช้สำหรับโปรแกรม Arduino ของน้องและเป็นอินเทอร์เฟซหลักสำหรับตัวควบคุมระบบ
THE BARBOT LIBRARY
พวกเราสร้างไลบรารีเฉพาะสำหรับบาร์บอทของเรา เพื่อรับประกันว่าน้องจะต้องมาเขียนโค้ดเองน้อยลง ไลบรารีประกอบด้วยไฟล์ barbot.cpp และ barbot.h ซึ่งรวมอยู่ในโค้ดบนหน้านี้แล้ว
ทริคโค้ดเด็ด
ถ้าอยากให้บาร์บอทกลับไปที่ตำแหน่งโฮม (บ้าน) ใช้โค้ดนี้ใน setup ได้เลย:
// Inizialize barbot
barbotCarrier.begin();
// Barbot tower to home
bool home = false;
barbotCarrier.mixerTowerGoTop();
while (!home) {
home = barbotCarrier.mixerToTop();
}
barbotCarrier.mixerTowerStop();
เวลาทำงานของปั๊ม: มันทำงานยังไงนะ?
เพราะเราไม่มีเซ็นเซอร์วัดระดับ พวกเราจึงพยายามหาวิธีแปลงค่ามิลลิลิตรที่เราตั้งไว้สำหรับแต่ละระดับ ให้เป็นมิลลิวินาทีของเวลาทำงาน
สูตรที่เราใช้คือ: 60 * มิลลิลิตร / ความเร็วปั๊ม (ลิตร/นาที)
การจะทำแบบนี้ได้ ใน setup เราต้องกำหนดว่าปั๊มที่เราใช้สามารถปั๊มได้กี่ลิตรต่อนาที ในกรณีของเรา ปั๊มไดอะแฟรมมีอัตราการไหล 2 ลิตรต่อนาที เราจึงตั้งค่าพารามิเตอร์นี้ให้กับทุกปั๊มใน setup:
//Pumps setup ml/m
barbotCarrier.setPump1LitersOnMinute(2); //2lt/m
barbotCarrier.setPump2LitersOnMinute(2);
barbotCarrier.setPump3LitersOnMinute(2);
barbotCarrier.setPump4LitersOnMinute(2);
barbotCarrier.setPump5LitersOnMinute(2);
จากนั้นเราตั้งค่ามิลลิลิตรสำหรับเครื่องดื่มแต่ละชนิดที่จะผสม:
//Pumps setup
barbotCarrier.setPump1Milliliters(400); //for 400ml
barbotCarrier.setPump2Milliliters(400);
barbotCarrier.setPump3Milliliters(400);
barbotCarrier.setPump4Milliliters(400);
barbotCarrier.setPump5Milliliters(400);
เราเปิดปั๊มด้วยคำสั่ง:
barbotCarrier.pumpWrite(PUMP1, HIGH);
barbotCarrier.pumpWrite(PUMP2, HIGH);
barbotCarrier.pumpWrite(PUMP3, HIGH);
barbotCarrier.pumpWrite(PUMP4, HIGH);
barbotCarrier.pumpWrite(PUMP5, HIGH);
เราทำการเปิดปั๊มแค่ครั้งเดียวใน setup หรือโดยใช้ flag ร่วมกับปุ่ม
ใน loop เราตรวจสอบตัวจับเวลาปิดด้วย:
barbotCarrier.pumpTimerOff(PUMP1, 60 * (barbotCarrier.getPump1Milliliters() / barbotCarrier.getPump1LitersOnMinute()));
barbotCarrier.pumpTimerOff(PUMP2, 60 * (barbotCarrier.getPump2Milliliters() / barbotCarrier.getPump2LitersOnMinute()));
barbotCarrier.pumpTimerOff(PUMP3, 60 * (barbotCarrier.getPump3Milliliters() / barbotCarrier.getPump3LitersOnMinute()));
barbotCarrier.pumpTimerOff(PUMP4, 60 * (barbotCarrier.getPump4Milliliters() / barbotCarrier.getPump4LitersOnMinute()));
barbotCarrier.pumpTimerOff(PUMP5, 60 * (barbotCarrier.getPump5Milliliters() / barbotCarrier.getPump5LitersOnMinute()));
ในตัวอย่างที่เรามีให้ในหน้านี้ (Barbot Firmware) มีการสร้างรูทีนเตรียมเครื่องดื่มตั้งแต่บรรทัดที่ 123 ถึง 175 ซึ่งทำให้น้องสามารถทำการทำงานต่างๆ ในเวลาต่างๆ โดยใช้ flag ที่สร้างจากตัวแปร boolean
หมายเหตุสำคัญ: ระบบนี้ไม่ได้ใช้เซ็นเซอร์วัดระดับ ดังนั้นมันอาจจะไม่เสถียรและทำงานไม่ตรงกับที่เราคาดหวัง พวกเราแนะนำให้น้องตั้งค่ามิลลิลิตรโดยใช้ค่าน้อยกว่าความจุจริงเล็กน้อย เพื่อให้มีระยะห่างของข้อผิดพลาดขั้นต่ำ และป้องกันไม่ให้ของเหลวล้นออกจากภาชนะ พวกเราตั้งไว้ที่ 140ml สำหรับภาชนะ 200ml! อย่าลืมนะ ห้ามช็อตนะตัวนี้
[!IMPORTANT] ระวังแก้วแตก! อย่าลืมตั้งค่า Pump Calibration factor (ml/min) ให้ตรงกับปั๊มของตัวเองด้วยนะตัวนี้ แล้วในลูปต้องมี Fail-Safe flag ด้วย ห้ามช็อตนะน้อง!
Barbot Automation and Interaction Step-by-Step
ระบบทำเครื่องดื่มแบบคลาวด์นี้ ออกแบบมาให้ทำงานแบบฉลาดๆ จัดไปวัยรุ่น:
- Initialize Workspace: จัดวางปั๊มกับ MKR carrier ให้เรียบร้อยในโครง Barbot แล้วต่อสายกับขา Arduino ให้ถูกต้องคร้าบ
- Setup Cloud Sync: ใน Arduino IoT Cloud ให้สร้าง Dashboard แล้วกำหนดตัวแปรสำหรับเครื่องดื่ม (เช่น ปริมาณ Pump1-5 เป็น ml) เพื่อควบคุมการผสม
- Internal Dialogue Loop: ระบบจะทำการตรวจสอบสถานะแบบเรียลไทม์และอัพเดทการทำงานของปั๊มตลอดเวลา ตามสูตรเครื่องดื่มที่ตั้งไว้
- Visual and Data Feedback Integration: ดู Dashboard บนมือถือได้เลย มันจะเต้นเป็นจังหวะแสดงสถานะ ตามการตั้งค่าของ Barbot จากระยะไกล สุดเท่!
Future Expansion
- OLED Identity Dashboard Integration: ต่อจอ OLED ขนาดเล็กไว้ด้านหลังเพื่อแสดง "Current IP" หรือ "WiFi Signal Strength" ดูโปรหน่อย
- Multi-sensor Climate Sync Synchronization: ต่อเซ็นเซอร์วัดน้ำหนัก (Weight Sensor - HX711) เพื่อทำฟีเจอร์ "Auto-Glass-Detect" แม่นยำสูงผ่านคลาวด์
- Cloud Interface Registration Support Synchronization: สร้าง Web Dashboard เฉพาะทางบนสมาร์ทโฟนผ่าน WiFi/BT เพื่อติดตามและบันทึกประวัติการทำเครื่องดื่มแบบเป๊ะๆ
- Advanced Velocity Profile Customization Support: เพิ่มฟังก์ชัน "Auto-Clean vCore" ในโค้ด เพื่อให้ระบบล้างตัวเองอัตโนมัติตามระยะห่างของผู้ใช้! สะอาดเว่อร์
Cloud Barbot นี่แหละโปรเจคต์เด็ดสำหรับสายวิทย์-สายช่างที่อยากได้เครื่องมือหุ่นยนต์แบบอินเทอร์แอคทีฟ สนุกและท้าทาย! สู้งานนะน้อง
DEMO
วิดีโอสาธิต:
วิดีโอภาษาอิตาเลียน (มีซับภาษาอังกฤษให้):