Paso 5: codificación
Hemos terminado todo más! Ahora necesitamos programar el arduino pro mini.
Si no sabes cómo usar un FTDI USB adaptador Revise este enlace.
El código fuente está aquí.
Voy a intentar explicar brevemente lo que hace el código. Utilizando el módulo RTC el sistema sabe el tiempo.
La librería softwareserial está preparada para funcionar con el módulo de bluetooth HT-05, escucha los comandos de riego y establece el tiempo de riego y la duración. Los comandos están en el formato: "hora riego: riego minuto: número de segundos de riego".
En el bucle principal se comprueba el bluetooth serial y si es así los comandos se leen y luego se establecen. ¡ También estoy revisando una rutina llamada isWateringTime, si devuelve true que inicia el proceso de riego para el número determinado de segundos.
Para propósitos de depuración la hora actual, riego etc. se imprimen sobre la serie y sobre bluetooth.
Las bibliotecas necesarias son "Hilos", "RTClib", "SoftwareSerial". Primero dos librerías son necesarias para el módulo RTC y el tercero para el módulo de bluetooth. El código es bastante sencillo.
Primera vez las carreras de dibujo, si no se ha programado la RTC debe descomentar la línea "rtc.adjust (DateTime (__DATE__, __TIME__));" y lo subo. Esto establecerá el tiempo en el módulo RTC lo mismo que en su computadora. Después de comentar la línea y lo subo otra vez.
dispositivo de BT... 5A:50
#include #include "RTClib.h" #include
const int waterPumpPin = 5;
ajustar para hacer el DC funcionamiento de la bomba con más o menos poder const int waterPumpPower = 255; lastMinute int = 0;
char buffer[] = {' ',' ',' ',' ', ' ', ' ', ' ', ' '}; comandos de int [] = {17,56,10}; //run_hour:run_minute:watering_seconds
Rtc RTC_DS1307; SoftwareSerial bluetooth (10, 11); RX, TX
void setup () {Serial.begin(9600); bluetooth.begin(9600); Wire.Begin(); RTC.Begin(); pinMode (waterPumpPower, salida); analogWrite (waterPumpPin, 0); Descomentar la siguiente línea para fijar la hora para la primera vez //rtc.adjust (DateTime (__DATE__, __TIME__)); Fecha y hora = ahora rtc.now(); lastMinute = now.minute(); }
void loop () {si (bluetooth.available()) {para (int i = 0; i < 3; i ++) {String valor = bluetooth.readStringUntil(':'); int numericVal = value.toInt(); comandos [i] = numericVal;} printCurrentTime(); Serial.Print ("para:"); 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 ("duración:"); bluetooth.print (comandos [2]); bluetooth.println ("s");} Si (isWateringTime()) {Serial.println("watering.."); bluetooth.println("watering.."); startWatering(commands[2]); delay(60000);} delay(300); }
void startWatering (int duración) {analogWrite (waterPumpPin, waterPumpPower); delay(duration * 1000); analogWrite (waterPumpPin, 0);}
Boolean isWateringTime() {DateTime = ahora rtc.now(); si (now.minute()! = lastMinute) {printCurrentTime(); lastMinute = now.minute();} vuelta now.hour() == comandos [0] & & now.minute() == comandos [1];}
void printCurrentTime() {DateTime = ahora rtc.now(); Serial.Print ("hora:"); Serial.Print(Now.hour(), DEC); Serial.Print(':'); Serial.Print(Now.minute(), DEC); Serial.println(); Bluetooth.Print ("hora:"); bluetooth.print(now.hour(), DEC);bluetooth.print(':');bluetooth.print(now.minute(), DEC);bluetooth.println();}