Herramientas de usuario

Herramientas del sitio


personas:johnny:proyectos:indoor_diy_autosostenible

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
Próxima revisiónAmbos lados, revisión siguiente
personas:johnny:proyectos:indoor_diy_autosostenible [2019/12/01 07:37] kzpersonas: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 de que el modulo funciona bien 5 o 6 dias y despues deja de funcionar bien... no apagando la luz cuando debe de estar apagada o viceversadejando la luz prendida cuando debe de estar apagada. El problema es que solo se fija una vez el tiempo 
-  - En esta imlementación de POST hacia una base de datos, se cae el esp y hace que reinice: HECHO. esto era ocasionado en el #define TIME_OUT+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 esa parte que necesito de upayakuwasi y las alarmas)   - integrar una web en la flash para programar la fecha del rtc digital time.h,  (integrar esa parte que necesito de upayakuwasi y las alarmas)
   - 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 de que el modulo funciona bien 5 o 6 dias despues deja de funcionar bien... no apagando la luz cuando debe de estar apagada o viceversa, dejando la luz prendida cuando debe de estar apagada. El problema es que solo se fija una vez el tiempo +He dispuesto un extrator de 125v para sacar el aire caliente regular la temperatura del indoor en la parte superiorTambien arregle el espacio y le trabaje junto con mi tio para volverlo mejor.
-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.+ANTES 
 + 
 +{{:personas:johnny:proyectos:viejo-indoor.jpg?400|}} 
 + 
 +AHORA 
 + 
 +{{:personas:johnny:proyectos:nuevo-indoor.jpg?400|}} 
 + 
 +Tambien mi tio me ayudo a construir un reflector para adaptarle hasta 6 bombillos a este mismoEste cambio ayudo mucho a las plantas pero tambien afecto bastante otros factores que detallaremos mas adelante. 
 + 
 +{{:personas:johnny:proyectos:reflector1.jpg?400|}} 
 + 
 +{{:personas:johnny:proyectos:reflector2.jpg?400|}}
  
-<code> +En este cultivo tambien estuve experimentando y aprendiendo sobre las podasEn especial la fim y la apical.
-/* Library used +
- * https://github.com/PaulStoffregen/Time +
- * https://github.com/PaulStoffregen/TimeAlarms +
- * https://learn.adafruit.com/dht/using-a-dhtxx-sensor +
- *  +
- * resources from sensor +
- * https://www.switchdoc.com/2018/11/tutorial-capacitive-moisture-sensor-grove/ +
- *  +
-  config NTP +
-  this code take the time from server using NTP  +
-  https://lastminuteengineers.com/esp8266-ntp-server-date-time-tutorial/+
  
-  !!! IMPORTANT +{{:personas:johnny:proyectos:podas.png?400|}}
-  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://upload.wikimedia.org/wikipedia/commons/8/88/World_Time_Zones_Map.png+
  
-  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> +{{:personas:johnny:proyectos:poda-apical1.jpg?400|}} 
-#include <NTPClient.h> +{{:personas:johnny:proyectos:poda-apical2.jpg?400|}}
-#include <DHT.h> +
-#include <Time.h> +
-#include <SPI.h> +
-#include <Wire.h> +
-#include <Adafruit_GFX.h> +
-#include <Adafruit_SSD1306.h> +
-#include <ESP8266HTTPClient.h> +
-#include <ESP8266WiFi.h> +
-#include <WiFiUdp.h> +
-#include <string.h>+
  
-// pin out oled ssd1306 +Dadas las experimentaciones, la planta desarrollo un brazo mas grande que el otro. Tambien se observa como queda la cicatriz del corte, pero la planta a medida que pasa el tiempo se va curando.
-#define OLED_MOSI 14   //D5 +
-#define OLED_CLK 16    //D0 +
-#define OLED_DC 13     //D7 +
-#define OLED_CS 15     //D6 +
-#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 = 'F';+
  
-// 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, *ntp_minutes, *ntp_seconds; +
-const long utcOffsetInSeconds = -18000; // colombia UTC -5 +
-char daysOfTheWeek[7][12] = { +
-  "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" +
-};+
  
-const char *ssid = "TP-LINK_Extender_C464C2"; +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 = "alex1988alex";+
  
-// Define NTP client to get time +Antes
-WiFiUDP ntpUDP; +
-NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);+
  
-// config display +{{:personas:johnny:proyectos:placa-antes.jpg?400|}}
-Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); +
-#if (SSD1306_LCDHEIGHT != 64) +
-//#error("Height incorrect, please fix Adafruit_SH1106.h!"); +
-#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,time_minutes,time_seconds,30,11,19); +
-  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,10); +
-  display.println("Init ... "); +
-  display.display(); +
-  delay(1000); +
-  while (WiFi.status() != WL_CONNECTED) { +
-    delay(500); +
-    display.clearDisplay(); +
-    display.setTextSize(1); +
-    display.setCursor(0,10); +
-    display.setTextColor(BLACK, WHITE); +
-    display.println("connecting wifi "); +
-    display.print("."); +
-    display.display(); +
-  } +
-  display.clearDisplay(); +
-  display.setTextSize(1); +
-  display.setCursor(0,10); +
-  display.setTextColor(WHITE); +
-  display.println("Wifi connected"); +
-  display.println(WiFi.localIP()); +
-  display.display(); +
-  timeClient.begin(); +
-  delay(5000); +
-  display.clearDisplay(); +
-  display.setTextSize(1); +
-  display.setTextColor(WHITE); +
-  display.setCursor(0,10); +
-  display.println("first sync NTP to Time hardware..."); +
-  display.display(); +
-  firstSync(); +
-  delay(5000); +
-  //Serial.print(WiFi.localIP());   +
-  //pinMode(ledTrigger, OUTPUT); +
-  pinMode(lights, OUTPUT); +
-}+
  
-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,0); +
-  display.print(daysOfTheWeek[timeClient.getDay()]); +
-  if (stateLights == 'V') { +
-    display.print(" | lights Onn"); +
-  } else { +
-    display.print(" | lights Off"); +
-  } +
-  display.println(); +
-  display.setCursor(0,8); +
-  // time library +
-  display.print("rtc d: "); +
-  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,16); +
-  display.print("last sync: "); +
-  display.print(*ntp_hours); +
-  display.print(":"); +
-  display.print(*ntp_minutes); +
-  display.print(":"); +
-  display.print(*ntp_seconds);+
  
-  // state lights +**Ahora**
-  display.setCursor(0,24);+
  
-  syncNtptoTime(); +Circuito actualmente 
-  // stateFlowering(); +{{:personas:johnny:proyectos:dsc06738.jpg?400|}}
-  stateVegetative();+
  
-  // update display +{{:personas:johnny:proyectos:placa-antes-2.jpg?400|}}
-  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 = &time_hours; +
-  ntp_minutes = &time_minutes; +
-  ntp_seconds = &time_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,*ntp_minutes,*ntp_seconds,30,11,19); +
-  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//
-  // update local time from NTP server over get minutes and seconds +
-  // from local time hardware +
-  if ( (minute() == 10 && second() == 58) ||  +
-       (minute() == 20 && second() == 58) || +
-       (minute() == 30 && second() == 58) || +
-       (minute() == 40 && second() == 58) || +
-       (minute() == 50 && 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,*ntp_minutes,*ntp_seconds,30,11,19); +
-    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, LOW); +
-    stateLights = 'F'; +
-  } else { +
-    digitalWrite(lights, HIGH); +
-    stateLights = 'V'; +
-  } +
-}+
  
-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, HIGH); +
-    stateLights = 'V'; +
-  } else { +
-    digitalWrite(lights, LOW); +
-    stateLights = 'F'; +
-  } +
-}+
  
-</code>+rojo
  
  
  
  
personas/johnny/proyectos/indoor_diy_autosostenible.txt · Última modificación: 2020/08/13 06:00 por kz