// Date and time functions using a DS1307 RTC connected via I2C and Wire lib #include #include "RTClib.h" #include #include // Definition des pins des capteurs et actionneurs #define capteur_hum_sol A0 //capteur humidite sol a connecter sur le A0 #define pin_hum_sol 2 //connecter le + du capteur humidite sol #define pompe 3 //connecter le S du relais sur la pin 3, il controle la pompe #define electrovanne 4 //connecter le S du relais sur la pin 4, il controle l'electrovanne #define capteur_reservoir 5 //connecter le capteur de niveau d'eau //Déclaration des variables du programme int valeur_hum_sol = 0; // on stocke les valeurs lu par le capteur d'humidité sol RTC_DS1307 rtc; char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7); // 0x27 is the I2C bus address for an unmodified backpack void setup () { Serial.begin(9600); // activate LCD module lcd.begin (16, 2); // for 16 x 2 LCD module lcd.setBacklightPin(3, POSITIVE); lcd.setBacklight(HIGH); pinMode(capteur_hum_sol, INPUT); pinMode(capteur_reservoir, INPUT); pinMode(pin_hum_sol, OUTPUT); pinMode(pompe, OUTPUT); pinMode(electrovanne, OUTPUT); ////////////////////////////////////// configuration de l'horloge ////////////////////////////////////// if (! rtc.begin()) { Serial.print("Couldn't find RTC"); while (1); } if (! rtc.isrunning()) { Serial.print("RTC is NOT running!"); } rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//auto update from computer time //rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));// configurer manuellement l'heure //////////////////////////////////////////////////////////////////////////////////////////////////////// } void loop () { // on lit l'heure sur le rtc DateTime now = rtc.now(); //on lance le debug pour verifier si il ya pas de probleme Debug(); affiche_lcd(); //on test si il est heure d'arroser if ((now.hour() == 20 ) && (now.minute() == 02)) { if ( digitalRead(capteur_reservoir) == 1) // on test si le reservoir d'eau est remplit { arroser(); } else // sinon on envoie un message alert que le reservoir est vide { Serial.print(" le reservoir est vide "); } } } ////////////////////////////////////// fonction arroser ////////////////////////////////////// void arroser () { digitalWrite(pin_hum_sol, HIGH); // on allume le capteur do { //on lit 10 fois le capteur for (int i = 0; i < 10; i++) { valeur_hum_sol = analogRead(capteur_hum_sol); // on lit la valeur analogique du capteur } ///////////////////// on test le sol si il est mouille ou pas et on action ou pas les moteurs ///////////////////// if (valeur_hum_sol > 500 ) { digitalWrite(electrovanne, HIGH); // on allume electrovanne delay(500); // on attend 500ms digitalWrite(pompe, HIGH); // on allume la pompe } } while (valeur_hum_sol > 500); // tant que le sol est sec on arrose if (valeur_hum_sol < 500 ) // si le sol est mouille { digitalWrite(electrovanne, LOW); // on eteind l'electrovanne digitalWrite(pompe, LOW); // on eteind la pompe digitalWrite(pin_hum_sol, LOW); // on eteind le capteur } } ////////////////////////////////////// Débug ////////////////////////////////////// void affiche_lcd() { DateTime now = rtc.now(); lcd.home (); // set cursor to 0,0 lcd.print(now.hour()); lcd.print(':'); lcd.print(now.minute()); lcd.print(':'); lcd.print(now.second()); lcd.print(" "); } void Debug() { DateTime now = rtc.now(); Serial.print(now.hour()); Serial.print(':'); Serial.print(now.minute()); Serial.print(':'); Serial.print(now.second()); Serial.print(" "); Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); Serial.print(" ,"); Serial.print(now.day()); Serial.print('/'); Serial.print(now.month()); Serial.print('/'); Serial.print(now.year()); Serial.print(" valeur humidite sol "); Serial.println(valeur_hum_sol); delay(1000); }