ระบบตรวจคุณภาพน้ำด้วย Arduino + GPS/GPRS ส่งข้อมูลขึ้น Cloud
รู้ว่าคุณภาพน้ำเริ่มผิดปกติอย่างเดียวอาจยังไม่พอ ถ้ายังตอบไม่ได้ว่า “วัดจากตรงไหน?” โปรเจกต์ Water Quality Monitoring System นี้ จึงรวม Sensor วัดคุณภาพน้ำเข้ากับ GPS และ GPRS เพื่อส่งทั้งค่าที่วัดได้และตำแหน่งขึ้นฐานข้อมูล ก่อนนำไปแสดงบนแผนที่ผ่านเว็บไซต์
โปรเจกต์ถูกสร้างขึ้นในช่วงปี 2017 จึงมี Hardware และ Cloud Stack หลายส่วน ที่ไม่ควรนำมาทำตามแบบ Copy ตรง ๆ ในปัจจุบัน แต่ Architecture ของมันยังเป็นตัวอย่างที่ดีมาก สำหรับการเรียนรู้ IoT Monitoring แบบครบเส้นทาง: Sensor → MCU → GPS → Cellular → Database → Web Dashboard
- Prototype ที่ผู้สร้างอธิบายจริงใช้ Arduino/Genuino 101 แม้ Hackster Component Card จะแสดง Arduino UNO
- มี Sensor สำหรับ Temperature, pH, Dissolved Oxygen และ Turbidity
- Temperature, pH และ Dissolved Oxygen เป็น Current-output Sensors ตาม Source
- Turbidity Sensor ให้ Voltage Output ตามปริมาณ Suspended Solid
- Dissolved Oxygen Sensor ของ Prototype เสีย จึงไม่ควรถือว่าระบบทดสอบครบทั้ง 4 Parameter
- A7 Module รวม GPS และ GPRS เพื่อส่ง Measurement พร้อม Location
- A7 ใช้ 115200 bps เป็น Default UART และเป็นหนึ่งใน Pain Point ของผู้สร้าง
- Power Architecture แบ่ง 5V ให้ MCU/A7 และ 11V ให้ Water Sensors
- Cloud Stack ต้นฉบับใช้ Microsoft Azure + ClearDB MySQL
- Project นี้ไม่ใช่ระบบรับรองว่าน้ำดื่มได้หรือไม่
Water Quality Monitoring System นี้คืออะไร?
แนวคิดเริ่มจากปัญหาว่า หากระบบน้ำเกิดการปนเปื้อน การรู้เพียงว่าค่าคุณภาพน้ำผิดปกติ อาจยังไม่ช่วยให้ระบุต้นทางได้เร็วพอ
Prototype นี้จึงรวบรวม Measurement จาก Water Quality Sensors แล้วเพิ่ม GPS Coordinate ก่อนส่งข้อมูลผ่าน GPRS ไปยัง Database
ฝั่ง Web Application นำข้อมูลที่บันทึกไว้มาแสดงเป็น Marker บน Google Map เพื่อให้ผู้ใช้เห็นทั้ง ค่าที่วัดได้ และ ตำแหน่งที่เกิด Measurement
ทำไมต้องเก็บ GPS พร้อมข้อมูลคุณภาพน้ำ?
Source เล่าถึงเหตุการณ์ที่โรงบำบัดน้ำต้องหยุดทำงาน หลังมีน้ำปนเปื้อนไหลเข้าสู่ระบบ แต่การระบุตำแหน่งต้นทางของการปนเปื้อนไม่ใช่เรื่องง่าย
Project จึงไม่ได้ออกแบบ Sensor Node ให้ส่ง Measurement เพียงอย่างเดียว แต่ดึง GPS Coordinate แล้วส่งข้อมูลทั้งชุดไปยัง Database
Temperature / pH / DO / Turbidity
ระบุตำแหน่งของ Measurement
เก็บข้อมูลสำหรับนำไปแสดงบน Web Dashboard
Arduino UNO หรือ Genuino 101 กันแน่?
หน้า Hackster มีข้อมูลสองส่วนที่ไม่ตรงกัน
| ตำแหน่งใน Source | Hardware ที่ระบุ |
|---|---|
| Hackster “Things used” | Arduino UNO |
| System Overview | Arduino Genuino 101 |
| Prototype / Board Description | Arduino Genuino 101 |
หากนำ Concept นี้มาสร้างใหม่ ไม่ควรถือว่าต้องใช้ Genuino 101 เท่านั้น เพราะ Source ไม่ได้ให้ Migration Guide สำหรับ Development Board รุ่นปัจจุบัน
ระบบวัด Parameter อะไรบ้าง?
Prototype ตั้งใจใช้ Sensor ทั้งหมด 4 Parameter แต่แต่ละตัวไม่ได้ให้ Output แบบเดียวกัน
| Parameter | Output ตาม Source | สถานะใน Project |
|---|---|---|
| Temperature | Current Output | ใช้ใน Prototype |
| pH | Current Output | ใช้ใน Prototype |
| Dissolved Oxygen | Current Output | Sensor faulty |
| Turbidity | Voltage Output | ใช้ใน Prototype |
Dissolved Oxygen ยังเป็นข้อจำกัดของ Prototype
ผู้สร้างระบุว่า Dissolved Oxygen Sensor ที่ได้รับมาเสีย ดังนั้นไม่ควรตีความว่า Prototype มีผลทดสอบที่ยืนยันการวัด DO สำเร็จแล้ว
Source ไม่ได้ให้ Model, Measurement Range, Accuracy หรือ Calibration Formula ของ Water Quality Sensors เหล่านี้
ทำไม Current-output Sensor ต้องมี Interface Circuit?
Arduino ไม่ได้รับค่า Sensor แบบ Current Output แล้วตีความเป็น Measurement ได้โดยตรง ผู้สร้างจึงใช้ Resistor เพื่อเปลี่ยน Current Output ให้เป็น Voltage ที่สามารถวัดได้
Temperature / pH / DO
แปลงกระแสให้เป็นแรงดันที่วัดได้
อ่าน Voltage สำหรับนำไปประมวลผล
ระบบทั้งหมดทำงานอย่างไร?
เก็บค่าจากน้ำ
ปรับ Signal ให้ Controller อ่านได้
รวบรวม Measurement Data
ดึง Coordinate
ส่ง Data Bundle ผ่าน Cellular Network
รับ Measurement + Location
แสดงข้อมูลบน Google Map
ทำไมเลือก A7 GPS/GPRS Module?
ผู้สร้างเลือก A7 เพราะต้องการ Module ที่รวม GPS และ GPRS ไว้ในชิ้นเดียว
GPS ใช้ระบุตำแหน่ง ขณะที่ GPRS ใช้ส่ง Measurement และ Coordinate ไปยัง Server
อย่างไรก็ตามผู้สร้างพบข้อจำกัดของ A7 หลายอย่าง ตั้งแต่ GPS Antenna ไปจนถึง UART Baud Rate ซึ่งกลายเป็นส่วนหนึ่งของ Creator Journey ของ Project
UART 115200 ทำผู้สร้างติดอยู่ตรงไหน?
A7 Module ที่ใช้ใน Project มี Default UART Communication ที่ 115200 bps
ปัญหาที่ผู้สร้างเล่าคือ แม้จะสั่งเปลี่ยน Baud Rate ด้วย Software Module จะกลับมาใช้ Default หลัง Power Cycle
ขณะเดียวกันผู้สร้างพบว่า SoftwareSerial ที่ 115200 bps ใน Setup ของตัวเองไม่เสถียร จึงลงเอยด้วยการทำ Function สำหรับเปลี่ยน Baud หลัง Module เริ่มทำงาน
PWR_KEY และ RESET ทำหน้าที่อะไร?
A7 Module ต้องมี Control Logic สำหรับ Power-up และ Reset ซึ่งผู้สร้างออกแบบ Circuit เพิ่มใน Prototype Board
| Signal | พฤติกรรมที่ Source ระบุ |
|---|---|
| PWR_KEY | Apply Voltage อย่างน้อยประมาณ 2 วินาทีเพื่อ Boot Module |
| RESET | Pull ลง GND เพื่อ Reset |
| RESET ในสภาวะปกติ | Source ระบุให้ Pull-up ไป 5V |
ผู้สร้างเลือก Reset Module ก่อน แล้วจึงทำ Power-up Sequence เพื่อให้แน่ใจว่า A7 เริ่มทำงานใน State ที่คาดหวัง
ทำไมระบบต้องมีทั้ง 5V และ 11V?
Current-output Water Sensors ที่ผู้สร้างใช้ต้องการ Supply อย่างน้อยประมาณ 10V ซึ่งสูงกว่า 5V ที่ใช้กับส่วน Controller
ผู้สร้างจึงใช้ Li-ion Battery สองก้อนต่ออนุกรม ให้แรงดันรวมประมาณ 7.4–8.4V แล้วแยก Power ออกเป็นสองทาง
↓
Buck Converter
↓
5V
↓
Arduino + A7 Module
↓
Boost Converter
↓
11V
↓
Water Quality Sensors
Battery แบบนี้ใช้ได้นานแค่ไหน?
ตอบจาก Source ได้เพียงว่า: ผู้สร้างไม่ได้ออกแบบ Prototype นี้เพื่อ Runtime ที่ยาวเป็นหลัก
ผู้สร้างเองระบุว่า System จะไม่ทำงานได้นานมากด้วย Setup นี้ แต่ Battery Runtime ไม่ใช่ Main Concern ของ Prototype
Source ไม่ได้ให้:
- Battery Capacity
- Average Load Current
- A7 Peak Current
- Sensor Current Consumption
- Buck Converter Efficiency
- Boost Converter Efficiency
- Measured Runtime
Prototype Board และ Enclosure
ระบบถูกสร้างบน Prototype Board แล้วติดตั้งร่วมกับ Genuino 101 ลงใน Enclosure ที่ผู้สร้างได้รับมา
สำหรับ Sensor Connection ผู้สร้างพบ Connector ที่เข้าคู่กับของเดิม โดยใช้ Connector Code: GX16
จาก GPRS ไปถึง Azure Database
เมื่อ Controller รวบรวม Measurement และ GPS Coordinate แล้ว A7 ใช้ GPRS Data Link ส่งข้อมูลไปยังระบบ Server
Project ต้นฉบับใช้:
- Microsoft Azure สำหรับ Web Application
- ClearDB สำหรับ MySQL Database
- PHP สำหรับ Server-side Logic
- SQL Query สำหรับเข้าถึง Database
- JavaScript, CSS และ HTML สำหรับ Web Interface
Source ระบุว่า log.php เป็น Endpoint ที่รับข้อมูลจาก Arduino แล้วเขียนข้อมูลลง Database
Measurement + GPS
รับ Data จาก Device
เก็บ Measurement Records
Query และเตรียมข้อมูล
แสดง Measurement ตาม Location
Web Dashboard แสดงอะไร?
Web Interface ถูกสร้างขึ้นเพื่อให้ผู้ใช้ ดู Measurement ผ่าน Browser โดยผูกข้อมูลกับ Location
ผู้สร้างใช้ Google Map และวาง Marker ในตำแหน่ง ที่มี Measurement Record อยู่ใน Database
นี่ทำให้ Dashboard ไม่ได้เป็นเพียงกราฟค่าจาก Sensor แต่เป็น Geographic Monitoring Interface
Original Project ยังระบุว่า Website Response ค่อนข้างช้า และผู้สร้างมองว่า Server/Web Development เป็นหนึ่งในส่วนที่ยังปรับปรุงได้
Project ปี 2017 มีอะไรที่ต้องตรวจใหม่ก่อนสร้างวันนี้?
Architecture ของ Project ยังมีประโยชน์มาก แต่ Hardware และ Cloud Stack ถูกเลือกตาม Ecosystem ในช่วงที่สร้าง Prototype
| ส่วนของระบบ | Project ต้นฉบับ | สิ่งที่ต้องตรวจใหม่หากสร้างปัจจุบัน |
|---|---|---|
| Controller | Genuino 101 | Source ไม่ได้ให้ Migration Path ไปยัง Board รุ่นใหม่ |
| Cellular | A7 GPRS/GPS | ต้องตรวจ Network / Module Compatibility ตามพื้นที่และผู้ให้บริการที่ใช้งานจริง |
| Database | ClearDB MySQL บน Azure Ecosystem ในยุคนั้น | ClearDB Stack เดิมเป็น Historical Service และควรเลือก Database Service ที่ยังรองรับในปัจจุบัน |
| Website | PHP + SQL + Google Map | Concept ยังใช้ได้ แต่ Hosting และ API Environment ต้องตรวจใหม่ |
ระบบนี้บอกได้ไหมว่าน้ำ “ดื่มได้”?
จาก Source นี้ ยังสรุปแบบนั้นไม่ได้
Prototype เน้น Measurement บาง Parameter:
- Temperature
- pH
- Dissolved Oxygen
- Turbidity
แต่ Source ไม่ได้ให้:
- มาตรฐาน Drinking Water
- Pass / Fail Threshold
- Regulatory Compliance
- Bacterial Testing
- Heavy-metal Testing
- สารเคมีปนเปื้อนชนิดอื่น
- Certification
Maker ได้อะไรจาก Project นี้?
1. Sensor ต่างชนิดอาจต้องการ Signal Interface ต่างกัน
Current-output Sensor กับ Voltage-output Sensor ไม่ควรถูกต่อเข้าระบบด้วยสมมติฐานเดียวกัน
2. IoT ที่มี GPS เพิ่ม Context ให้ Sensor Data
Measurement มีประโยชน์ขึ้นมาก เมื่อบอกได้ว่าถูกเก็บจากตำแหน่งใด
3. Cellular Module มี State และ Timing ของตัวเอง
A7 แสดงให้เห็นว่า Power-up, Reset, UART Baud และ Communication Reliability เป็นส่วนของ System Design ไม่ใช่เพียงเสียบ Module แล้วส่งข้อมูล
4. Power Rail ต้องเริ่มจากความต้องการของ Load
Controller ใช้ 5V แต่ Sensor บางตัวต้องการมากกว่า 10V จึงเกิด Architecture แบบ Buck + Boost จาก Battery Pack เดียว
5. Prototype ไม่จำเป็นต้อง Optimize ทุกอย่างพร้อมกัน
ผู้สร้างยอมรับว่า Battery Runtime ยังไม่ดี เพราะ Main Goal ของ Prototype คือพิสูจน์ Flow การวัดและส่งข้อมูลก่อน
6. IoT Project ไม่ได้จบที่ Hardware
Project นี้บังคับให้ผู้สร้างเรียนรู้ PHP, SQL, JavaScript, CSS และ HTML เพื่อสร้างระบบที่นำ Measurement ไปให้ผู้ใช้ดูได้จริง
โปรเจกต์นี้มีหลายขั้น แนะนำอ่านต้นฉบับควบคู่กัน
โดยเฉพาะ Sensor Interface, A7 Control Circuit และ Power Architecture ควรเปิด Schematic ต้นฉบับประกอบ เพราะบทความนี้ไม่สร้าง Wiring หรือ Component Value ที่ Source ไม่ได้ระบุเพิ่มเอง
FAQ: คำถามที่พบบ่อย
1. Water Quality Monitoring System นี้ใช้ Arduino รุ่นอะไร?
Main Story และคำอธิบาย Prototype ระบุ Genuino 101 แต่ Hackster Component Card แสดง Arduino UNO บทความนี้จึงยึด Genuino 101 ตามคำอธิบายระบบจริง
2. ระบบวัดอะไรได้บ้าง?
Prototype ตั้งใจวัด Temperature, pH, Dissolved Oxygen และ Turbidity แต่ Dissolved Oxygen Sensor ที่ผู้สร้างมีอยู่เสีย
3. Sensor ทั้ง 4 ตัวเป็น Current-output หรือไม่?
ไม่ รายละเอียด Sensor ระบุว่า Temperature, pH และ Dissolved Oxygen เป็น Current-output ส่วน Turbidity ให้ Voltage Output
4. ทำไม Current-output Sensor ต้องมี Resistor?
Source ใช้ Resistor เพื่อเปลี่ยน Current Output เป็น Voltage ที่ Controller สามารถวัดได้
5. ใช้ GPS Module อะไร?
Project ใช้ A7 Module ซึ่งรวม GPS และ GPRS ไว้ใน Module เดียว
6. GPRS ใช้ทำอะไร?
ใช้ส่ง Measurement Data และข้อมูลตำแหน่งไปยังระบบ Server / Database
7. A7 ใช้ UART Baud Rate เท่าไร?
Source ระบุ Default UART ที่ 115200 bps
8. ทำไม Baud Rate ถึงเป็นปัญหา?
ผู้สร้างพบว่า SoftwareSerial ที่ 115200 bps ไม่เสถียรใน Setup ของตัวเอง และ A7 กลับไปใช้ Default Baud หลัง Power Cycle
9. PWR_KEY ของ A7 ทำงานอย่างไร?
Source ระบุให้ Apply Voltage ไปที่ PWR_KEY อย่างน้อยประมาณ 2 วินาที เพื่อ Boot Module
10. ทำไม Sensor ใช้ 11V?
Current-output Water Sensors ที่ผู้สร้างใช้ต้องการ Supply อย่างน้อยประมาณ 10V จึง Boost Battery Rail ขึ้นเป็น 11V
11. Arduino และ A7 ใช้ไฟเท่าไร?
Power Architecture ของ Project ใช้ 5V Rail สำหรับ Arduino และ A7
12. Battery ใช้ได้นานกี่ชั่วโมง?
Source ไม่ได้ให้ Battery Capacity, Average Current หรือ Converter Efficiency จึงไม่สามารถคำนวณ Runtime ได้
13. ข้อมูลถูกเก็บไว้ที่ไหน?
Project ต้นฉบับใช้ MySQL Database ผ่าน ClearDB ใน Cloud Stack ของ Microsoft Azure ช่วงที่สร้างระบบ
14. ClearDB ยังควรใช้ตาม Project เดิมหรือไม่?
Stack ClearDB ที่ Project ใช้เป็น Historical Architecture จากปี 2017 หากสร้างระบบใหม่ควรตรวจบริการ Database ที่รองรับอยู่ในปัจจุบันแทน
15. Dashboard แสดงข้อมูลอย่างไร?
Web Application ใช้ Google Map แสดง Marker ในตำแหน่ง ที่มี Measurement Data
16. ระบบนี้บอกได้ไหมว่าน้ำปลอดภัยสำหรับดื่ม?
ไม่สามารถสรุปจาก Source นี้ได้ Project วัดเพียง Parameter บางส่วน และไม่ได้ให้ Drinking-water Standard หรือ Certification Logic
17. มี Source Code หรือไม่?
หน้า Project ระบุว่ามี Arduino Code, Website Code และ A7 Library แต่ Exact Code Files ยังไม่ได้ถูก Verify ใน Source ที่ใช้สำหรับบทความนี้ จึงไม่ได้สร้าง Code Snippet เพิ่มเอง
18. สามารถทำ Project นี้ตามแบบเดิมในปัจจุบันได้เลยไหม?
ไม่ควรถือว่า Copy ได้แบบ 1:1 เพราะ Hardware, Cellular Network, Cloud Service และ Software Environment มาจากระบบช่วงปี 2017 และต้องตรวจ Compatibility ใหม่ก่อนสร้าง
References / แหล่งข้อมูลต้นฉบับ
IoT Monitoring ไม่ได้มีแค่ Sensor กับ Arduino
Project นี้แสดงให้เห็นครบว่า ระบบ Monitoring หนึ่งชุดต้องคิดตั้งแต่ Sensor Interface, Power Rail, GPS, Cellular Communication, Database ไปจนถึง Web Interface ที่ทำให้ข้อมูลถูกนำไปใช้ได้จริง
หากกำลังทำ Arduino, IoT Monitoring, Sensor หรือ Remote Data Logging Project สามารถสอบถามทีม Globalbyte เรื่อง Development Board, Sensor, Communication Module, DC-DC Module และ Maker Accessories ที่เหมาะกับ Project ได้