การสร้างระบบตรวจวัดสภาพแวดล้อมอัจฉริยะด้วย Arduino MKR WiFi 1010 และ ENV Shield
ในยุคของ Internet of Things (IoT) การรวบรวมข้อมูลจากสภาพแวดล้อมรอบตัวเราเพื่อนำมาวิเคราะห์และแสดงผลแบบเรียลไทม์ถือเป็นทักษะพื้นฐานที่สำคัญ โปรเจกต์นี้จะพาคุณไปเรียนรู้วิธีการอ่านค่าจากเซนเซอร์ประสิทธิภาพสูงบน MKR ENV Shield และนำข้อมูลเหล่านั้นไปแสดงผลอย่างมืออาชีพผ่าน Dashboard บน Arduino Cloud ซึ่งจะช่วยให้คุณสามารถตรวจสอบสภาวะต่างๆ ได้จากทุกที่ทั่วโลก
อุปกรณ์ที่จำเป็นสำหรับโปรเจกต์
หัวใจสำคัญของโปรเจกต์นี้คือการเลือกใช้ฮาร์ดแวร์ในตระกูล MKR ซึ่งถูกออกแบบมาเพื่อการใช้งานในระดับอุตสาหกรรมและงานต้นแบบที่ต้องการความเสถียรสูง:
- Arduino MKR WiFi 1010: บอร์ดไมโครคอนโทรลเลอร์หลักที่ขับเคลื่อนด้วยชิป SAMD21 (32-bit Arm® Cortex®-M0+) และมีโมดูล NINA-W10 จาก u-blox สำหรับการเชื่อมต่อ WiFi และ Bluetooth นอกจากนี้ยังมีชิป ECC508 สำหรับการรักษาความปลอดภัยของข้อมูล (Crypto chip) ซึ่งจำเป็นอย่างยิ่งในการเชื่อมต่อกับระบบคลาวด์
- MKR ENV Shield: โล่เสริม (Shield) ที่รวบรวมเซนเซอร์วัดสภาพแวดล้อมไว้อย่างครบถ้วน ประกอบด้วยเซนเซอร์วัดอุณหภูมิและความชื้น (HTS221), ความกดอากาศ (LPS22HB), ความเข้มแสง (TEMT6000) และค่ารังสี UV (VEML6075) ซึ่งทั้งหมดสื่อสารผ่านโปรโตคอล I2C
- Battery Pack: ชุดแบตเตอรี่สำหรับการใช้งานแบบ Standalone ช่วยให้บอร์ดสามารถทำงานได้โดยไม่ต้องเสียบสาย USB ตลอดเวลา
- บัญชี Arduino IoT Cloud: แพลตฟอร์มสำหรับจัดการข้อมูลและสร้าง Dashboard
การประกอบฮาร์ดแวร์ทำได้ง่ายดายเนื่องจากถูกออกแบบมาให้เป็น Modular เพียงแค่นำ MKR WiFi 1010 และ MKR ENV Shield มาเสียบต่อกัน
ในการติดตั้ง ให้จัดตำแหน่งขาพินของ MKR WiFi 1010 ให้ตรงกับช่องเสียบของ ENV Shield โดยสังเกตจากป้ายกำกับชื่อพินบนบอร์ดเพื่อให้แน่ใจว่าการเชื่อมต่อถูกต้องและไม่เกิดการลัดวงจร
สำหรับการจ่ายไฟ แบตเตอรี่ Li-Po หรือชุดแบตเตอรี่เสริมควรเสียบเข้ากับช่องต่อแบตเตอรี่เฉพาะบนบอร์ด MKR WiFi 1010 ซึ่งมีวงจรชาร์จแบตเตอรี่ในตัวเพิ่มความสะดวกในการใช้งาน
โครงสร้างและการทำงานของซอฟต์แวร์
ซอฟต์แวร์ของโปรเจกต์นี้แบ่งออกเป็นสองส่วนหลัก คือโครงสร้างพื้นฐานที่สร้างโดย Arduino IoT Cloud APIs เพื่อจัดการเรื่องการสื่อสาร และการใช้ไลบรารี Arduino_MKRENV เพื่อดึงค่าดิบจากเซนเซอร์
- Cloud Thing & Properties: เราจะกำหนด "Properties" จำนวน 6 ค่าใน Arduino IoT Cloud เพื่อทำหน้าที่เป็นตัวแปรกลางที่จะซิงค์ข้อมูลระหว่างบอร์ดและหน้าจอ Dashboard โดยอัตโนมัติผ่านโปรโตคอลความปลอดภัยสูง
- The Sketch: โค้ดที่สร้างขึ้นจะรวมเอาการจัดการเครือข่าย WiFi และการเข้าถึงเซนเซอร์ไว้ด้วยกัน โดยมีไฟล์สำคัญคือ
thingProperties.hซึ่งเก็บข้อมูลการตั้งค่า SSID, Password และการแมปตัวแปร Cloud
การวิเคราะห์โค้ด (Code Analysis)
ในส่วนแรกของโปรแกรม เราทำการนำเข้าไลบรารีที่จำเป็น:
thingProperties.h: ทำหน้าที่จัดการการเชื่อมต่อเครือข่ายและการแลกเปลี่ยนข้อมูลกับ Cloud โดยจะใช้ชิปนิรภัยบนบอร์ด MKR ในการทำ AuthenticationArduino_MKRENV.h: ไลบรารีระดับสูงที่ช่วยให้เราไม่ต้องเขียนคำสั่ง I2C เอง แต่สามารถเรียกใช้ฟังก์ชันอ่านค่าได้ทันที
#include "thingProperties.h"
#include <Arduino_MKRENV.h>
ในฟังก์ชัน setup() เราจะเริ่มการทำงานของ Serial สำหรับตรวจสอบสถานะ จากนั้นเรียก initProperties() เพื่อตั้งค่าตัวแปร Cloud และเริ่มต้นการเชื่อมต่อด้วย ArduinoCloud.begin() สิ่งที่สำคัญที่สุดในขั้นตอนนี้คือการตรวจสอบว่า ENV Shield พร้อมทำงานหรือไม่ด้วยคำสั่ง ENV.begin() หากล้มเหลวโปรแกรมจะหยุดทำงานเพื่อป้องกันการส่งค่าที่ผิดพลาด
void setup() {
Serial.begin(9600);
delay(1500);
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
if (!ENV.begin()) {
Serial.println("Failed to initialize MKR ENV shield!");
while(1);
}
}
ภายใน loop() หัวใจหลักคือฟังก์ชัน ArduinoCloud.update() ซึ่งจะคอยจัดการการรับส่งข้อมูล (Background tasks) และรักษาสถานะการเชื่อมต่อ ส่วนการอ่านค่าเซนเซอร์จะถูกทำซ้ำทุกๆ 1 วินาที โดยค่าที่อ่านได้จะถูกจัดเก็บลงในตัวแปรที่เป็น Property ของ Cloud ทำให้ค่าบน Dashboard อัปเดตทันที
void loop() {
ArduinoCloud.update();
// อ่านค่าจากเซนเซอร์แต่ละตัวและอัปเดตตัวแปร Cloud
humidity = int(ENV.readHumidity());
lux = int(ENV.readIlluminance());
pressure = int(ENV.readPressure());
temperature = int(ENV.readTemperature());
uva = int(ENV.readUVA());
uvb = int(ENV.readUVB());
uvi = int(ENV.readUVIndex());
delay(1000);
}
การตั้งค่าและเตรียมหน้าจอ Dashboard
หลังจากประกอบฮาร์ดแวร์แล้ว ให้เชื่อมต่อ MKR WiFi 1010 เข้ากับคอมพิวเตอร์ และทำตามขั้นตอนในหน้า "Getting Started" ของ Arduino Cloud คุณจำเป็นต้องสร้าง Properties ให้ตรงตามตารางด้านล่างนี้ (ระวังเรื่องตัวอักษรพิมพ์เล็ก-ใหญ่ เนื่องจากมีความสำคัญต่อการอ้างอิงชื่อตัวแปร)

ในขั้นตอนการเพิ่ม Widget เพื่อแสดงผล คุณจะต้องกรอกข้อมูลรายละเอียดของ Property แต่ละตัวผ่านฟอร์ม เช่น ประเภทข้อมูล (Integer, Float) และสิทธิ์การเข้าถึง (Read Only หรือ Read/Write)

เมื่อตั้งค่าครบทุกตัวแปร คุณจะได้รายการ Properties ที่พร้อมสำหรับการเชื่อมต่อกับ Dashboard ดังนี้:

โค้ดฉบับสมบูรณ์ (Full Sketch)
เมื่อตั้งค่า Properties เสร็จแล้ว ให้คลิกที่ปุ่ม Edit Code เพื่อเข้าสู่ Web Editor จากนั้นให้นำโค้ดด้านล่างนี้ไปวางแทนที่เนื้อหาเดิมในแท็บหลัก:
/*
Sketch generated by the Arduino IoT Cloud Thing "env_shield"
*/
#include "thingProperties.h"
#include <Arduino_MKRENV.h>
void setup() {
// เริ่มต้น Serial Monitor
Serial.begin(9600);
delay(1500);
// กำหนดคุณสมบัติที่ตั้งค่าไว้ใน Cloud
initProperties();
// เริ่มการเชื่อมต่อกับ Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
ตั้งค่าระดับความละเอียดของข้อความ Debug (0-4)
ยิ่งเลขมาก ยิ่งแสดงรายละเอียดการเชื่อมต่อและข้อผิดพลาดชัดเจนขึ้น
*/
setDebugMessageLevel(4);
ArduinoCloud.printDebugInfo();
// ตรวจสอบการเริ่มต้นทำงานของ ENV Shield
if (!ENV.begin()) {
Serial.println("Failed to initialize MKR ENV shield!");
while(1);
}
}
void loop() {
// จัดการการซิงค์ข้อมูลกับ Cloud
ArduinoCloud.update();
// อ่านค่าจากเซนเซอร์บน ENV Shield และแปลงเป็นเลขจำนวนเต็ม
humidity = int(ENV.readHumidity());
lux = int(ENV.readIlluminance());
pressure = int(ENV.readPressure());
temperature = int(ENV.readTemperature());
uva = int(ENV.readUVA());
uvb = int(ENV.readUVB());
uvi = int(ENV.readUVIndex());
delay(1000); // รอ 1 วินาทีก่อนการอ่านครั้งถัดไป
}
// ฟังก์ชัน Callback เหล่านี้จะทำงานเมื่อมีการเปลี่ยนแปลงค่าจากหน้า Dashboard
void onHumidityChange() { }
void onLuxChange() { }
void onPressureChange() { }
void onTemperatureChange() { }
void onUvaChange() { }
void onUvbChange() { }
void onUviChange() { }
หลังจากอัปโหลดโค้ดลงบอร์ด เมื่อสถานะการเชื่อมต่อเสร็จสมบูรณ์ บอร์ด MKR WiFi 1010 จะเริ่มอ่านข้อมูลจาก ENV Shield และซิงค์ขึ้นสู่ระบบคลาวด์ทันที คุณจะเห็นความเคลื่อนไหวของข้อมูลผ่าน Dashboard ที่ออกแบบไว้ ซึ่งจะให้ภาพรวมของสภาวะแวดล้อมที่แม่นยำและสวยงาม

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