นวัตกรรมเรือ IoT พลังสูง: การควบคุมผ่านคลาวด์ด้วย Arduino Nano 33 IoT
โปรเจกต์นี้ออกแบบมาเพื่อแสดงความสามารถของ **Arduino Nano 33 IoT** ในการเชื่อมต่อกับระบบนิเวศของ **Arduino Cloud IoT** โดยมุ่งเน้นไปที่การสร้างโปรเจกต์ Aquatic Maker นี่คืองานที่ท้าทายสำหรับวิศวกรและนักพัฒนา Embedded System เนื่องจากต้องใช้ความรู้หลากหลายสาขาวิชา รวมถึงแรงลอยตัว (buoyancy), พลศาสตร์การเคลื่อนที่ (motion dynamics), และที่สำคัญที่สุดคือ การป้องกันน้ำเข้าสู่ระบบอิเล็กทรอนิกส์ (Water Tightness)

ในวิดีโอด้านล่างนี้ คุณจะได้เห็นการทดสอบประสิทธิภาพของเรือขณะนำทาง โดยควบคุมผ่าน Dashboard ที่สร้างขึ้นบน Arduino Cloud IoT โดย Eliezer Neto เราได้ทดสอบตรรกะการเคลื่อนที่พื้นฐาน เช่น การหมุนรอบแกน (rotating on axis), การเคลื่อนที่ไปข้างหน้า (moving forward) และการเลี้ยวขวา (turning right)
ปัญหาทางวิศวกรรมหนึ่งที่พบระหว่างการทดสอบคือ "การเคลื่อนที่ไปข้างหน้าที่ไม่สม่ำเสมอ" ซึ่งเกิดจาก RPM ของมอเตอร์ทั้งสองไม่ตรงกัน ทำให้เรือเบนออกจากทิศทาง หากคุณพบปัญหานี้ มีสองทางแก้ไข: 1) **Software solution** โดยการเพิ่มอัลกอริทึม PID (Proportional-Integral-Derivative) เพื่อชดเชย RPM หรือ 2) **Hardware solution** โดยการใช้ Voltage Limiter หรือปรับ Trimpot บน motor driver เพื่อปรับแรงดันไฟฟ้าให้เท่ากัน
ระบบควบคุมสำรอง (Offline Control System)
นอกเหนือจากระบบ IoT แล้ว แผนภาพวงจรยังรวมกล่องสีเทาที่มี push button เชื่อมต่อกับ Analog port ของ Arduino Nano 33 IoT ส่วนนี้ออกแบบมาเป็นระบบควบคุม Offline ผ่านการเชื่อมต่อแบบมีสาย (tethered connection) สำหรับผู้ที่ต้องการศึกษาตรรกะพื้นฐานหรือใช้ในพื้นที่ที่ไม่มีสัญญาณ WiFi ผมได้จัดเตรียม Source Code แยกต่างหากสำหรับโหมด Offline นี้

เจาะลึกตรรกะของระบบขับเคลื่อน (Propulsion System)
หัวใจหลักของโปรเจกต์นี้อยู่ที่ฟังก์ชัน `engine()` ซึ่งใช้ **Differential Steering** (คล้ายกับรถถัง) เพื่อควบคุมมอเตอร์สองตัว ทำให้เรือสามารถเปลี่ยนทิศทางได้อย่างรวดเร็ว:
- เดินหน้า: ใบพัดทั้งสองต้องหมุนไปในทิศทางที่สร้างแรงขับดันไปด้านหลังพร้อมกัน
- หมุนรอบแกน: มอเตอร์หนึ่งตัวหมุนตามเข็มนาฬิกา (CW) และอีกตัวหมุนทวนเข็มนาฬิกา (CCW)
- คำแนะนำทางเทคนิค: เพลามอเตอร์ควรได้รับการต่อขยายเพื่อให้แน่ใจว่าใบพัดจมอยู่ในน้ำ 100% ซึ่งจะช่วยเพิ่มแรงขับเคลื่อน (propulsion) และลดการเกิด cavitation ทำให้เรือเคลื่อนที่ได้อย่างเต็มประสิทธิภาพ

การวิเคราะห์ตรรกะ Software และ Hardware
จากการวิเคราะห์ Code ที่ใช้ เราได้แบ่งฟังก์ชันการทำงานออกเป็นโมดูลหลักดังต่อไปนี้:
- ระบบไซเรน: ใช้ฟังก์ชัน `siren()` ซึ่งคำนวณค่าโดยใช้ Sine Wave (ฟังก์ชัน
sin()) เพื่อสร้างความถี่เสียงที่ราบรื่นและสม่ำเสมอผ่าน Buzzer บน pin 11 ให้ความรู้สึกเหมือนไซเรนเรือกู้ภัยจริง - ตัวบ่งชี้ภาพ: ฟังก์ชัน `flashes()` ควบคุม LED สีแดงและสีน้ำเงินให้สลับกันทุก 1,000 มิลลิวินาที โดยใช้เทคนิค Non-blocking ด้วย `millis()` เพื่อหลีกเลี่ยงการรบกวนตรรกะการขับเคลื่อน
- การควบคุม Servo: ไลบรารี `Servo.h` ใช้สำหรับควบคุมอุปกรณ์เสริม (เช่น เลเซอร์หรือแท่นยึดกล้อง) บน pin 9 เพิ่มความสามารถรอบด้านให้กับเรือ
ในขั้นตอนการประกอบเบื้องต้น ผมเลือกใช้ **Protoboard** เพื่อให้ง่ายต่อการปรับตำแหน่งของส่วนประกอบต่างๆ นั่นเป็นเพราะ **Center of Gravity (CG)** มีความสำคัญอย่างยิ่งในการสร้างเรือ หากแบตเตอรี่หรือตัวควบคุมเอียงไปด้านใดด้านหนึ่งเล็กน้อย เรือจะเสียสมดุลและอาจจมหรือเบนออกจากทิศทาง

หากคุณมีคำถามเกี่ยวกับโค้ดหรือเทคนิคการกันน้ำ (waterproofing) สามารถสอบถามได้ในความคิดเห็นด้านล่าง หรือติดตามผลงานเพิ่มเติมของผมได้ทาง Instagram: @profsandromesquita