personas:johnny:proyectos:indoor_diy_autosostenible
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previaPróxima revisiónAmbos lados, revisión siguiente | ||
personas:johnny:proyectos:indoor_diy_autosostenible [2019/12/01 07:37] – kz | personas:johnny:proyectos:indoor_diy_autosostenible [2020/07/13 09:12] – kz | ||
---|---|---|---|
Línea 539: | Línea 539: | ||
Logro adjuntar a la trama de datos la humedad en la tierra de un sensor de humedad capacitivo. | Logro adjuntar a la trama de datos la humedad en la tierra de un sensor de humedad capacitivo. | ||
- | **Tareas hechas** | + | ====== Actualización 1 diciembre 2019 ====== |
- | - Enviar trama de datos al influx: HECHO | + | Por alguna razón con el código que tengo aqui ... se presenta el problema |
- | - En esta imlementación | + | en el esp... si estre se reinicia o se va la energia... esto causa que el tiempo se reinicie... ocacionando que el tiempo de las alarmas de las luces no este sincronizado con el tiempo real. |
+ | *Solución: *Se usan las librerias NTP y Time simultaneamente... en resumen se fija al inicio el tiempo local (libreria time) con request al servidor NTP... luego de eso el tiempo local se va actualizando cada 10 miniutos con un request al servidor NTP. | ||
- | ** | + | *TODO* |
- | Tareas que faltan por hacer!!!** | + | |
+ | - *RAPIDO*: integrar al código actual al actualizacion con el servidor NTP | ||
- integrar una web en la flash para programar la fecha del rtc digital time.h, | - integrar una web en la flash para programar la fecha del rtc digital time.h, | ||
- pensar en una interfaz para pedir al usuario la programacion de la luz sea floración o vegetación o esquejes. | - pensar en una interfaz para pedir al usuario la programacion de la luz sea floración o vegetación o esquejes. | ||
Línea 554: | Línea 554: | ||
- actualizar el firmware por medio de ota | - actualizar el firmware por medio de ota | ||
+ | ====== Actualización 13 de julio 2020 ====== | ||
- | ====== Actualización 1 diciembre 2019 ====== | + | En todo este tiempo he estado aprendiendo mas que todo sobre las plantas, conociendolas y mirando como los diferentes factores que inciden en ella(Temperatura y humedad, calidad de la tierra, calidad del agua, lummens necesarios, etc...) |
+ | Entonces antes de seguir con el codigo y el prototipo de placa. Estuve un tiempo pensando en la mejoras que se le arian al indoor. | ||
- | Por alguna razón con el código que tengo aqui ... se presenta el problema | + | He dispuesto un extrator |
- | en el esp... si estre se reinicia o se va la energia... esto causa que el tiempo se reinicie... ocacionando que el tiempo de las alarmas de las luces no este sincronizado | + | |
- | *Solución: *Se usan las librerias NTP y Time simultaneamente... en resumen se fija al inicio el tiempo local (libreria time) con request al servidor NTP... luego de eso el tiempo local se va actualizando cada 10 miniutos con un request al servidor NTP. | + | ANTES |
+ | |||
+ | {{:personas: | ||
+ | |||
+ | AHORA | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Tambien mi tio me ayudo a construir un reflector para adaptarle hasta 6 bombillos a este mismo. Este cambio ayudo mucho a las plantas pero tambien afecto bastante otros factores que detallaremos mas adelante. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
- | < | + | En este cultivo tambien estuve experimentando y aprendiendo sobre las podas. En especial la fim y la apical. |
- | /* Library used | + | |
- | * https:// | + | |
- | * https:// | + | |
- | * https:// | + | |
- | * | + | |
- | * resources from sensor | + | |
- | * https:// | + | |
- | * | + | |
- | config NTP | + | |
- | this code take the time from server using NTP | + | |
- | https:// | + | |
- | !!! IMPORTANT | + | {{:personas:johnny: |
- | You need to adjust the UTC offset for your timezone in milliseconds. | + | |
- | Refer the list of UTC time offsets. | + | |
- | https:// | + | |
- | For UTC -5.00 : -5 * 60 * 60 : -18000 | + | Entonces esta fue mi planta experimental... a la cual le hice de todo... apicales y fim... dando espacio minimo de un mes entre poda y poda para que la planta se recuperara y finalmente siempre podando en cuarto menguante. |
- | For UTC +1.00 : 1 * 60 * 60 : 3600 | + | |
- | For UTC +0.00 : 0 * 60 * 60 : 0 | + | |
- | used -> const long utcOffsetInSeconds = 3600; | + | |
- | */ | + | |
- | #include <Arduino.h> | + | {{: |
- | #include < | + | {{: |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | // pin out oled ssd1306 | + | Dadas las experimentaciones, |
- | #define OLED_MOSI 14 // | + | |
- | #define OLED_CLK 16 //D0 | + | |
- | #define OLED_DC 13 // | + | |
- | #define OLED_CS 15 // | + | |
- | #define OLED_RESET 12 //D8 | + | |
- | #define lights D1 | + | Este experimento fue para aprender a realizar un cultivo tipo scrog... donde son necesarias este tipo de podas para hacer que las plantas sean mas eficientes a la hora del cultivo... pero el unico contra es que se alarga el tiempo de vegetacion para que las plantas se recuperen. |
- | char stateLights = ' | + | |
- | // config NTP variables | + | ** Pasamos la placa base a baquela y actualizaciones y fixes en el código** |
- | int time_hours = 0; | + | |
- | int time_minutes = 0; | + | |
- | int time_seconds = 0; | + | |
- | const int *ntp_hours, | + | |
- | const long utcOffsetInSeconds = -18000; // colombia UTC -5 | + | |
- | char daysOfTheWeek[7][12] = { | + | |
- | " | + | |
- | }; | + | |
- | const char *ssid = " | + | Primero hablaremos de la placa. Entonces antes teniamos este hardware, 4 reles (de los cuales solo estoy usando 1) y una pantallita para ver las lecturas del dht11. |
- | const char *pass = " | + | |
- | // Define NTP client to get time | + | Antes |
- | WiFiUDP ntpUDP; | + | |
- | NTPClient timeClient(ntpUDP, | + | |
- | // config display | + | {{: |
- | Adafruit_SSD1306 display(OLED_MOSI, | + | |
- | #if (SSD1306_LCDHEIGHT != 64) | + | |
- | //# | + | |
- | #endif | + | |
- | // define template function | + | Cuando teniamos este circuito. Disponiamos de problemas de interrumciones de corriente... porque como vemos los cables estan pegados con mocos y mi casa a veces se mueve el piso, ocacionando que los cables se desconenten. |
- | void firstSync(); | + | |
- | void syncNtptoTime(); | + | |
- | void stateVegetative(); | + | |
- | void stateFlowering(); | + | |
- | void setup() { | + | Por otro lado estabamos haciendo un request al server **NTP** cada minuto y con esta misma hora era que se configuraba todo en el codigo... ocacionando que cuando se cae el internet... no exista hora y se volviera loca la alarma... |
- | // display | + | |
- | Serial.begin(115200); | + | |
- | setTime(time_hours, | + | |
- | WiFi.begin(ssid, pass); | + | |
- | display.begin(SSD1306_SWITCHCAPVCC); | + | |
- | display.clearDisplay(); | + | |
- | Serial.println(); | + | |
- | Serial.println(); | + | |
- | delay(1000); | + | |
- | display.setTextSize(1); | + | |
- | display.setTextColor(WHITE); | + | |
- | display.setCursor(0, | + | |
- | display.println(" | + | |
- | display.display(); | + | |
- | delay(1000); | + | |
- | while (WiFi.status() != WL_CONNECTED) { | + | |
- | delay(500); | + | |
- | display.clearDisplay(); | + | |
- | display.setTextSize(1); | + | |
- | display.setCursor(0, | + | |
- | display.setTextColor(BLACK, | + | |
- | display.println(" | + | |
- | display.print(" | + | |
- | display.display(); | + | |
- | } | + | |
- | display.clearDisplay(); | + | |
- | display.setTextSize(1); | + | |
- | display.setCursor(0, | + | |
- | display.setTextColor(WHITE); | + | |
- | display.println(" | + | |
- | display.println(WiFi.localIP()); | + | |
- | display.display(); | + | |
- | timeClient.begin(); | + | |
- | delay(5000); | + | |
- | display.clearDisplay(); | + | |
- | display.setTextSize(1); | + | |
- | display.setTextColor(WHITE); | + | |
- | display.setCursor(0, | + | |
- | display.println(" | + | |
- | display.display(); | + | |
- | firstSync(); | + | |
- | delay(5000); | + | |
- | //Serial.print(WiFi.localIP()); | + | |
- | // | + | |
- | pinMode(lights, | + | |
- | } | + | |
- | void loop() { | + | Otra cosa grave era que cuando se hiba la luz... entonces como la alarma del codigo estaba seteada con una hora quemada... coacionaba que los ciclos de luz se corrieran o no fueran los esperados. |
- | display.clearDisplay(); | + | |
- | display.setTextSize(0.5); | + | |
- | display.setTextColor(WHITE); | + | |
- | display.setCursor(0, | + | |
- | display.print(daysOfTheWeek[timeClient.getDay()]); | + | |
- | if (stateLights == ' | + | |
- | display.print(" | + | |
- | } else { | + | |
- | display.print(" | + | |
- | } | + | |
- | display.println(); | + | |
- | display.setCursor(0, | + | |
- | // time library | + | |
- | display.print(" | + | |
- | display.print(hour()); | + | |
- | display.print(":" | + | |
- | display.print(minute()); | + | |
- | display.print(":" | + | |
- | display.print(second()); | + | |
- | // time ntp | + | Otro problema que existia era que cuando las plantas ya necesitan eñ cambio de fotoperiodo... era necesario ingresar de nuevo el firmware a la placa con el cambio de periodo... entonces era tedidoso cada cierto tiempo estar ingresando el codigo a la base. |
- | display.setCursor(0, | + | |
- | display.print(" | + | |
- | display.print(*ntp_hours); | + | |
- | display.print(":" | + | |
- | display.print(*ntp_minutes); | + | |
- | display.print(":" | + | |
- | display.print(*ntp_seconds); | + | |
- | // state lights | + | **Ahora** |
- | display.setCursor(0, | + | |
- | syncNtptoTime(); | + | Circuito actualmente |
- | // stateFlowering(); | + | {{: |
- | stateVegetative(); | + | |
- | // update display | + | {{: |
- | display.display(); | + | |
- | delay(1000); | + | |
- | } | + | |
- | void firstSync() { | + | Ahora este hardware cuenta con un led ws2812B para indicar los diferentes estados del esp y un boton. |
- | // pointer update with what is in ntp | + | |
- | timeClient.update(); | + | |
- | ntp_hours = & | + | |
- | ntp_minutes = & | + | |
- | ntp_seconds = & | + | |
- | // first update ntp to time variables | + | |
- | time_hours = timeClient.getHours(); | + | |
- | time_minutes = timeClient.getMinutes(); | + | |
- | time_seconds = timeClient.getSeconds(); | + | |
- | // frist sync Ntp time to local time, get values from value pointers | + | |
- | setTime(*ntp_hours, | + | |
- | timeClient.end(); | + | |
- | } | + | |
- | void syncNtptoTime() { | + | Tenemos principalmente 6 colores que indican estados y acciones del circuito con respecto a determinados momentos. --- //[[johnnyalexandersepulveda@gmail.com|johnny]] 2020/07/13 09:04// |
- | | + | |
- | | + | |
- | if ( (minute() == 10 && second() == 58) || | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | ) { | + | |
- | timeClient.update(); | + | |
- | time_hours = timeClient.getHours(); | + | |
- | time_minutes = timeClient.getMinutes(); | + | |
- | time_seconds = timeClient.getSeconds(); | + | |
- | timeClient.end(); | + | |
- | | + | |
- | setTime(*ntp_hours, | + | |
- | delay(500); | + | |
- | } | + | |
- | } | + | |
- | void stateVegetative() { | + | cyan |
- | // 18 hours lights, 6 hours night | + | azul |
- | // they turn on 6 in the morning and turn off at the 12 last night | + | naranja |
- | if ( hour() < 6 ) { | + | magenta |
- | digitalWrite(lights, | + | |
- | stateLights = ' | + | |
- | } else { | + | |
- | digitalWrite(lights, | + | |
- | stateLights = ' | + | |
- | } | + | |
- | } | + | |
- | void stateFlowering() { | + | amarillo |
- | // 12 hours lights, 12 hours night | + | verde |
- | // a las 6 de la mañana se prenden y a las 6 de la tarde se apagan | + | |
- | if ( (hour() >= 6) && (hour() < 18) ) { | + | |
- | digitalWrite(lights, | + | |
- | stateLights = ' | + | |
- | } else { | + | |
- | digitalWrite(lights, | + | |
- | stateLights = ' | + | |
- | } | + | |
- | } | + | |
- | </ | + | rojo |
personas/johnny/proyectos/indoor_diy_autosostenible.txt · Última modificación: 2020/08/13 06:00 por kz