I.Nguyên lý.
- Dùng cảm biến DHT11 để đo thông số nhiệt độ và độ ẩm môi trường cây trồng, cảm biến ánh sáng để đo cường độ ánh sáng , cảm biến mưa để xác định thời tiết ( mưa , khô) , cảm biến siêu âm để xác định mực nước trong bồn chứa .
- Các thông số dữ liệu sẽ được gửi lện Webserver để giám sát và điều khiển thông qua module ESP32.
II.Phần cứng.
• ESP32 NodeMCU LuaNode32.
• Module relay kích mức thấp.
• Module DHT11.
• Module Photodiod Light Sensor.
• Module Rain Water Soil Sensor.
• Module HC SR-04. • Thiết bị. Bảng kết nối các phần tử trong mạch: DHT11 SENSOR HC SR- 04SENSOR RAIN SENSOR LIGHT SENSOR
III.Sơ đồ xây dựng hệ thống IoT giám sát và điều khiển thiết bị.
Web Server
Khối xử lý trung tâm ESP32 NodeMCU LuaNode32 Khối thiết bị: Bơm Đèn Khối cảm biến: Cảm biến DHT11 Cảm biến ánh sáng Cảm biến mưa Cảm biến HC SR-04 Căm biến độ ẩm
IV.Code điều khiển.
Hàm set device/device mode.
//variable for device const int devOn = 0; const int devOff = 1;
//mode for device bơm tưới const int MAN = 0;
const int AUTO = 1; const int AUTO_T = 2; const int AUTO_E = 3; const int nod = 6;
Hàm chọn chân kết nối với thiết bị
byte Dev[nod] = {13,12,14,27,26,32}; //IOpin of esp8266 control devices byte DevRainSensor = 34; //pin 35 analog
byte DevLightSensor = 35; //pin 34 analog //pin of LM35 byte SoilSensor = 33; //pin of soil sensor
Hàm đọc cảm biến DHT11.
void ReadDHT11(){
float h0 = dht.readHumidity(); //read Humi - Do am
float t = dht.readTemperature();//read temperature - Nhiet do float f = dht.readTemperature(true);
if (isnan(h0) || isnan(t) || isnan(f)) {
//Serial.println("Failed to read from DHT sensor!"); return; }else{ Humi = h0; Temp = t; } Serial.println("Humi:"+String(Humi));
Hàm đọc cảm biến ánh sáng.
void ReadLightSensor(){
float val = analogRead(DevLightSensor); //Read light level Light = 100-val*100/4095;
String str = "Light =" + String(val) + "::% =" + String(Light); Serial.println(str);
}
Hàm đọc cảm biến mưa.
void ReadRainSensor(){
int val = digitalRead(DevRainSensor); //Read light level Rain = val;
Serial.println("Rain:"+String(val)); }
Hàm đọc cảm biến độ ẩm.
void ReadSoilSensor(){
float val = analogRead(SoilSensor); //Read light level Soil =100-val*100/4095; //don vi tinh %
String str = "Soil =" + String(val) + "::% =" + String(Soil); Serial.println(str); } Hàm đọc cảm biến khoảng cách. void ReadUltraSonicDistanceSensor(){ float k = distanceSensor.measureDistanceCm(); WaterLevel = H_Bon - k;
String str = "Muc nuoc:"+String(WaterLevel); Serial.println(str);