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:39] – kz | personas:johnny:proyectos:indoor_diy_autosostenible [2020/07/13 09:12] – kz | ||
---|---|---|---|
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 ====== | ||
- | < | + | 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...) |
- | /* Library used | + | 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. |
- | * https:// | + | |
- | * https:// | + | |
- | * https:// | + | |
- | * | + | |
- | * resources from sensor | + | |
- | * https://www.switchdoc.com/ | + | |
- | * | + | |
- | config NTP | + | |
- | this code take the time from server using NTP | + | |
- | https:// | + | |
- | !!! IMPORTANT | + | He dispuesto un extrator de 125v para sacar el aire caliente y regular la temperatura del indoor en la parte superior. Tambien arregle el espacio y le trabaje junto con mi tio para volverlo mejor. |
- | You need to adjust the UTC offset for your timezone in milliseconds. | + | |
- | Refer the list of UTC time offsets. Here are some examples for different timezones: | + | |
- | https:// | + | |
- | For UTC -5.00 : -5 * 60 * 60 : -18000 | + | ANTES |
- | 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 | + | AHORA |
- | #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 | + | {{: |
- | char stateLights = ' | + | |
- | // config NTP variables | + | 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. |
- | int time_hours = 0; | + | |
- | int time_minutes = 0; | + | |
- | int time_seconds = 0; | + | |
- | const int *ntp_hours, *ntp_minutes, | + | |
- | const long utcOffsetInSeconds = -18000; // colombia UTC -5 | + | |
- | char daysOfTheWeek[7][12] = { | + | |
- | " | + | |
- | }; | + | |
- | const char *ssid = " | + | {{: |
- | const char *pass = " | + | |
- | // Define NTP client to get time | + | {{: |
- | WiFiUDP ntpUDP; | + | |
- | NTPClient timeClient(ntpUDP, | + | |
- | // config display | + | En este cultivo tambien estuve experimentando y aprendiendo sobre las podas. En especial la fim y la apical. |
- | Adafruit_SSD1306 display(OLED_MOSI, | + | |
- | #if (SSD1306_LCDHEIGHT != 64) | + | |
- | //# | + | |
- | #endif | + | |
- | // define template function | + | {{: |
- | void firstSync(); | + | |
- | void syncNtptoTime(); | + | |
- | void stateVegetative(); | + | |
- | void stateFlowering(); | + | |
- | void setup() { | + | 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. |
- | // 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); | + | |
- | // | + | |
- | // | + | |
- | pinMode(lights, | + | |
- | } | + | |
- | void loop() | + | {{: |
- | display.clearDisplay(); | + | {{:personas:johnny:proyectos: |
- | display.setTextSize(0.5); | + | |
- | display.setTextColor(WHITE); | + | |
- | display.setCursor(0, | + | |
- | display.print(daysOfTheWeek[timeClient.getDay()]); | + | |
- | if (stateLights == ' | + | |
- | display.print(" | + | |
- | | + | |
- | display.print(" | + | |
- | | + | |
- | | + | |
- | display.setCursor(0, | + | |
- | // time library | + | |
- | display.print(" | + | |
- | display.print(hour()); | + | |
- | display.print(" | + | |
- | display.print(minute()); | + | |
- | display.print(" | + | |
- | display.print(second()); | + | |
- | // time ntp | + | Dadas las experimentaciones, |
- | display.setCursor(0,16); | + | |
- | display.print(" | + | |
- | display.print(*ntp_hours); | + | |
- | display.print(":" | + | |
- | display.print(*ntp_minutes); | + | |
- | display.print(":" | + | |
- | display.print(*ntp_seconds); | + | |
- | // state lights | + | 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. |
- | display.setCursor(0, | + | |
- | syncNtptoTime(); | + | ** Pasamos la placa base a baquela y actualizaciones y fixes en el código** |
- | // stateFlowering(); | + | |
- | stateVegetative(); | + | |
- | // update display | + | 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. |
- | display.display(); | + | |
- | delay(1000); | + | |
- | } | + | |
- | void firstSync() { | + | Antes |
- | // 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() | + | {{: |
- | // update local time from NTP server over get minutes and seconds | + | |
- | // from local time hardware | + | |
- | if ( (minute() == 10 && second() == 58) || | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | timeClient.update(); | + | |
- | time_hours = timeClient.getHours(); | + | |
- | time_minutes = timeClient.getMinutes(); | + | |
- | time_seconds = timeClient.getSeconds(); | + | |
- | timeClient.end(); | + | |
- | // TODO: how to update days, month and year ? | + | |
- | setTime(*ntp_hours, | + | |
- | delay(500); | + | |
- | | + | |
- | } | + | |
- | void stateVegetative() { | + | 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. |
- | // 18 hours lights, 6 hours night | + | |
- | // they turn on 6 in the morning and turn off at the 12 last night | + | |
- | if ( hour() < 6 ) { | + | |
- | digitalWrite(lights, | + | |
- | stateLights = ' | + | |
- | } else { | + | |
- | digitalWrite(lights, | + | |
- | stateLights = ' | + | |
- | } | + | |
- | } | + | |
- | void stateFlowering() { | + | 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... |
- | // 12 hours lights, 12 hours night | + | |
- | // a las 6 de la mañana | + | |
- | if ( (hour() >= 6) && (hour() < 18) ) { | + | |
- | digitalWrite(lights, | + | |
- | stateLights = ' | + | |
- | } else { | + | |
- | digitalWrite(lights, | + | |
- | stateLights = ' | + | |
- | } | + | |
- | } | + | |
- | </code> | + | 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. |
+ | |||
+ | 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. | ||
+ | |||
+ | **Ahora** | ||
+ | |||
+ | Circuito actualmente | ||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Ahora este hardware cuenta con un led ws2812B para indicar los diferentes estados del esp y un boton. | ||
+ | |||
+ | Tenemos principalmente 6 colores que indican estados y acciones del circuito con respecto a determinados momentos. --- // | ||
+ | |||
+ | cyan | ||
+ | azul | ||
+ | naranja | ||
+ | magenta | ||
+ | |||
+ | amarillo | ||
+ | verde | ||
+ | |||
+ | rojo | ||
personas/johnny/proyectos/indoor_diy_autosostenible.txt · Última modificación: 2020/08/13 06:00 por kz