MarineSentinel ทุ่น AI ใช้ Arduino UNO Q เฝ้าพลาสติกและคุณภาพน้ำ

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

MarineSentinel จึงตั้งโจทย์อีกแบบ: ถ้าเราเอา Arduino UNO Q, กล้อง, Turbidity Sensor, Water Temperature, IMU และ GPS มารวมเป็นทุ่นขนาดเล็กที่สร้างซ้ำได้ใน Workshop เราจะเก็บข้อมูลน้ำและตรวจวัตถุลอยน้ำด้วย Edge AI โดยไม่ต้องส่งภาพขึ้น Cloud ได้ไหม?

คำตอบของผู้สร้างคือ Prototype ที่ให้ MCU อ่านโลกจริงแบบ Real-time ขณะที่ฝั่ง Linux ของ UNO Q รัน Object Detection, Web Dashboard และ Time-series Database อยู่บนบอร์ดเดียวกัน

MarineSentinel ทุ่นตรวจวัตถุลอยน้ำและคุณภาพน้ำด้วย Arduino UNO Q
MarineSentinel เป็น Prototype ทุ่น Monitoring ที่รวม Edge AI, Water Sensors, GPS และ IMU บนสถาปัตยกรรม Arduino UNO Q
Key Takeaways
  • Arduino UNO Q แบ่งงานระหว่าง STM32U585 กับ Linux MPU บนบอร์ดเดียว
  • Current GitHub ใช้ built-in YOLO-X Object Detection เป็นค่าเริ่มต้น
  • Custom Edge Impulse Model สามารถนำมาใช้แทนได้ผ่าน App Lab
  • Turbidity + Temperature ถูกอ่านทุก 2 วินาที, IMU ส่ง 10 Hz และ GPS 1 Hz ตาม Current Sketch
  • Dashboard และ InfluxDB ทำงาน Local โดยไม่ต้องพึ่ง Cloud สำหรับ Runtime หลัก
  • MarineSentinel ตรวจและรายงาน ไม่ได้เก็บขยะขึ้นจากน้ำ
  • Enclosure มีไฟล์ STL / STEP และถูกสร้างด้วย 3D Printing
  • Current Prototype ผ่าน Bench Test และ Water Test ระยะสั้น แต่การ Deploy หลายสัปดาห์ยังเป็น Future Work
  • คำว่า “ต่ำกว่า $300” ใน Main Source หมายถึง BOM เพิ่มเติมที่ผู้สร้างระบุว่าไม่รวม UNO Q

ปัญหา: น้ำที่มีพลาสติกมาก กลับมีข้อมูลน้อยที่สุด

จุดเริ่มต้นของ MarineSentinel มาจากการเห็นขยะพลาสติกที่ Limbe Down Beach ใน Cameroon ทั้งขยะที่ถูกทิ้งลงน้ำโดยตรง และขยะที่ไหลออกจาก Drain / Inlet มาสู่ทะเล

Pain Point ของผู้สร้างไม่ใช่แค่ “มีขยะ” แต่คือไม่มีการวัดแบบต่อเนื่อง: ถ้ามีคนเข้า Site ถ่ายภาพหรือเก็บตัวอย่างเพียงครั้งคราว Pollution Event ที่เกิดหนึ่งวัน กับ Event ที่ต่อเนื่องหนึ่งเดือน อาจไม่มีข้อมูลมากพอให้แยกออกจากกัน

เรื่องราคาเครื่อง Monitoring: Main Source ระบุว่าผู้สร้างประเมิน Commercial Multi-parameter Water Quality Sonde พร้อม Monitoring Buoy ไว้ที่ประมาณ US$25,000–40,000 ก่อน Freight ตัวเลขนี้ควรอ่านเป็น Context ที่ผู้สร้างใช้ตั้งโจทย์ ไม่ใช่ราคากลางของระบบทุกยี่ห้อหรือทุก Configuration

MarineSentinel คืออะไร — และไม่ได้ทำอะไร?

MarineSentinel เป็นทุ่น Monitoring ที่ถูกออกแบบให้ลอยอยู่บนผิวน้ำ พร้อมอ่าน Sensor และใช้ Camera + Edge AI ตรวจวัตถุที่ลอยผ่าน

WaterSensors + USB CameraUNO QAI + Dashboard

ระบบปัจจุบันติดตาม:

  • Turbidity
  • Water Temperature
  • Roll / Pitch / Yaw จาก IMU
  • GPS
  • Object Detection จาก Camera
  • Alert State

แต่สิ่งที่ MarineSentinel ไม่ได้ทำ คือ Scoop หรือเก็บขยะออกจากน้ำ

แนวคิดของผู้สร้างคือ “sensor layer for somebody else's cleanup”: บอกทีมภาคสนามว่าเกิดอะไรขึ้น ที่ไหน และเมื่อไร ส่วนการเก็บขยะเป็นงานของ Cleanup Crew

Architecture: UNO Q หนึ่งบอร์ด แต่มีสองสมอง

แผนผัง Architecture ของ MarineSentinel บน Arduino UNO Q
Architecture ของ MarineSentinel แบ่ง Real-time Sensor Work กับ Linux Application แล้วเชื่อมกันผ่าน Router Bridge

จุดเด่นของ UNO Q ใน Project นี้ คือมีทั้ง MCU และ Linux MPU อยู่ในระบบเดียว

ฝั่ง หน้าที่ใน MarineSentinel
STM32U585 Turbidity, DS18B20, MPU6050, GPS และ RGB Alert LED
Linux / MPU Python, Object Detection, Dashboard, Alert Logic และ InfluxDB
Router Bridge ส่ง sensor_data, imu_data, gps_data และ set_alert ระหว่างสองฝั่ง

Current Code แบ่ง Cadence ชัดเจน:

Turbidity + Temp = 2 s
IMU = 100 ms / 10 Hz
GPS = 1000 ms / 1 Hz

วิธีนี้ช่วยให้ IMU Update ได้เร็ว โดยไม่ต้องบังคับ Water Sensors ให้ทำงานด้วย Sampling Rate เดียวกัน

Hardware Stack ของ MarineSentinel

ภาพออกแบบตัวทุ่น MarineSentinel และส่วนประกอบภายใน
MarineSentinel ถูกออกแบบให้จัดวาง Computing, Camera, Sensor และ Power System แยกเป็นหลาย Section ภายในตัวทุ่น
Component หน้าที่
Arduino UNO Q Main Compute — MCU + Linux MPU
USB Camera Live Feed + Object Detection
Analog Turbidity Sensor อ่านความขุ่นของน้ำ
DS18B20 Water Temperature
MPU6050 Accelerometer + Gyroscope สำหรับ Orientation
GPS ตำแหน่ง, Speed, Course และ Satellite Count
RGB LED Local OK / Alert Indicator
Solar Panel ส่วนหนึ่งของ Power / Charging Concept
ยังไม่มี pH / TDS / Dissolved Oxygen ใน Current Build: Main Source วาง Sensor เหล่านี้ไว้ใน Future Work จึงไม่ควรนำมารวมเป็นความสามารถปัจจุบันของ MarineSentinel

Wiring ที่ต้องระวัง: D4 / D2 และ QWIIC คนละ Bus

แผนผังการเชื่อมต่อ Sensor ของ MarineSentinel
Sensor Connection Layout ของ MarineSentinel ควรใช้อ่านควบคู่กับ Current Firmware เพราะเอกสารบางจุดมี Pin Revision ไม่ตรงกัน
อุปกรณ์ Current Sketch หมายเหตุ
Turbidity A0 Analog Input
DS18B20 D4 Current sketch ใช้ D4 แต่ firmware/README ยังมี Table ที่เขียน D2
MPU6050 QWIIC / Wire1 Wire1 = I2C4 ตาม Current Firmware
GPS D20 RX / D21 TX Serial3 ตาม Current Sketch
Alert LED3_R / LED3_G เขียว = Normal, แดง = Alert
DS18B20 Pin Conflict: Current sketch.ino ใช้ D4 แต่ Technical README อีก Section ยังระบุ D2 หาก Build จาก Repo ควรยึด Firmware Revision ที่กำลัง Flash จริง ไม่ควรต่อจาก Table เก่าเพียงอย่างเดียว

ทำไม MPU6050 ต่อ QWIIC แล้วใช้ Wire ไม่ได้?

ผู้สร้างเจอปัญหาว่า MPU6050 ต่อ QWIIC แล้วเปิดไฟปกติ แต่ I2C Scan บน Default Wire กลับไม่เจอ Device

Current Firmware อธิบาย Mapping:

Wire → I2C2
Wire1 → I2C4 / QWIIC
Wire2 → I2C3

Current Code จึงใช้ MPU6050 imu(Wire1) และ Wire1.begin()

Arduino UNO Q pinout ที่ใช้ตรวจสอบ I2C และ UART สำหรับ MarineSentinel
Pinout ของ UNO Q มีความสำคัญกับ Project นี้ เพราะ QWIIC และ Header ใช้ I2C Bus คนละตัว

Turbidity Sensor วัดอะไร และทำไมค่า NTU ต้องระวัง?

MarineSentinel อ่าน Analog Turbidity Sensor ผ่าน A0 แล้ว Current sensors.py แปลง ADC Reading เป็น NTU ด้วยสมการใน Project

Code ยังแบ่ง Label เป็น:

ค่าใน Project Label
< 100 NTU Clear
100–500 NTU Moderate
> 500 NTU Turbid / Alert
Threshold เหล่านี้เป็น Project Logic: Source ไม่ได้ระบุว่าเป็น Drinking Water Standard, Marine Standard หรือเกณฑ์ของหน่วยงานกำกับ

NTU ใน Dashboard ยังไม่เท่ากับ Calibration Lab

Current Code มี Conversion Function แต่ Source ไม่ได้ให้ผล Calibration ของ MarineSentinel Build เทียบกับ Reference Turbidimeter, Standard Solution, Accuracy หรือ Measurement Uncertainty

ดังนั้นคำที่ปลอดภัยคือ: ระบบ แปลง Analog Reading เป็นค่า NTU ตาม Curve ใน Code ไม่ใช่การรับรองว่า MarineSentinel เป็นเครื่องวัด NTU ที่ผ่าน Calibration แล้ว

Voltage Caveat สำคัญ:
DFRobot Documentation ของ SEN0189 ระบุ Operating Voltage 5 V และ Analog Output สูงได้ประมาณ 4.5 V ขณะที่ UNO Q Analog Input อยู่ใน 3.3 V Domain

ดังนั้นบทความนี้จะไม่แนะนำให้ต่อ Analog Output ของ Module 5 V เข้ากับ A0 ตรง ๆ หากยังไม่ได้ Verify ว่า Hardware Revision มี Voltage Conditioning ที่เหมาะสม

Source ที่ให้มายังไม่ได้ให้วงจร Divider / Buffer ที่ยืนยันได้ จึงไม่ควรสร้างวงจรขึ้นเอง

MPU6050 รู้ได้อย่างไรว่าทุ่นเอียง?

MarineSentinel ใช้ MPU6050 เพื่อวัด Accelerometer + Gyroscope แล้ว Firmware Fuse ข้อมูลออกมาเป็น:

  • Roll
  • Pitch
  • Yaw

Current Sketch Update Filter ต่อเนื่องใน Loop แต่ส่ง Orientation ขึ้นไปยัง Linux ทุก 100 ms หรือประมาณ 10 Hz

Dashboard จึงสามารถแสดง Capsule 3D ที่เอียงตาม Sensor ได้แบบต่อเนื่อง และ Current Alert Logic ใช้:

Project Threshold Label
Roll/Pitch ต่ำกว่า 45° Upright
ตั้งแต่ 45° Listing
ตั้งแต่ 120° Capsized?
ค่า 45° / 120° เป็น Alert Threshold ของ Project: Source ไม่ได้ระบุว่าเป็นมาตรฐานรับรองเสถียรภาพของทุ่น

แล้ว Yaw ล่ะ?

MPU6050 ไม่มี Magnetometer ทำให้ Yaw ไม่มี Absolute Heading Reference เหมือน Compass

Current Software ทำได้เพียง Wrap ค่าให้อยู่ในช่วง -180° ถึง 180° เพื่อให้อ่านง่าย แต่ไม่ได้แก้ Gyro Drift จริง

Roll / Pitch สามารถใช้ Gravity Vector ช่วย Correction ได้ แต่ Yaw ของ MPU6050 จะ Drift ตามเวลา จึงควรอ่านเป็น Relative Heading ตั้งแต่เปิดเครื่อง ไม่ใช่ทิศเหนือจริง

GPS และ Local Alert ทำให้ Detection มี Context มากขึ้น

GPS ใน Current Firmware ส่งข้อมูลขึ้น Linux ประมาณ 1 Hz:

  • Fix State
  • Latitude
  • Longitude
  • Speed
  • Course
  • Satellite Count

นี่สำคัญเพราะ Detection ที่รู้เพียงว่า “เจอขวด” มีประโยชน์น้อยกว่าข้อมูลที่รู้ว่า เจอที่ตำแหน่งไหนและเมื่อไร

นอกจากนี้ Python ยังส่ง Alert State กลับไปยัง STM32 ผ่าน Router Bridge เพื่อเปลี่ยน RGB LED บนบอร์ด:

Green = Normal
Red = Alert

AI ตอนนี้ใช้ YOLO-X หรือ Edge Impulse?

คำตอบคือ: Project รองรับทั้งสองทาง แต่ Current GitHub Default ใช้ YOLO-X

Current app.yaml ระบุ:

firmware/app.yaml
bricks:
- arduino:video_object_detection:
    model: yolox-object-detection
- arduino:web_ui: {}
- arduino:dbstorage_tsstore: {}

นั่นหมายความว่า Runtime Default ใช้ Built-in Object Detection Model ไม่ได้บังคับว่าต้องมี Custom Edge Impulse Model

แล้วมันรู้จัก “ขยะ” ยังไง?

Current sensors.py มีรายการ COCO Labels ที่ Project เลือกตีความว่าอาจเป็น Debris เช่น:

  • bottle
  • cup
  • bowl
  • backpack
  • handbag
  • suitcase
  • umbrella
  • sports ball
  • book
  • vase
  • cell phone
Current YOLO-X ไม่ใช่ Plastic-specific Model: มันเป็น General Object Detection แล้ว Project เลือกบาง Label มาใช้เป็น Debris Event จึงไม่ควรเขียนว่าโมเดลปัจจุบัน “รู้จักพลาสติกทุกประเภท”

Current Python Configuration ใช้ Confidence Threshold: 0.4 และ Debounce: 3 วินาที

ค่านี้เป็น Configuration ปัจจุบันของ Project ไม่ใช่ค่าที่ Source พิสูจน์แล้วว่า Optimal สำหรับแม่น้ำหรือชายฝั่งทุกพื้นที่

อยาก Train AI ให้รู้จักขยะของพื้นที่ตัวเอง ทำต่อยังไง?

ตัวอย่าง Workflow การฝึกโมเดล Edge AI สำหรับ MarineSentinel
Project เตรียม Workflow สำหรับนำ Custom Object Detection Model จาก Edge Impulse มาใช้กับ App Lab

Hackster แนะนำ Edge Impulse สำหรับ Training Model เฉพาะพื้นที่ โดย Workflow คือ:

Collect ImagesLabelEdge ImpulseExport ModelApp LabVideoObjectDetection

Current Technical README อธิบายว่าสามารถ Register Custom Model แล้วนำ Model ID มาแทน yolox-object-detection ใน app.yaml

ภาพประกอบการเตรียมข้อมูลสำหรับโมเดล MarineSentinel
ตัวอย่าง Media จากขั้นตอนเตรียม AI Workflow ของ Project
หน้าจอ Software จากขั้นตอนพัฒนา MarineSentinel
Screenshot จาก Workflow การพัฒนา Software / AI ของ MarineSentinel
Dataset และ Accuracy ของ Custom MarineSentinel Model: Source ปัจจุบันยังไม่ให้ Result ที่เพียงพอสำหรับระบุ Accuracy, Precision, Recall หรือ mAP ของโมเดลเฉพาะพื้นที่แบบ Final จึงไม่ควรสร้างตัวเลข Performance เพิ่มเอง

Dashboard ทำงานแบบ Local และเก็บ History ด้วย InfluxDB

Current App ไม่ได้ใช้ Streamlit เป็น Runtime หลักแล้ว แต่เปลี่ยนไปใช้:

  • arduino:web_ui
  • arduino:video_object_detection
  • arduino:dbstorage_tsstore

เหตุผลที่ผู้สร้างย้ายจาก Streamlit คือเวอร์ชันเดิมจะเริ่ม App Logic เมื่อมี Browser เปิดหน้า Dashboard ซึ่งไม่เหมาะกับทุ่นที่ควรเริ่ม Sensor, AI และ Logging เองตั้งแต่ Boot

Current web_ui จึงเป็น Always-on Process: เปิดระบบขึ้นมาแล้ว Backend ทำงานทันที แม้ยังไม่มีคนเปิด Dashboard

Dashboard ปัจจุบันแสดงได้ทั้ง Water Metrics, GPS, Orientation, Alert, Live Camera, Detection Log และ Sensor History

Browser เปิดผ่าน Local Network ที่ Port 7000:

Local Dashboard
http://<board-ip>:7000
Offline ≠ สร้าง Hotspot เองเสมอ: Main Story ใช้คำว่าดู Dashboard ผ่าน Wi-Fi ของระบบ แต่ Current Setup บน GitHub ให้เชื่อม UNO Q เข้ากับ Local Wi-Fi หรือ Hotspot ก่อน

สิ่งที่ยืนยันได้คือ Dashboard ไม่ต้องพึ่ง Cloud สำหรับการดูข้อมูลบน LAN ไม่ควรฟันธงว่า Firmware ปัจจุบัน สร้าง Access Point ของตัวเองทุกกรณี

InfluxDB เก็บอะไร?

Current data_store.py ใช้ TimeSeriesStore / InfluxDB สำหรับ:

  • Turbidity
  • Temperature
  • Roll
  • Pitch
  • Yaw
Current Implementation กับ Planning Spec ไม่เหมือนกัน: Planning Spec รุ่นก่อนมี Requirement เรื่อง microSD CSV Logging แต่ Current Code ที่ตรวจ ใช้ InfluxDB / TimeSeriesStore เป็น Working Logging Path ดังนั้นบทความนี้ยึด Current Implementation เป็นหลัก
หน้าจอ Dashboard ของ MarineSentinel
Screenshot จาก MarineSentinel Dashboard ที่ใช้ติดตามข้อมูล Sensor และสถานะของระบบ
หน้าจอเพิ่มเติมของ MarineSentinel Dashboard
ภาพเพิ่มเติมจาก Dashboard ของ MarineSentinel
ข้อมูลและกราฟจาก MarineSentinel Dashboard
Dashboard ใช้แสดงข้อมูล Monitoring จาก Sensor และ Software Pipeline

3D Capsule โดยไม่โหลด Three.js จาก Internet

ผู้สร้างต้องการให้ Orientation View ยังแสดงได้แม้ Browser ไม่มี Internet ออกไปหา CDN

Current Dashboard จึงใช้ CSS 3D Transform แทนการบังคับโหลด 3D Library ภายนอก

นี่เป็น Design Choice ที่น่าสนใจ: ถ้าระบบอยู่ริมแม่น้ำ Local Dashboard ควรยังทำงานได้ แม้ Internet ภายนอกจะไม่มี

3D Print ตัวทุ่น: 5 ส่วนหลัก + STEP File สำหรับแก้ CAD

MarineSentinel ถูกออกแบบใน Fusion 360 และ Main Source ระบุว่า Print ชิ้นส่วนด้วย PETG

โครงหลักแบ่งเป็น:

  1. Buoy Cover — ด้านบนสำหรับ Solar / GPS / Power Electronics
  2. Buoy Mid Body — ส่วน Camera
  3. Buoy Bottom — Sensor ใกล้น้ำ
  4. Floating Base — Flotation
  5. Electronics Enclosure — UNO Q, Battery และ Wiring

Source ระบุว่าหลายส่วน Snap-fit เข้าด้วยกัน และใช้เพียง 2 M3 Screws สำหรับยึดบาง Section

ชิ้นส่วน 3D Print ของ MarineSentinel ระหว่างการสร้าง
ตัวถัง MarineSentinel ถูกสร้างเป็นหลายชิ้น เพื่อแยก Camera, Sensor, Power และ Electronics
ชิ้นส่วนตัวทุ่น MarineSentinel จากกระบวนการประกอบ
ภาพชิ้นส่วนจากขั้นตอนประกอบตัวทุ่น
รายละเอียดตัวถัง 3D Print ของ MarineSentinel
รายละเอียดเพิ่มเติมของ Enclosure ที่ใช้กับ Electronics และ Sensor Modules
การประกอบชิ้นส่วน MarineSentinel
ภาพจาก Build Process ของ MarineSentinel
Source ไม่ได้ให้ Printing Profile ครบ: มีการระบุ PETG แต่ไม่มีค่าครบสำหรับ Layer Height, Infill, Wall Count, Nozzle, Print Temperature, Support หรือ Orientation จึงไม่ควรสร้าง Setting เหล่านี้ขึ้นเอง
3D Print ไม่ได้แปลว่า Waterproof อัตโนมัติ: Prototype มีการทดสอบในน้ำ แต่ Source ไม่ได้ให้ IP Rating หรือ Process สำหรับรับรอง Waterproofing ของงาน Print ทุกเครื่อง

Floating Base มี Revision

Main Source ระบุว่า Floating Base เดิมถูกออกแบบเป็นชิ้นส่วน Printed แต่ Prototype รุ่นหลัง เปลี่ยนไปใช้ Polythene Foam สำหรับ Flotation

ดังนั้นแม้ STL ของ Floating Base ยังมีให้ดาวน์โหลด ก็ไม่ควรตีความว่าเป็น Final Flotation Method ที่ผู้สร้างใช้ล่าสุดเสมอ

Power + Solar: Source บอกอะไร และยังไม่บอกอะไร?

Source ยืนยันว่าระบบมี:

  • Solar Panel — BOM ระบุ 2.5 W
  • Build Step ระบุ 5 V Solar Panel
  • Buck Converter
  • Li-ion Battery

แต่ข้อมูล Battery มีรายละเอียดไม่ตรงกัน: BOM มีรายการ 1000 mAh ขณะที่ Build Instruction อีกจุด กล่าวถึง 7.4 V Battery Pack พร้อมตัวเลข 3 A

Source ไม่ได้ Resolve Power Pack ทั้งหมด: ยังไม่มีข้อมูลที่ครบพอสำหรับระบุ Cell Configuration, Capacity, BMS, Charge Controller, Fuse, Maximum Current หรือ Charging Profile แบบยืนยันได้

ดังนั้นเราเขียนได้ว่า:

MarineSentinel มี Solar-assisted Power / Charging Concept

แต่ยังไม่ควรเขียนว่า:

“Solar ทำให้ทุ่นทำงานได้ตลอดไป” หรือ “Battery ใช้ได้ X วัน” เพราะ Source ไม่มี Validated Energy Budget หรือ Long-term Runtime Result

Water Test ไปถึงไหนแล้ว?

MarineSentinel ระหว่างการทดสอบภาคสนามในน้ำ
ภาพจากการทดสอบ MarineSentinel หลังรวม Electronics, Sensor และ Enclosure เข้าด้วยกัน
ภาพเพิ่มเติมจากการทดสอบ MarineSentinel ในน้ำ
การทดสอบภาคสนามเพิ่มเติมของ Prototype
MarineSentinel prototype ระหว่างการทดสอบ
Prototype ในช่วง Water Test ของ Project MarineSentinel

Main Source ระบุ Current Status เป็น:

  • Bench proven
  • Water tested
  • AI Pipeline ทำงานบน Hardware จริง
  • Dashboard ทำงาน End-to-end
  • IMU / Sensor / Capsule ถูก Integrate แล้ว

แต่ Future Work ยังระบุชัดว่า การ Deploy แบบไม่มีคนดูแล เป็นระยะเวลาหลายสัปดาห์ ยังเป็นการทดสอบขั้นถัดไป

ดังนั้นคำว่า “around the clock” เป็น Design Goal: Project ยังไม่ได้แสดงผล Long-duration หลายสัปดาห์แบบ Unattended ที่พิสูจน์ Battery, Solar, Waterproofing, Biofouling และ Sensor Drift ครบแล้ว

Source Code ที่น่าสนใจจาก Current GitHub

Project เปิด Source Files สำหรับทั้ง MCU, Python, Dashboard และ Mechanical Files

ตัวอย่างแรกคือ Sampling Cadence ที่ Firmware ใช้จริง:

firmware/sketch/sketch.ino
const unsigned long SAMPLE_INTERVAL_MS   = 2000;
const unsigned long IMU_SEND_INTERVAL_MS = 100;
const unsigned long GPS_SEND_INTERVAL_MS = 1000;

และ Current DS18B20 Pin:

Current sketch pin assignment
#define TURBIDITY_PIN A0
#define DS18B20_PIN   D4

ส่วน Object Detection Configuration ปัจจุบัน:

firmware/python/main.py
detector = VideoObjectDetection(
    confidence=0.4,
    debounce_sec=3.0,
    camera_preview=True
)
Code ในบทความเป็นบางส่วนจาก Current Repo: หากจะ Build จริงควรเปิด Repository และใช้ Current File ทั้งชุด เพราะ Pin, App Lab API และ Project Structure สามารถเปลี่ยนได้ตาม Revision

ดาวน์โหลด STL / STEP / GitHub

คุณสามารถเปิด Source Project หรือดาวน์โหลดชิ้นส่วน Mechanical จากไฟล์ที่ผู้สร้างเผยแพร่ได้โดยตรง

เปิด GitHub Repository ดาวน์โหลด Bottom Half STL ดาวน์โหลด Buoy Top STL ดาวน์โหลด Buoy Mid Section STL ดาวน์โหลด Floating Base STL ดาวน์โหลด Electronics Case STL

Current GitHub ยังมี MarineSentinel.step สำหรับผู้ที่ต้องการแก้ Geometry ใน CAD ต่อจาก Source Design

มีไฟล์ STL แล้วแต่ไม่มีเครื่องพิมพ์? สามารถสอบถามทีม Globalbyte เรื่องบริการพิมพ์ 3D สำหรับ Prototype ได้ โดยควรตรวจ Design Revision และ Requirement เรื่อง Water Sealing ก่อนผลิตจริง

ข้อจำกัดที่ต้องแก้ก่อน Deploy เป็น Monitoring Node ระยะยาว

  1. AI ปัจจุบันยังเป็น General YOLO-X: ยังไม่ใช่ Plastic-specific Model ที่ผ่าน Validation สำหรับ Location นี้
  2. Turbidity Calibration: Current Code มี NTU Conversion แต่ไม่มีผล Calibration / Accuracy ของ Build จริง
  3. Analog Voltage: ต้อง Verify Signal Conditioning ก่อนใช้ Sensor ที่ Output เกิน 3.3 V กับ UNO Q ADC
  4. Yaw Drift: MPU6050 ไม่มี Magnetometer จึงไม่ให้ Absolute Compass Heading
  5. Power Budget: Source ยังไม่มี Validated Runtime หรือ Solar Energy Balance ระยะยาว
  6. Waterproofing: Prototype ถูก Water-tested แต่ไม่มี IP Rating หรือ Long-term Seal Validation
  7. Biofouling: การ Deploy เป็นสัปดาห์หรือเดือน อาจทำให้ Optical / Water-facing Sensor เปลี่ยนพฤติกรรม และยังเป็น Future Validation
  8. Pin Documentation: Current Sketch ใช้ DS18B20 D4 แต่ Technical README อีก Section ยังระบุ D2
  9. Logging: Current Runtime ใช้ InfluxDB ขณะที่ Planning Spec รุ่นก่อนมี microSD CSV Requirement
  10. Long Deployment: หลายสัปดาห์แบบ Unattended ยังไม่ได้ถูกพิสูจน์ใน Current Public Result
Environmental Monitoring Caveat:
MarineSentinel เป็น Maker / Research Prototype ไม่ใช่ Certified Water Quality Instrument และไม่ควรใช้ค่าเพียงชุดเดียวจาก Prototype เพื่อออก Public Health Warning หรือสรุปว่าน้ำปลอดภัยสำหรับบริโภค โดยไม่มีวิธีตรวจยืนยันที่เหมาะสม

FAQ: MarineSentinel และ Arduino UNO Q

1. MarineSentinel คืออะไร?

เป็น Prototype ทุ่น Monitoring ที่ใช้ Arduino UNO Q รวม Sensor, GPS และ Edge AI เพื่อติดตามสภาพน้ำและวัตถุลอยน้ำ

2. MarineSentinel เก็บขยะขึ้นจากน้ำไหม?

ไม่ Project ทำหน้าที่ตรวจและรายงาน ไม่ได้เป็น Robot เก็บขยะ

3. ใช้บอร์ดอะไร?

Arduino UNO Q โดยแบ่งงานระหว่าง STM32U585 กับ Linux MPU

4. ใช้ AI Model อะไร?

Current GitHub app.yaml ใช้ built-in yolox-object-detection เป็น Default

5. ใช้ Edge Impulse ได้ไหม?

ได้ Technical README อธิบาย Workflow สำหรับนำ Custom Edge Impulse Model เข้า App Lab และเปลี่ยน Model ID ใน app.yaml

6. AI ปัจจุบันรู้จักพลาสติกโดยเฉพาะหรือไม่?

ไม่ Current Default เป็น General Object Detection และ Project เลือก COCO Labels บางกลุ่ม มาใช้เป็น Debris Events

7. Turbidity Sensor ต่อ Pin ไหน?

Current Sketch ใช้ A0 แต่ต้อง Verify Voltage Range ของ Sensor Output ก่อนต่อกับ UNO Q ADC

8. DS18B20 ต่อ D2 หรือ D4?

Current sketch.ino ใช้ D4 ขณะที่ Technical README อีก Table ยังระบุ D2 จึงควรยึด Firmware Revision ที่ใช้จริง

9. MPU6050 ใช้ Wire หรือ Wire1?

Current Code ใช้ Wire1 สำหรับ QWIIC Connector

10. Yaw คือ Compass Heading หรือไม่?

ไม่ MPU6050 ไม่มี Magnetometer Yaw จึงเป็น Gyro-integrated Relative Heading และ Drift ได้ตามเวลา

11. Dashboard ต้องใช้อินเทอร์เน็ตไหม?

Current Architecture สามารถให้ Browser บน Local Network เข้าหน้า Dashboard โดย Runtime หลักไม่ต้องพึ่ง Cloud

12. Dashboard อยู่ที่ Port ไหน?

Current README ใช้ Port 7000: http://<board-ip>:7000

13. เก็บข้อมูลลง microSD หรือ InfluxDB?

Current Implementation ที่ตรวจใช้ InfluxDB ผ่าน TimeSeriesStore ส่วน microSD CSV อยู่ใน Planning Requirement รุ่นก่อน

14. ตัวทุ่น Print ด้วยอะไร?

Main Source ระบุ PETG แต่ไม่ได้ให้ Printing Settings ครบ

15. มี STL ให้ดาวน์โหลดไหม?

มี ทั้ง Main Parts หลายชิ้น และ Current GitHub ยังมี STEP Source

16. MarineSentinel ราคา $300 จริงไหม?

Main Source ระบุ BOM เพิ่มเติม ประมาณ 157,506 XAF และต่ำกว่า US$300 โดยระบุชัดว่าไม่รวม UNO Q เอง จึงไม่ควรเรียกว่า Total Cost ทุกอย่างเท่ากับ $300

17. ทำงาน 24/7 ได้พิสูจน์แล้วหรือยัง?

Project ออกแบบเพื่อ Continuous Monitoring และผ่าน Bench / Water Test แต่การ Deploy หลายสัปดาห์แบบไม่มีคนดูแล ยังเป็น Future Work

18. ใช้ MarineSentinel ตัดสินว่าน้ำดื่มได้หรือไม่?

ไม่ควร Source ไม่ได้ระบุว่า Prototype เป็น Certified Water Quality Instrument หรือเครื่องมือรับรองความปลอดภัยสำหรับน้ำบริโภค

สรุป: จุดแข็งของ MarineSentinel คือการทำ Monitoring ให้สร้างซ้ำได้มากขึ้น

สิ่งที่น่าสนใจของ MarineSentinel ไม่ใช่แค่การเอา YOLO-X ไปตรวจขวดบนผิวน้ำ

แต่คือการนำ:

  • Real-time MCU
  • Linux
  • Edge AI
  • Water Sensors
  • IMU
  • GPS
  • Local Dashboard
  • Time-series Logging
  • 3D Printed Enclosure

มาประกอบเป็น Monitoring Node ที่ผู้สร้างตั้งใจให้ Workshop ท้องถิ่น สามารถซ่อมหรือสร้างซ้ำได้ โดยไม่ต้องเริ่มจาก Commercial Buoy ราคาสูง

ในขณะเดียวกัน Current Source ก็ยังมี Caveat สำคัญ: Turbidity Calibration, Power Architecture, Long-term Waterproofing, AI Validation, Biofouling และ Deployment Duration ยังต้องพัฒนาต่อ

สำหรับ Maker Project นี้จึงน่าสนใจมาก เพราะมันไม่ได้สอนแค่ “ต่อ Sensor” แต่แสดงให้เห็นว่าพอ Hardware ลงไปอยู่ในโลกจริง เรื่อง Revision, Voltage, Sampling Rate, Dashboard Lifecycle และ Sensor Limitation กลายเป็นส่วนหนึ่งของ Engineering ทันที

โปรเจกต์นี้มีหลายระบบ แนะนำอ่านต้นฉบับควบคู่กัน

หากต้องการ Build MarineSentinel จริง ควรใช้ Hackster สำหรับ Story / Build Photos และ Current GitHub สำหรับ Firmware, Pin Assignment, App Lab Structure และ Mechanical Files

อ่าน MarineSentinel Tutorial ฉบับเต็มบน Hackster

ดู Source Code และ Mechanical Files บน GitHub

อ่าน Arduino UNO Q Documentation

อ่าน DFRobot Turbidity Sensor Documentation

References / แหล่งข้อมูลต้นฉบับ

อยากลองทำ Environmental Monitoring หรือ Edge AI Project แบบนี้?

หากกำลังทดลอง Arduino, Development Board, GPS, IMU, Temperature Sensor, Camera หรือ Module สำหรับ Environmental Monitoring สามารถสอบถามทีม Globalbyte เรื่องอุปกรณ์ที่เหมาะกับ Project ได้

และถ้ามี STL / STEP สำหรับ Enclosure หรือ Prototype สามารถสอบถามเรื่องบริการพิมพ์ 3D ได้เช่นกัน โดยเฉพาะ Project ที่ต้องทดลอง Fit, Mounting หรือ Housing หลาย Revision

Disclaimer: บทความนี้เป็นการสรุปและเรียบเรียงจากแหล่งข้อมูลภาษาอังกฤษ อาจมีความคลาดเคลื่อน กรุณาตรวจสอบ Source ต้นฉบับก่อนลงมือทำ

MarineSentinel เป็น Maker / Research Prototype ไม่ใช่ Certified Water Quality Instrument, Public Health Monitoring System หรืออุปกรณ์ที่ใช้รับรองว่าน้ำปลอดภัยสำหรับการบริโภค

Current GitHub ใช้ built-in yolox-object-detection เป็น Default และใช้ COCO Object Labels บางประเภท เป็น Debris Events จึงไม่ควรตีความว่า Current Model เป็น Plastic-specific Classifier ที่ผ่าน Validation สำหรับสภาพน้ำทุกประเภท

Custom Edge Impulse Workflow มีอยู่ใน Project แต่ Source ปัจจุบันไม่ได้ให้ Accuracy, Precision, Recall หรือ mAP ของ Final MarineSentinel Custom Model ที่เพียงพอสำหรับการสรุป Performance

Current sketch ใช้ DS18B20 ที่ D4 ขณะที่ Technical README อีก Section ยังระบุ D2 ควรตรวจ Current Firmware Revision ก่อน Wiring

DFRobot SEN0189 Documentation ระบุ Sensor Module ที่ 5 V และ Analog Output สามารถสูงกว่า 3.3 V Domain ของ UNO Q ADC บทความนี้จึงไม่ได้แนะนำ การต่อ Analog Output เข้ากับ A0 โดยตรง โดยไม่มีการ Verify Signal Conditioning และไม่ได้สร้างวงจร Voltage Divider / Buffer ขึ้นเอง

NTU Conversion และ Alert Thresholds ใน Current Source เป็น Logic ของ Project แต่ Source ไม่ได้ให้ Calibration Report, Measurement Accuracy, Uncertainty หรือการรับรองตามมาตรฐานคุณภาพน้ำ

MPU6050 ไม่มี Magnetometer ดังนั้น Yaw ของ Current System จะ Drift ตามเวลา และไม่ควรถูกใช้เป็น Absolute Compass Heading

Current Implementation ใช้ InfluxDB / TimeSeriesStore สำหรับ Data History แม้ Planning Specification รุ่นก่อน จะมี Requirement เรื่อง microSD CSV Logging

Source มีรายละเอียด Battery ที่ไม่สอดคล้องกันบางส่วน และไม่ได้ให้ BMS, Charge Controller, Fuse, Cell Configuration, Validated Runtime หรือ Solar Energy Budget ที่ครบถ้วน บทความนี้จึงไม่ได้สร้าง Power Wiring เพิ่มเอง

Main Source ระบุ BOM เพิ่มเติม ที่ต่ำกว่า US$300 โดยระบุว่าไม่รวม Arduino UNO Q ดังนั้นไม่ควรตีความว่า Total System Cost ทุกส่วนอยู่ที่ US$300 เสมอ ราคาและ Availability สามารถเปลี่ยนได้ตามพื้นที่และเวลา

Enclosure มี STL / STEP และ Main Source ระบุ PETG แต่ไม่ได้ให้ Printing Settings เช่น Layer Height, Infill, Wall Count, Nozzle, Print Temperature, Support หรือ Orientation ครบ บทความนี้จึงไม่ได้สร้างค่าดังกล่าวขึ้นเอง

การ 3D Print ไม่ได้ทำให้ชิ้นงาน Waterproof อัตโนมัติ และ Source ไม่ได้ระบุ IP Rating ของ MarineSentinel แม้ Prototype จะผ่าน Water Test ระยะสั้นแล้ว

Project ถูกออกแบบเพื่อ Continuous Monitoring แต่ผู้สร้างยังระบุ Long-duration Unattended Deployment หลายสัปดาห์ เป็น Future Work จึงไม่ควรใช้คำว่า “24/7 พิสูจน์แล้ว” สำหรับ Current Prototype

 


Blog posts