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/11/13 06:34] – kz | personas:johnny:proyectos:indoor_diy_autosostenible [2020/07/13 09:12] – kz | ||
---|---|---|---|
Línea 524: | Línea 524: | ||
{{: | {{: | ||
- | <code c++> | + | [[https://gist.github.com/ |
- | /* Librerias usadas | + | |
- | | + | |
- | * https://github.com/PaulStoffregen/ | + | |
- | * https:// | + | |
- | * | + | |
- | * Recursos | + | |
- | * https:// | + | |
- | */ | + | |
- | // import libraries | ||
- | #include < | ||
- | #include < | ||
- | #include < | ||
- | #include < | ||
- | #include < | ||
- | #include < | ||
- | #include < | ||
- | #include < | ||
- | #include < | ||
- | // 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 | + | |
- | // ventilador - relay IN3 | + | [[http://aqa.unloquer.org: |
- | int air = 0; | + | |
- | // capacitive sensor | + | ====== Actualización nov 12 2019 ====== |
- | const int waterValue | + | |
- | int soilMoistureValue | + | |
- | Adafruit_SSD1306 display(OLED_MOSI, | + | 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, | + | |
- | Serial.println(); | + | |
- | Serial.println(); | + | |
- | // | + | |
- | for(uint8_t t = 4; t > 0; t--) { | + | |
- | Serial.printf(" | + | |
- | Serial.flush(); | + | |
- | delay(1000); | + | |
- | } | + | |
- | // | + | |
- | display.setTextColor(WHITE); | + | |
- | display.setCursor(0, | + | |
- | + | ||
- | // casa del negro | + | |
- | // WiFi.begin(" | + | |
- | + | ||
- | while (WiFi.status() != WL_CONNECTED) { | + | |
- | delay(500); | + | |
- | display.println(" | + | |
- | 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 6 dias y 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 |
- | 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, | + | |
- | pinMode(lights, | + | |
- | pinMode(air, | + | |
- | dht.begin(); | + | |
- | } | + | |
- | void loop() { | + | *Solución: *Se usan las librerias NTP y Time simultaneamente... en resumen se fija al inicio el tiempo local (libreria |
- | display.clearDisplay(); | + | |
- | display.setTextSize(0.5); | + | |
- | display.setTextColor(WHITE); | + | |
- | display.setCursor(0, | + | |
- | display.print(" | + | |
- | display.print(hour()); | + | |
- | display.print(":" | + | |
- | display.print(minute()); | + | |
- | display.print(":" | + | |
- | display.print(second()); | + | |
- | display.print(" | + | |
- | display.setCursor(0, | + | |
- | // display alarms lights state | + | |
- | lucesFloracion(); | + | |
- | // display capacitive himudity | + | |
- | display.setCursor(0, | + | |
- | soilMoistureValue = analogRead(A0); | + | |
- | display.print(" | + | |
- | display.println(soilMoistureValue); | + | |
- | delay(500); | + | |
- | // display dht sensor | + | |
- | display.setCursor(0, | + | |
- | int h = dht.readHumidity(); | + | |
- | int t = dht.readTemperature(); | + | |
- | if (isnan(h) || isnan(t)) { | + | |
- | display.println(F(" | + | |
- | return; | + | |
- | } | + | |
- | display.print(F(" | + | |
- | display.print(h); | + | |
- | display.print(F(" | + | |
- | display.print(t); | + | |
- | display.print(F(" | + | |
- | display.println("" | + | |
- | // run air at inddor | + | |
- | ventilacion(); | + | |
- | display.display(); | + | |
- | sendDataInflux(String(h), | + | |
- | } | + | |
- | 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, | + | |
- | display.println(" | + | |
- | } else { | + | |
- | digitalWrite(lights, | + | |
- | display.println(" | + | |
- | } | + | |
- | } | + | |
- | void lucesFloracion() { | + | - *RAPIDO*: integrar al código actual al actualizacion con el servidor NTP |
- | | + | |
- | // a las 6 de la mañana se prenden | + | - pensar en una interfaz para pedir al usuario la programacion |
- | if ( (hour() >= 6) && (hour() < 18) ) { | + | |
- | digitalWrite(lights, | + | |
- | display.println(" | + | |
- | | + | |
- | digitalWrite(lights, LOW); | + | |
- | display.println(" | + | |
- | | + | |
- | } | + | |
- | void ventilacion() { | + | ====== |
- | // se prende cada 15 min 1 min | + | |
- | if ( (minute() | + | |
- | digitalWrite(air, | + | |
- | } else { | + | |
- | digitalWrite(air, | + | |
- | } | + | |
- | } | + | |
- | String influxFrame( String dht11_humidity, String dht11_temperature, String 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 humedad, calidad de la tierra, calidad |
- | const String SENSOR_ID = " | + | Entonces antes de seguir con el codigo y el prototipo |
- | const String STR_COMMA = ","; | + | |
- | const String STR_SLASH = "/"; | + | |
- | const String STR_DOT = "."; | + | |
- | const String STR_COLON = ":"; | + | |
- | const String STR_NULL = " | + | |
- | const String STR_ZERO = " | + | |
- | const String STR_SPACE = " "; | + | |
- | + | ||
- | // El primer dato en el squema | + | |
- | String frame = SENSOR_ID + STR_COMMA + " | + | |
- | + | ||
- | // Add GPS data | + | |
- | frame += " | + | |
- | frame += "6.2563143" | + | |
- | frame += " | + | |
- | frame += " | + | |
- | frame += " | + | |
- | frame += STR_ZERO + STR_COMMA; | + | |
- | frame += " | + | |
- | frame += STR_ZERO + STR_COMMA; | + | |
- | frame += " | + | |
- | frame += STR_ZERO + STR_COMMA; | + | |
- | + | ||
- | //Add DHT11 data | + | |
- | //if | + | |
- | frame += " | + | |
- | frame += dht11_humidity + STR_COMMA; | + | |
- | frame += " | + | |
- | frame += dht11_temperature + STR_COMMA; | + | |
- | // } else { | + | |
- | // frame += " | + | |
- | // } | + | |
- | // ADD capacitive sensor data | + | He dispuesto un extrator |
- | frame += " | + | |
- | frame += soilCapacitiveSensor + STR_COMMA; | + | |
- | + | ||
- | // Add Plantower data | + | |
- | // if | + | |
- | frame += " | + | |
- | frame += STR_ZERO + STR_COMMA; | + | |
- | frame += " | + | |
- | frame += STR_ZERO + STR_COMMA; | + | |
- | frame += " | + | |
- | frame += STR_ZERO; | + | |
- | // } else { | + | |
- | // frame += " | + | |
- | // } | + | |
- | + | ||
- | return frame; | + | |
- | } | + | |
- | + | ||
- | // función que envía la trama de datos | + | |
- | void sendDataInflux ( String humidity, String temperature, | + | |
- | // El post a la base de datos tiene una trama siguiente: | + | |
- | // volker0001, | + | |
- | // Para nuestro caso que SOLO es el envío de datos del dht_11 que es humedad | + | |
- | // DHT11_llanadas, | + | |
- | | + | |
- | HTTPClient http; | + | |
- | // _testsensorhumedad es el nombre de la DB donde se almacenan estos datos | + | |
- | http.begin(" | + | |
- | http.setTimeout(HTTP_TIMEOUT); | + | |
- | http.addHeader(" | + | |
- | // esto se debe de integrar con el soil capacitive sensor | + | ANTES |
- | // String frame = influxFrame(humidity, | + | |
- | String frame = influxFrame(humidity, | + | |
- | + | ||
- | int httpCode = http.POST(frame); | + | |
- | + | ||
- | if(httpCode > 0) { | + | |
- | String payload = http.getString(); | + | |
- | Serial.println(payload); | + | |
- | Serial.println(" | + | |
- | } else { | + | |
- | Serial.print(" | + | |
- | Serial.println(http.errorToString(httpCode).c_str()); | + | |
- | } | + | |
- | | + | |
- | } | + | |
- | delay(60000); | + | |
- | } | + | |
- | </ | + | |
+ | {{: | ||
- | ====== Actualización nov 9 2019 ====== | + | AHORA |
- | Hasta ahora la libreria time.h a funcionado muy bien, reemplazandome por completo un rtc. | + | {{: |
- | === 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:// | + | {{:personas:johnny: |
- | ====== Actualización nov 12 2019 ====== | + | {{: |
- | 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 |
+ | {{: | ||
- | Tareas | + | 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%> | + | {{: |
- | En esta imlementación de POST hacia una base de datos, se cae el esp y hace que reinice | + | {{: |
- | </ | + | |
- | - Enviar trama de datos al influx: HECHO | + | Dadas las experimentaciones, |
- | - integrar una web en la flash para programar | + | |
- | - pensar en una interfaz para pedir al usuario | + | 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 |
- | - sacar una tarjetica en fritzing | + | |
- | - actualizar | + | ** Pasamos |
+ | |||
+ | Primero hablaremos | ||
+ | |||
+ | Antes | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 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. | ||
+ | |||
+ | 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 | ||
+ | |||
+ | **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