โค้ดตัวอย่าง หุ่นฐานเซอร์โวแบบกล่อง + ภารกิจหันหาใบหน้า ว32210 อ้างอิงโปรเจกต์ face-following-robot-uno-q (Samuel Alexander) ตรวจโค้ดตามเอกสาร ยังไม่ได้รันบนบอร์ด UNO Q จริง robot_base_servo.ino วางใน sketch/sketch.ino ใช้กับหุ่นฐานทุกภารกิจ: drive(F/B/L/R/S/T), set_wheel_pwm, get_distance เซอร์โว D9/D10 อัลตราโซนิก D12/D13 หยุดเองเมื่อเจอสิ่งกีดขวาง < 15 cm (ใบงาน 2.1F, 3.1F) face_follow_sketch.ino ไฟล์ต้นฉบับ D3/D6 เก็บไว้เทียบ หุ่นฐานใหม่ใช้ robot_base_servo.ino แทน face_follow_main.py วางเป็น python/main.py ฉบับย่อไม่มี Web UI ใช้คู่กับ robot_base_servo.ino (ใบงาน 3.1F, 4.2F) app.yaml ต้องมี brick arduino:video_object_detection model: face-detection sketch.yaml ใช้ไลบรารี Arduino_RouterBridge, Servo, MsgPack ตามโปรเจกต์ต้นฉบับ servo_pulse_test.ino (เซอร์โวซ้าย D9) ทดลองพัลส์ 1300–1700 us ทีละค่า ค่าละ 10 วินาที (ใบงาน 2.2F ตอนที่ 1) ยกล้อก่อนทดลอง steer_calc.py ตรวจผลคำนวณ heading_error, turn, left_us, right_us (ใบงาน 2.2F ตอนที่ 2) รันบนคอมพิวเตอร์ได้ decide_distance.py ตรรกะจำลองรักษาระยะห่างด้วยขนาดกรอบ (ใบงาน 4.3F ระดับ 2) decide_search.py ตรรกะจำลอง state machine หมุนค้นหาเมื่อไม่พบเป้าหมาย (ใบงาน 4.3F ระดับ 2) ต่อยอดระดับ 1 (ติดตามวัตถุอื่น): ใน app.yaml เปลี่ยน model เป็นโมเดลตรวจจับวัตถุที่มีใน App Lab แล้วตั้ง TARGET_CLASS ให้ตรงกับ label ที่เห็นใน log sample_detections เช่น "cup" หรือ "person" ต่อยอดระดับ 3 (Edge Impulse): ใช้โมเดลที่เทรนเองตามใบงาน 4.1F แล้วตั้ง TARGET_CLASS เป็นชื่อคลาสของกลุ่ม ภารกิจ 1–6 ที่ใช้ vision_bridge.py: แทนการเขียน Serial ด้วย Bridge.notify("drive", cmd) เช่น from arduino.app_utils import Bridge Bridge.notify("drive", "F") # ส่งซ้ำอย่างน้อยวินาทีละครั้ง ไม่อย่างนั้นหุ่นหยุดเอง dist = Bridge.call("get_distance") # เซนติเมตร, -1 = ไม่มีสัญญาณสะท้อน