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/03 13:58] – [actualizacion nov 3 2019] kz | personas:johnny:proyectos:indoor_diy_autosostenible [2020/03/15 18:05] – kz | ||
---|---|---|---|
Línea 524: | Línea 524: | ||
{{: | {{: | ||
- | Tareas que faltan por hacer!!! | + | [[https:// |
- | - Íntegrar el envío de datos al influx deñ dth11 + el capasitive sensor PRIORIDAD!!! | ||
- | - integrar una web en la flash para programar la fecha del rtc digital 8-) **time.h** (integrar esa parte que necesito de upayakuwasi y las alarmas) | ||
+ | ====== Actualización nov 9 2019 ====== | ||
- | <code c++> | + | Hasta ahora la libreria time.h a funcionado muy bien, reemplazandome por completo un rtc. |
- | /* Librerias usadas | + | |
- | * https:// | + | |
- | * https:// | + | |
- | * https:// | + | |
- | * | + | |
- | * Recursos | + | |
- | * https:// | + | |
- | */ | + | |
- | // import libraries | + | === Los datos se puede ver en:=== |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
+ | [[http:// | ||
- | // defines and variables globals sensors | + | ====== Actualización nov 12 2019 ====== |
- | // dth11 | + | |
- | #define DHTPIN 4 // D2 | + | |
- | #define DHTTYPE DHT11 | + | |
- | // screen oled | + | Logro adjuntar a la trama de datos la humedad en la tierra de un sensor de humedad capacitivo. |
- | #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 | + | |
- | #define HTTP_TIMEOUT 1000 * 60 // cada minuto | + | ====== |
- | + | ||
- | // lights- relay IN4 | + | |
- | int lights | + | |
- | + | ||
- | // ventilador - relay IN3 | + | |
- | int air = D3; | + | |
- | + | ||
- | // capacitive sensor | + | |
- | const int airValue | + | |
- | const int waterValue | + | |
- | const float intervals | + | |
- | int soilMoistureValue | + | |
- | + | ||
- | Adafruit_SSD1306 display(OLED_MOSI, | + | |
- | + | ||
- | #if (SSD1306_LCDHEIGHT != 64) | + | |
- | # | + | |
- | #endif | + | |
- | + | ||
- | DHT dht(DHTPIN, DHTTYPE); | + | |
- | + | ||
- | void setup() { | + | |
- | 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, | + | |
- | display.println(" | + | |
- | display.display(); | + | |
- | delay(3000); | + | |
- | // | + | |
- | setTime(16, | + | |
- | pinMode(lights, | + | |
- | pinMode(air, | + | |
- | dht.begin(); | + | |
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | 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); | + | |
- | if(soilMoistureValue > waterValue && soilMoistureValue < (waterValue + intervals)) { | + | |
- | display.print(" | + | |
- | display.println(soilMoistureValue); | + | |
- | delay(500); | + | |
- | } else if (soilMoistureValue < airValue && soilMoistureValue > (airValue - intervals)) { | + | |
- | 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(); | + | |
- | // sendDataInflux(String(h), | + | |
- | display.display(); | + | |
- | delay(1000); | + | |
- | } | + | |
- | + | ||
- | void lucesVegetativo() { | + | |
- | // 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() { | + | |
- | // 12 horas luz, 12 horas oscuridad | + | |
- | // 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, | + | |
- | display.println(" | + | |
- | } else { | + | |
- | digitalWrite(lights, | + | |
- | display.println(" | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | void ventilacion() { | + | |
- | // se prende cada 15 min 1 min | + | |
- | if ( (minute() == 0) || (minute() == 15) || (minute() == 45) || (minute() == 30) ) { | + | |
- | digitalWrite(air, | + | |
- | } else { | + | |
- | digitalWrite(air, | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | String influxFrame( String dht11_humidity, | + | |
- | const String SENSOR_ID = " | + | |
- | 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 de la DB es el id del sensor | + | |
- | String frame = SENSOR_ID + STR_COMMA + " | + | |
- | + | ||
- | // Add GPS data | + | |
- | frame += " | + | |
- | frame += " | + | |
- | 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; | + | |
- | frame += " | + | |
- | frame += soilCapacitiveSensor + STR_COMMA; | + | |
- | + | ||
- | 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 y temperatura la trama es la siguiente | + | |
- | // DHT11_llanadas, | + | |
- | */ | + | |
- | + | ||
- | HTTPClient http; | + | |
- | // _testsensorhumedad es el nombre de la DB donde se almacenan estos datos | + | |
- | http.begin(" | + | |
- | http.setTimeout(HTTP_TIMEOUT); | + | |
- | http.addHeader(" | + | |
- | + | ||
- | String frame = influxFrame(humidity, | + | |
- | + | ||
- | int httpCode | + | |
- | + | ||
- | if(httpCode > 0) { | + | |
- | String payload | + | |
- | Serial.println(payload); | + | |
- | Serial.println(" | + | |
- | } else { | + | |
- | Serial.print(" | + | |
- | Serial.println(http.errorToString(httpCode).c_str()); | + | |
- | } | + | |
- | + | ||
- | http.end(); | + | |
- | delay(60000); | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | + | ||
+ | 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 | ||
+ | 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* | ||
+ | - *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, | ||
+ | - 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 y pasarsela al brol o a uber, con el convertidor de la luz | ||
+ | - actualizar el firmware por medio de ota | ||
personas/johnny/proyectos/indoor_diy_autosostenible.txt · Última modificación: 2020/08/13 06:00 por kz