ตัวอย่างการพัฒนา IoT สำหรับวัดค่าความชื้นบอกสถานะ และเก็บข้อมูลความชื้นด้วย Firebase แบบ RealTime Database ผ่าน Arduino
สำหรับไอเดียในการนำ IoT (Internet of Things) สำหรับทำ Smart Farm โดยไอเดียคือการวัดความชื้นในดินผ่านการใช้ Sensor วัดความชื้น (moisture) แล้วบังคับตรวจสอบว่า ถ้ามีค่าความชื้นต่ำก็จะทำการบังคับปั้มน้ำให้ทำงาน เมื่อความชื้นสูงก็หยุดการทำงานของปั้มน้ำ
นำ Arduino Board มาทำการโยงรูปแบบดังนี้ ต่อ Sensor วัดความชื้นร่วมกับตัวตรวจวัด โดยจะทำงานส่วนของรับค่า Analog มาใช้งาน
ต่อสายไปยัง Sensor ดังนี้
จับตัวตรวจวัดเข้ากับเซ็นเซอร์ไม่ต้องกังวลว่าสายที่ใช้ต้องตรงไหม สามารถสลับได้
พ่วง Sensor ส่วนของ 3 ขาโดยต่อ A0 ไปยังฝั่ง A0 ของ Analog, GND ของ Sensor ไป GND ของ Board และ VC ของ Sensor ไปที่ 3V ของ Board
ใช้ตัวอย่างในการทำ LEDs สามสีจากบทความ “เขียนแอพฯ ควบคุม Arduino ด้วย Android ผ่าน Firebase RealTime Database” เปลี่ยนแปลงเล็กน้อยคือ ช่อง V ต่อไปที่ 3V, ไฟแดง ต่อไปที่ D5, สีเขียว ต่อไปที่ D6, สีน้ำเงิน ต่อไปที่ D7
เราจะใช้ Firebase เป็นตัวเก็บค่าความชื้นแบบ Realtime ผ่านโครงสร้าง device/moiture/status เก็บค่าไว้แบบ RealTime
การเขียนโปรแกรมใช้รูปแบบดังนี้
#include <ESP8266WiFi.h> #include <FirebaseArduino.h> #define WIFI_SSID "NOMAD" #define WIFI_PASSWORD "PASSWORD WIFI" #define FIREBASE_HOST "banyapon-312ed.firebaseio.com" #define FIREBASE_AUTH "SECRET PASSWORD FIREBASE" const int ledGreen = D6; const int ledBlue = D7; const int ledRed = D5; void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println(WiFi.localIP()); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("connecting"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("connected: "); Serial.println(WiFi.localIP()); pinMode(ledGreen, OUTPUT); pinMode(ledBlue, OUTPUT); pinMode(ledRed, OUTPUT); Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); Firebase.setInt("device/moisture/status", 0); } void loop() { int value = analogRead(A0); Serial.println(value); Firebase.setInt("device/moisture/status", value); if(value < 500){ digitalWrite(ledGreen, 0); digitalWrite(ledBlue, 1); digitalWrite(ledRed, 1); }else if(value >= 500 and value <=800){ digitalWrite(ledBlue, 0); digitalWrite(ledGreen, 1); digitalWrite(ledRed, 1); }else if(value > 800){ digitalWrite(ledRed, 0); digitalWrite(ledGreen, 1); digitalWrite(ledBlue, 1); } delay(200); }
การรับค่าใช้ ตัวแปร value มารับค่า analogRead(); ที่ช่อง A0
int value = analogRead(A0);
การเทียบค่าความชื้นต้องใช้ Serial Monitor ในการตรวจดูค่า โดยปกติถ้าความชื้นปกติหรือน้อยจะมีค่า 800-900 หากเรานำ sensor ไปแตะหรือจุ่มน้ำ ค่าความชื้นเพิ่มขึ้น ค่าที่วัดจาก Serial จะมีค่าลดลงเป็น 500 หรือ น้อยกว่านั้น
if(value < 500){ digitalWrite(ledGreen, 0); digitalWrite(ledBlue, 1); digitalWrite(ledRed, 1); }else if(value >= 500 and value <=800){ digitalWrite(ledBlue, 0); digitalWrite(ledGreen, 1); digitalWrite(ledRed, 1); }else if(value > 800){ digitalWrite(ledRed, 0); digitalWrite(ledGreen, 1); digitalWrite(ledBlue, 1); }
ถ้าค่า value มีค่าน้อยกว่า 500 หรือชื้นมาก ไฟเขียวจะทำงาน, ถ้าอยู่ระหว่าง มากกว่า 500 – 800 ไฟสีน้ำเงินจะทำงาน และถ้ามากกว่า 800 ขึ้นไป ไฟสีแดงจะทำงาน เพราะอากาศเป็นปกติ ซึ่งเราต้องหาวิธีการเปรียบเทียบเพื่อแสดงผลให้แตกต่างกัน แล้วแต่สถานการณ์ และสภาพแวดล้อมของแต่ละคน
วีดีโอทดสอบ โดยการนำกระดาศทิชชูชุบน้ำมาคลุมไว้ที่ปลาย Sensor เพื่อดูสถานะของไฟ Leds และ ข้อมูลบน Firebase
ในรูปแบบนี้จะสามารถให้เราสามารถนำไปประยุกต์ใช้กับ การทำ Smart Farm ปรับแรงดันของน้ำให้ช่วยเหลือการเกษตร หรือพัฒนาแอพพลิเคชันมาประยุกต์ใช้ได้