Micro bevattningssystem för krukväxter (5 / 6 steg)
Steg 5: kodning
Vi är alla mest klar! Vi måste nu programmera arduino pro mini.
Om du inte vet hur man använder en FTDI USB adapter kolla denna länk.
Källkoden är här.
Jag ska försöka förklara kort vad koden gör. Med hjälp av RTC modul vet systemet tiden.
Softwareserial biblioteket har att arbeta med HT-05 bluetooth-modulen, för det lyssnar efter vattning kommandon och vattning tid och längd. Kommandona är i formatet: "vattning timme: vattning minut: vattna sekunder nummer".
I huvudloop bluetooth seriell kontrolleras och om så kommandona läses och sedan ställs in. Jag är också kontroll en rutin kallas isWateringTime, om det returnerar sant vattning processen startar för det angivna antalet sekunder.
För felsökning aktuell tid, vattning osv trycks över följetong och över bluetooth.
De krävs bibliotek är "Wire", "RTClib", "SoftwareSerial". Först som två libs krävs för RTC modulen och tredje för bluetooth-modulen. Koden är ganska rakt framåt.
Första gång skiss körs, om RTC inte är programmerad ännu bör du avkommentera linjen "rtc.adjust (DateTime (__DATE__, __TIME__))," och ladda upp den. Detta anger tiden till RTC modulen på samma sätt som på datorn. Efter att kommentera raden och ladda upp den igen.
BT enhet... 5A:50
#include #include #include "RTClib.h"
CONST int waterPumpPin = 5;
justera detta för att DC pump kör med mer eller mindre makt const int waterPumpPower = 255; int lastMinute = 0;
char buffer[] = {' ',' ',' ',' ', ' ', ' ', ' ', ' '}; int kommandon [] = {17,56,10}; //run_hour:run_minute:watering_seconds
RTC_DS1307 rtc; SoftwareSerial bluetooth (10, 11); RX, TX
Ogiltiga inställningar () {Serial.begin(9600); bluetooth.begin(9600); Wire.BEGIN(); RTC.BEGIN(); pinMode (waterPumpPower, produktionen); analogWrite (waterPumpPin, 0); avkommentera nästa rad för att ställa in tiden för den första tiden //rtc.adjust (DateTime (__DATE__, __TIME__)); DateTime nu = rtc.now(); lastMinute = now.minute(); }
Ogiltig loop () {om (bluetooth.available()) {för (int jag = 0; jag < 3; i ++) {strängvärde = bluetooth.readStringUntil(':'); int numericVal = value.toInt(); kommandon [i] = numericVal;} printCurrentTime(); Serial.Print ("för:"); 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 ("varaktighet:"), bluetooth.print (kommandon [2]), bluetooth.println ("s");} om (isWateringTime()) {Serial.println("watering.."); bluetooth.println("watering.."); startWatering(commands[2]); delay(60000);} delay(300); }
void startWatering (int varaktighet) {analogWrite (waterPumpPin, waterPumpPower); delay(duration * 1000); analogWrite (waterPumpPin, 0);}
booleska isWateringTime() {DateTime nu = rtc.now(); om (now.minute()! = lastMinute) {printCurrentTime(); lastMinute = now.minute();} återvända now.hour() == kommandon [0] & & now.minute() == kommandon [1];}
void printCurrentTime() {DateTime nu = rtc.now(); Serial.Print ("aktuell tid:"); Serial.Print(Now.Hour(), DEC); Serial.Print(':'); Serial.Print(Now.Minute(), DEC); Serial.println(); Bluetooth.Print ("aktuell tid:"); bluetooth.print(now.hour(), DEC);bluetooth.print(':');bluetooth.print(now.minute(), DEC);bluetooth.println();}