Thiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự độngThiết kế hệ thống tưới cây tự động
- 2016 Sinh viên: - 2016 o0o - Sinh viên : : MSV : 1412102108 - : GS TSKH : : c giao ngày 31 tháng Sinh viên GS (Ký ghi r M CL C .1 1.1 KHÁI QUÁT V NHÀ TR 1.3.1 T ng quan v thi t k m t h th 1.3.2 Thi t k h th i 2.2 BOARD ARDUINOMEGA 2560 .9 2.3 ARDUINO LCD KEYPAD SHIELD 16 .17 18 MODULE RELAY 12VDC 20 .22 23 24 25 26 2.12 ARDUINO IDE VÀ 27 29 .29 .30 31 31 .34 34 .35 37 37 39 K t lu n 57 L U GS lcd.createChar(5, mua); lcd.createChar(6, chuong); lcd.createChar(7, nang); dht.begin(); } void loop() { timeRef = millis(); switch (state) { case MH_CHINH: showTime(); break; case TG_CAI_ON: showTime(); checkMOTime(); 43 break; case HT_TG_CAI: showMOTime(); break; case CAI_GIO: setMOHours(); if ( state != CAI_PHUT ) break; case CAI_PHUT: setMOMinutes(); break; } while ( (unsigned long)(millis() - timeRef) < 970 ) { if ( (button = lcd.button()) != KEYPAD_NONE ) { 44 while ( lcd.button() != KEYPAD_NONE ) ; transition(button); break; } } } void transition(uint8_t trigger) { int value = digitalRead(rainSensor); float h = dht.readHumidity(); float t = dht.readTemperature(); switch (state) { case MH_CHINH: if ( trigger == KEYPAD_LEFT ) state = HT_TG_CAI; else if ( trigger == KEYPAD_RIGHT ) { set = true; state = TG_CAI_ON; } else if ( trigger == KEYPAD_SELECT ) state = CAI_GIO; break; case TG_CAI_ON: if ( trigger == KEYPAD_LEFT ) state = HT_TG_CAI; else if ( trigger == KEYPAD_RIGHT ) { set = false; state = MH_CHINH; } else if ( trigger == KEYPAD_SELECT ) state = CAI_GIO; 45 else if ( trigger == TIME_MET ) {if(value == ) {analogWrite(BUZZER_PIN, 220);delay(30000);analogWrite(BUZZER_PIN, 0);state = MH_CHINH;} else h30 || ){analogWrite(BUZZER_PIN, 220);delay(60000);analogWrite(BUZZER_PIN, 0);state = MH_CHINH;} else if (h>95) {analogWrite(BUZZER_PIN, 0);state = MH_CHINH;} else if(value ==0){analogWrite(BUZZER_PIN, 0);state = MH_CHINH;} } break; case HT_TG_CAI: if ( trigger == TIME_OUT ) { if ( !set ) state = MH_CHINH; else state = TG_CAI_ON; } break; case CAI_GIO: if ( trigger == KEYPAD_SELECT ) state = CAI_PHUT; else if ( trigger == TIME_OUT ) { if ( !set ) state = MH_CHINH; else state = TG_CAI_ON; } break; case CAI_PHUT: if ( trigger == KEYPAD_SELECT ) { set = true; state = TG_CAI_ON; } else if ( trigger == TIME_OUT ) { if ( !set ) state = MH_CHINH; 46 else state = TG_CAI_ON; } break; } } void showTime() { now = RTC.now(); const char* dayName[] = { "CN", "T2", "T3", "T4", "T5", "T6", "T7" }; const char* monthName[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" }; lcd.clear(); lcd.print(String(dayName[now.dayOfTheWeek()]) + " " + (now.day() < 10 ? "0" : "") + now.day() + "." + monthName[now.month()-1] + "." + now.year()); lcd.setCursor(0,1); lcd.print((now.hour() < 10 ? "0" : "") + String(now.hour()) + ":" + (now.minute() < 10 ? "0" : "") + now.minute() + ":" + (now.second() < 10 ? "0" : "") + now.second() ); lcd.setCursor(8,1); if (set == ) lcd.write(6); { 47 float h = dht.readHumidity(); float t = dht.readTemperature(); //.F int sensorReading = analogRead(A0); if (isnan(t) || isnan(h)) { lcd.setCursor(10,1); lcd.println("Failed !"); } else { lcd.setCursor(10,1); lcd.print(round(h)); lcd.print("%"); lcd.setCursor(13,1); lcd.print(round(t)); //lcd.println(" *C"); lcd.write(4); } } { lcd.setCursor(15,0); lcd.write(5);; } else { lcd.setCursor(15,0); lcd.write(7); 48 } } } void showMOTime() { lcd.clear(); lcd.print("Thoi gian cai"); lcd.setCursor(0,1); lcd.print(String("Gio: ") + ( MOHours < ? "0" : "" ) + MOHours + " Phut: " + ( MOMinutes < ? "0" : "" ) + MOMinutes); delay(3000); transition(TIME_OUT); } void checkMOTime() { if ( now.hour() == MOHours && now.minute() == MOMinutes ) transition(TIME_MET); } 49 void setMOHours() { unsigned long timeRef; boolean timeOut = true; lcd.clear(); lcd.print("Cai thoi gian"); tmpHours = 8; timeRef = millis(); lcd.setCursor(0,1); lcd.print("cai gio: 8"); while ( (unsigned long)(millis() - timeRef) < 5000 ) { uint8_t button = lcd.button(); if ( button == KEYPAD_UP ) { tmpHours = tmpHours < 23 ? tmpHours + : tmpHours; lcd.setCursor(11,1); lcd.print(" "); lcd.setCursor(11,1); if ( tmpHours < 10 ) lcd.print(" "); lcd.print(tmpHours); timeRef = millis(); } else if ( button == KEYPAD_DOWN ) 50 { tmpHours = tmpHours > ? tmpHours - : tmpHours; lcd.setCursor(11,1); lcd.print(" "); lcd.setCursor(11,1); if ( tmpHours < 10 ) lcd.print(" "); lcd.print(tmpHours); timeRef = millis(); } else if ( button == KEYPAD_SELECT ) { while ( lcd.button() != KEYPAD_NONE ) ; timeOut = false; break; } delay(150); } if ( !timeOut ) transition(KEYPAD_SELECT); else transition(TIME_OUT); } 51 void setMOMinutes() { unsigned long timeRef; boolean timeOut = true; uint8_t tmpMinutes = 0; lcd.clear(); lcd.print("Cai thoi gian"); timeRef = millis(); lcd.setCursor(0,1); lcd.print("Cai phut: 0"); while ( (unsigned long)(millis() - timeRef) < 5000 ) { uint8_t button = lcd.button(); if ( button == KEYPAD_UP ) { tmpMinutes = tmpMinutes < 59 ? tmpMinutes + : tmpMinutes; lcd.setCursor(13,1); lcd.print(" "); lcd.setCursor(13,1); if ( tmpMinutes < 10 ) lcd.print(" "); lcd.print(tmpMinutes); timeRef = millis(); } else if ( button == KEYPAD_DOWN ) 52 { tmpMinutes = tmpMinutes > ? tmpMinutes - : tmpMinutes; lcd.setCursor(13,1); lcd.print(" "); lcd.setCursor(13,1); if ( tmpMinutes < 10 ) lcd.print(" "); lcd.print(tmpMinutes); timeRef = millis(); } else if ( button == KEYPAD_SELECT ) { while ( lcd.button() != KEYPAD_NONE ) ; timeOut = false; break; } delay(150); } if ( !timeOut ) { MOHours = tmpHours; MOMinutes = tmpMinutes; transition(KEYPAD_SELECT); } else transition(TIME_OUT); } 53 Hình 3.5 : Hình nh m ch 54 p code c p ngu n K T LU N Q :T em - o C), o ây - - - hàm tài 55 ng phát tri n c tài c thông s v ng xung quanh 2.Phát tri n giao di n giám sát mô ph ng ph n m m C# tài phát tri n r ng rãi vào th c t - -Trên 56 TÀI LI U THAM KH O Massimo Banzi (2009), Getting Started with Arduino Michael Margollis and Nicholas Weldin (2009), Arduino Cookbook, GS , Nhà (2009), http://learning.grobotronics.com/2014/09/arduino-lesson-14-dc-motor-l293/ http://www.adafruit.com/ http://arduino.vn/ http://arduino.cc/ 57 ... cho m t l nh t ng i l n nh t c c vào chi u dài c a m c s cây/ hàng b ng công th c: S cây/ hàng= chi u dài hàng chia c ly tr ng (cây cách cây) +1 C A ARDUINO 2.1.GI I THI U CHUNG V ARDUINO i ( hình... c c a cho m i l i/tháng, s tháng c i i, s l n c nhu c u ngu i i: N u b n ch n u di i cho di n tích nh tr l i ch il chi i l n, công su s tl nd c c nh c chi u dài m i hàng cây, t ng kính ng d c... u t toán thi t k r t c n thi t 1.3.1.T ng quan v thi t k m t h th thi t k h th i c cho tr ng, c n v sau: Hình d i Di i S c n cung c Nhu c i c c a lo i tr th i gian (lít/ngày) i nh hình dáng, di