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/11/13 03:15] kzpersonas:johnny:proyectos:indoor_diy_autosostenible [2020/07/13 09:12] kz
Línea 524: Línea 524:
 {{:personas:johnny:proyectos:indoor-build-and-module6.jpg?400|}} {{:personas:johnny:proyectos:indoor-build-and-module6.jpg?400|}}
  
-<code c++> +[[https://gist.github.com/Kaziuz/ad3751c3b075d593cda2c111af3b242b|Link hacia el codigo del indoor]]
- /* Librerias usadas +
- https://github.com/PaulStoffregen/Time +
- * https://github.com/PaulStoffregen/TimeAlarms +
- * https://learn.adafruit.com/dht/using-a-dhtxx-sensor +
- *  +
- * Recursos +
- * https://www.switchdoc.com/2018/11/tutorial-capacitive-moisture-sensor-grove/ +
-*/+
  
-// import libraries 
-#include <DHT.h> 
-#include <DHT_U.h> 
-#include <Time.h> 
-#include <SPI.h> 
-#include <Wire.h> 
-#include <Adafruit_GFX.h> 
-#include <Adafruit_SSD1306.h> 
-#include <ESP8266HTTPClient.h> 
-#include <ESP8266WiFi.h> 
  
-// defines and variables globals sensors +====== Actualización nov 9 2019 ======
-// dth11 +
-#define DHTPIN 4 // D2 +
-#define DHTTYPE DHT11 +
-#define HTTP_TIMEOUT 4000+
  
-// screen oled +Hasta ahora la libreria time.h a funcionado muy bien, reemplazandome por completo un rtc.
-#define OLED_MOSI 14  // D5 +
-#define OLED_CLK 16   // D0 +
-#define OLED_DC 13    // D7 +
-#define OLED_RESET 12 // D6 +
-#define OLED_CS 15    // D8+
  
-// lights- relay IN4 +=== Los datos se puede ver en:===
-int lights 2; +
  
-// ventilador - relay IN3 +[[http://aqa.unloquer.org:8888/sources/1/dashboards/2?lower=now%28%29%20-%2015m|Enlace al influx]]
-int air 0;+
  
-// capacitive sensor +====== Actualización nov 12 2019 ======
-const int waterValue 464; +
-int soilMoistureValue 0;+
  
-Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); +Logro adjuntar a la trama de datos la humedad en la tierra de un sensor de humedad capacitivo.
-DHT dht(DHTPIN, DHTTYPE);+
  
-void setup() { +====== Actualización 1 diciembre 2019 ======
-  Serial.begin(115200); +
-  display.begin(SSD1306_SWITCHCAPVCC); +
-  display.clearDisplay();  +
-  display.setTextSize(0.5);  +
-  display.setTextColor(WHITE); +
-  display.setCursor(0,0); +
-  Serial.println(); +
-  Serial.println(); +
-  // +
-  for(uint8_t t 4; t > 0; t--) { +
-    Serial.printf("[SETUP] BOOT WAIT %d...\r\n", t); +
-    Serial.flush(); +
-    delay(1000); +
-  } +
-  // +
-  display.setTextColor(WHITE);  +
-  display.setCursor(0,10);  +
-   +
-  // casa del negro +
-  // WiFi.begin("user", "pass"); +
-   +
-  while (WiFi.status() !WL_CONNECTED) { +
-    delay(500); +
-    display.println("UN/LOQUER - cultiva");  +
-    display.print("."); +
-  }+
  
-  display.display(); +Por alguna razón con el código que tengo aqui ... se presenta el problema de que el modulo funciona bien 5 o 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 
-  delay(3000); +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.
-  // H, M, S, D, M, A +
-  setTime(14,6,0,9,11,19); +
-  pinMode(lights, OUTPUT); +
-  pinMode(air, OUTPUT); +
-  dht.begin(); +
-}+
  
-void loop() { +*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.
-  display.clearDisplay(); +
-  display.setTextSize(0.5); +
-  display.setTextColor(WHITE); +
-  display.setCursor(0,0); +
-  display.print("time: ")+
-  display.print(hour()); +
-  display.print(":"); +
-  display.print(minute()); +
-  display.print(":"); +
-  display.print(second()); +
-  display.print(" "); +
-  display.setCursor(0,8);  +
-  // display alarms lights state +
-  lucesFloracion(); +
-  // display capacitive himudity   +
-  display.setCursor(0,16); +
-  soilMoistureValue = analogRead(A0); +
-  display.print("Soil moisture: "); +
-  display.println(soilMoistureValue);  +
-  delay(500); +
-  // display dht sensor +
-  display.setCursor(0,24); +
-  int h = dht.readHumidity(); +
-  int t = dht.readTemperature(); +
-  if (isnan(h) || isnan(t)) { +
-    display.println(F("Failed read dht!")); +
-    return; +
-  } +
-  display.print(F("Hum: ")); +
-  display.print(h); +
-  display.print(F(" %  Tem: ")); +
-  display.print(t); +
-  display.print(F(" C ")); +
-  display.println(""); +
-  // run air at inddor +
-  ventilacion(); +
-  display.display(); +
-  sendDataInflux(String(h), String(t), String(soilMoistureValue)); +
-}+
  
-void lucesVegetativo() { +*TODO*
-  // 18 horas luz, 6 horas oscuridad +
-  // se prenden a las 6 de la mañana y se apagan a las 12 de la noche +
-  if ( hour() < 6 ) { +
-    digitalWrite(lights, LOW); +
-    display.println("Veget Light OFF!"); +
-  } else { +
-    digitalWrite(lights, HIGH); +
-    display.println("Veget Light ONN!"); +
-  } +
-}+
  
-void lucesFloracion() { +  - *RAPIDO*: integrar al código actual al actualizacion con el servidor NTP 
-  // 12 horas luz12 horas oscuridad +  - 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) 
-  //  a las 6 de la mañana se prenden las de la tarde se apagan +  - pensar en una interfaz para pedir al usuario la programacion de la luz sea floración o vegetación o esquejes
-  if ( (hour() >= 6) && (hour() < 18) ) { +  - sacar una tarjetica en fritzing y pasarsela al brol o a ubercon el convertidor de la luz 
-    digitalWrite(lights, HIGH); +  - actualizar el firmware por medio de ota
-    display.println("Flor Light ONN!"); +
-  } else { +
-    digitalWrite(lightsLOW); +
-    display.println("Flor Light OFF"); +
-  +
-}+
  
-void ventilacion() { +====== Actualización 13 de julio 2020 ======
-  // se prende cada 15 min 1 min +
-  if ( (minute() == 1) || (minute() == 16) || (minute() == 46) || (minute() == 31) ) { +
-    digitalWrite(air, HIGH); +
-  } else { +
-    digitalWrite(air, LOW); +
-  } +
-}+
  
-String influxFrameString dht11_humidityString dht11_temperatureString soilCapacitiveSensor) { +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 humedadcalidad de la tierracalidad del agualummens necesariosetc...) 
-  const String SENSOR_ID = "DHT11_llanadas"; // Nombre del sensor en la plataformala 1 VEZ CAMBIAR !!!! +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.
-  const String STR_COMMA = ","; +
-  const String STR_SLASH = "/"; +
-  const String STR_DOT = "."; +
-  const String STR_COLON = ":"; +
-  const String STR_NULL = "NULL"; +
-  const String STR_ZERO = "0"; +
-  const String STR_SPACE = " "; +
-  +
-  // El primer dato en el squema de la DB es el id del sensor +
-  String frame = SENSOR_ID + STR_COMMA + "id=" + SENSOR_ID +  STR_SPACE; +
-  +
-  // Add GPS data +
-  frame += "lat="; +
-  frame += "6.2563143" + STR_COMMA; // coordenada GSP lat +
-  frame += "lng="; +
-  frame += "-75.5386472" + STR_COMMA; // coordenada lng lat +
-  frame += "altitude="; +
-  frame += STR_ZERO + STR_COMMA; +
-  frame += "course="; +
-  frame += STR_ZERO + STR_COMMA; +
-  frame += "speed="; +
-  frame += STR_ZERO + STR_COMMA; +
-  +
-  //Add DHT11 data +
-  //if +
-    frame += "humidity="; +
-    frame += dht11_humidity + STR_COMMA; +
-    frame += "temperature="; +
-    frame += dht11_temperature + STR_COMMA; +
-  // } else { +
-  //   frame += "humidity=" + STR_NULL + STR_COMMA + "temperature=" + STR_NULL + STR_COMMA; +
-  // }+
  
-  // ADD capacitive sensor data +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.
-  frame += "soil_capacitive="; +
-  frame += soilCapacitiveSensor + STR_COMMA; +
-     +
-  // Add Plantower data +
-    // if +
-    frame += "pm1="; +
-    frame += STR_ZERO + STR_COMMA; +
-    frame += "pm25="; +
-    frame += STR_ZERO + STR_COMMA; +
-    frame += "pm10="; +
-    frame += STR_ZERO; +
-  // } else { +
-  //   frame += "pm1=" + STR_NULL + STR_COMMA + "pm25=" + STR_NULL + STR_COMMA + "pm10=" + STR_NULL; +
-  // } +
-  +
-  return frame; +
-+
-  +
-// función que envía la trama de datos +
-void sendDataInflux ( String humidity, String temperature, String _soilCapacitiveSensor ) { +
-  // El post a la base de datos tiene una trama siguiente: +
-  // volker0001,id=volker0001 lat=6.268115,lng=-75.543407,altitude=1801.1,course=105.55,speed=0.00,humidity=37.00,temperature=25.00,pm1=22,pm25=31,pm10=32 +
-  // Para nuestro caso que SOLO es el envío de datos del dht_11 que es humedad y temperatura la trama es la siguiente +
-  // DHT11_llanadas, id=DHT11_llanadas, lat=6.2563143, lng=-75.5386472, altitude=0, course=0, speed=0, humidity=37.00, temperature=25.00, pm1=0, pm25=0, pm10=0 1434055562000000000  +
- if(WiFi.status() == 3) { +
-    HTTPClient http;  +
-    // _testsensorhumedad es el nombre de la DB donde se almacenan estos datos +
-    http.begin("http://aqa.unloquer.org:8086/write?db=_testsensorhumedad"); // endPoint final, '_testsensorhumedad' es el nombre de la base de datos +
-    http.setTimeout(HTTP_TIMEOUT); +
-    http.addHeader("Content-Type", "--data-binary");  +
  
-    // esto se debe de integrar con el soil capacitive sensor +ANTES
-    // String frame = influxFrame(humidity, temperature, _soilCapacitiveSensor); // Construimos el request POST +
-    String frame = influxFrame(humidity, temperature, _soilCapacitiveSensor); +
-    +
-    int httpCode = http.POST(frame); // Envíamos los datos haciendo un POST +
-    +
-    if(httpCode > 0) { +
-      String payload = http.getString(); +
-      Serial.println(payload); +
-      Serial.println("Envío de datos con exito!"); +
-    } else { +
-      Serial.print("[HTTP] failed, error;"); +
-      Serial.println(http.errorToString(httpCode).c_str()); +
-    } +
-     http.end(); +
-  } +
-    delay(60000); +
-+
-</code>+
  
 +{{:personas:johnny:proyectos:viejo-indoor.jpg?400|}}
  
-====== Actualización nov 9 2019 ======+AHORA
  
-Hasta ahora la libreria time.h a funcionado muy bien, reemplazandome por completo un rtc.+{{:personas:johnny:proyectos:nuevo-indoor.jpg?400|}}
  
-=== Los datos se puede ver en:===+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.
  
-[[http://aqa.unloquer.org:8888/sources/1/dashboards/2?lower=now%28%29%20-%2015m|Enlace al influx]]+{{:personas:johnny:proyectos:reflector1.jpg?400|}}
  
-====== Actualización nov 12 2019 ======+{{:personas:johnny:proyectos:reflector2.jpg?400|}}
  
-Logro adjuntar a la trama de datos la humedad en la tierra de un sensor de humedad capacitivo.+En este cultivo tambien estuve experimentando y aprendiendo sobre las podas. En especial la fim y la apical.
  
 +{{:personas:johnny:proyectos:podas.png?400|}}
  
-Tareas que faltan por hacer!!!+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.
  
-<WRAP center round alert 60%> +{{:personas:johnny:proyectos:poda-apical1.jpg?400|}} 
-En esta imlementación de POST hacia una base de datos, se cae el esp y hace que reinice +{{:personas:johnny:proyectos:poda-apical2.jpg?400|}}
-</WRAP>+
  
-  - 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) +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. 
-  - pensar en una interfaz para pedir al usuario la programacion de la luz sea floración o vegetación o esquejes+ 
-  sacar una tarjetica en fritzing pasarsela al brol o uber, con el convertidor de la luz +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. 
-  - actualizar el firmware por medio de ota+ 
 +** Pasamos la placa base a baquela y actualizaciones y fixes en el código** 
 + 
 +Primero hablaremos de la placaEntonces antes teniamos este hardware, 4 reles (de los cuales solo estoy usando 1) y una pantallita para ver las lecturas del dht11. 
 + 
 +Antes 
 + 
 +{{:personas:johnny:proyectos:placa-antes.jpg?400|}} 
 + 
 +Cuando teniamos este circuito. Disponiamos de problemas de interrumciones de corriente... porque como vemos los cables estan pegados con mocos mi casa veces se mueve el pisoocacionando que los cables se desconenten. 
 + 
 +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...  
 + 
 +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 
 +{{:personas:johnny:proyectos:dsc06738.jpg?400|}} 
 + 
 +{{:personas:johnny:proyectos:placa-antes-2.jpg?400|}} 
 + 
 +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. --- //[[johnnyalexandersepulveda@gmail.com|johnny]] 2020/07/13 09:04//
  
 +cyan
 +azul
 +naranja
 +magenta
  
- +amarillo 
 +verde
  
 +rojo
  
  
  
  
personas/johnny/proyectos/indoor_diy_autosostenible.txt · Última modificación: 2020/08/13 06:00 por kz