Étape 5: codage
Nous avons fini tous les ponts ! Nous devons maintenant programmer l’arduino pro mini.
Si vous ne savez pas comment utiliser un USB FTDI adaptateur vérifier ce lien.
Le code source est ici.
Je vais essayer d’expliquer brièvement en quoi le code. En utilisant le module RTC le système sait le temps.
La bibliothèque softwareserial est paramétrée pour fonctionner avec le module bluetooth HT-05, il écoute les commandes de l’arrosage et définit l’heure et la durée d’arrosage. Les commandes sont au format : « heure d’arrosage : minutes d’arrosage : arrosage nombre de secondes ».
Dans la boucle principale la série bluetooth est activée et si oui les commandes sont lues et puis sont définies. Je vérifie aussi une routine appelée isWateringTime, si elle retourne true, que le processus d’arrosage démarre pour le nombre de secondes.
Pour des fins de débogage l’heure actuelle, durée etc. d’arrosage sont imprimés sur la série et bluetooth.
Les bibliothèques requises sont « Wire », « RTClib », « SoftwareSerial ». Tout d’abord deux libs sont requis pour le module RTC et le troisième pour le module bluetooth. Le code est assez simple.
Tout d’abord les pistes de l’esquisse, le temps si le CCF n’est pas programmé, mais vous devez décommenter la ligne "rtc.adjust (DateTime (__DATE__, __TIME__));" et le télécharger. Celle-ci définira le temps pour le module RTC identique sur votre ordinateur. Après cela, commentez la ligne et le télécharger à nouveau.
dispositif de BT... 5A:50
#include #include « RTClib.h » #include
const int waterPumpPin = 5 ;
régler cela pour faire du DC pompe exécution avec moins ou plus puissance const int waterPumpPower = 255 ; lastMinute int = 0 ;
char buffer[] = {' ',' ',' ',' ', ' ', ' ', ' ', ' '}; commandes d’int [] = {17,56,10}; //run_hour:run_minute:watering_seconds
RTC_DS1307 CCF ; SoftwareSerial bluetooth (10, 11) ; RX, TX
annuler le programme d’installation () {Serial.begin(9600) ; bluetooth.begin(9600) ; Wire.Begin() ; RTC.Begin() ; pinMode (waterPumpPower, sortie) ; analogWrite (waterPumpPin, 0) ; Décommentez la ligne suivante pour régler l’heure pour la première fois //rtc.adjust (DateTime (__DATE__, __TIME__)) ; DateTime maintenant = rtc.now() ; lastMinute = now.minute() ; }
boucle Sub () {si (bluetooth.available()) {pour (int i = 0; j’ai < 3; i ++) {valeur de chaîne = bluetooth.readStringUntil(':') ; int numericVal = value.toInt() ; commandes [i] = numericVal;} printCurrentTime() ; Serial.Print ("pour:") ; Serial.Print(commands[0]) ; Serial.Print(":") ; Serial.println(commands[1]) ; Serial.Print("Duration:") ; Serial.Print(commands[2]) ; Serial.println ("s") ; Bluetooth.Print ("Set for:");bluetooth.print(commands[0]);bluetooth.print(":");bluetooth.println(commands[1]) ; Bluetooth.Print ("Durée:"); bluetooth.print (commandes [2]); bluetooth.println ("s");} Si (isWateringTime()) {Serial.println("watering..") ; bluetooth.println("watering..") ; startWatering(commands[2]) ; delay(60000);} delay(300) ; }
void startWatering (int durée) {analogWrite (waterPumpPin, waterPumpPower); delay(duration * 1000) ; analogWrite (waterPumpPin, 0);}
Boolean isWateringTime() {DateTime maintenant = rtc.now() ; if (now.minute()! = lastMinute) {printCurrentTime() ; lastMinute = now.minute();} return now.hour() == commandes [0] & & now.minute() == commandes [1];}
void printCurrentTime() {DateTime maintenant = rtc.now() ; Serial.Print ("l’heure actuelle:") ; Serial.Print(Now.Hour(), DEC) ; Serial.Print(':') ; Serial.Print(Now.minute(), DEC) ; Serial.println() ; Bluetooth.Print ("l’heure actuelle:"); bluetooth.print(now.hour(), DEC);bluetooth.print(':');bluetooth.print(now.minute(), DEC);bluetooth.println();}