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/09/15 20:39] kzpersonas:johnny:proyectos:indoor_diy_autosostenible [2020/03/15 18:05] kz
Línea 330: Línea 330:
  
  
 +====== Código para el control automatizado de las luces ======
 +
 +Este código posee dos funciones que segun el estado se la planta se pueden cambiar para vegetativo o floración. Es un proyecto en platformio
 +
 +<code c++>
 +/*
 +  Este código toma la hora de internet usando un servidor NTP y 
 +  enciende algo. Tomadpo de aqui https://lastminuteengineers.com/esp8266-ntp-server-date-time-tutorial/
 +
 +  !!! importante
 +  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
 +  For UTC +1.00 : 1 * 60 * 60 : 3600
 +  For UTC +0.00 : 0 * 60 * 60 : 0
 +
 +  here -> const long utcOffsetInSeconds = 3600;
 +*/
 +#include <Arduino.h>
 +#include <NTPClient.h>
 +#include <ESP8266WiFi.h>
 +#include <WiFiUdp.h>
 +
 +const char *ssid = "el nombre de la red";
 +const char *password = "el password de la red";
 +const long utcOffsetInSeconds = -18000; // colombia UTC -5
 +char daysOfTheWeek[7][12] = {
 +  "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
 +};
 +// Define NTP client to get time
 +WiFiUDP ntpUDP;
 +NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
 +int ledTrigger = D6;
 +
 +void setup() {
 +  Serial.begin(115200);
 +  WiFi.begin(ssid, password);
 +  while(WiFi.status() != WL_CONNECTED) {
 +    delay(500);
 +    Serial.print(".");
 +  }
 +  Serial.print("Wifi connected!");
 +  Serial.println("IP address: ");
 +  Serial.println(WiFi.localIP());  
 +  timeClient.begin();
 +  pinMode(LED_BUILTIN, OUTPUT);
 +  pinMode(ledTrigger, OUTPUT);
 +}
 +
 +void statusWIFI() {
 +  // cuando esta pegado a internet el status es 3
 +  // la idea de esto es que mande un color u otro si tiene internet o no
 +  Serial.print("Estatus wifi is: ");
 +  Serial.println(WiFi.status());
 +}
 +
 +void lucesVegetativo() {
 +  // 18 horas luz, 6 horas oscuridad
 +  int hours = timeClient.getHours();
 +  //  se prenden a las 6 de la mañana y se apagan a las 12 de la noche
 +  if ( hours < 6 ) {
 +    digitalWrite(ledTrigger, LOW);
 +    Serial.println("Luces OFF!");
 +  } else {
 +    digitalWrite(ledTrigger, HIGH);
 +    Serial.println("Luces ONN!");
 +  }
 +}
 +
 +void lucesFloracion() {
 +  // 12 horas luz, 12 horas oscuridad
 +  int hours = timeClient.getHours();
 +  //  a las 6 de la mañana se prenden y a las 6 de la tarde se apagan
 +  if ( (hours >= 6) && (hours < 18) ) {
 +    digitalWrite(ledTrigger, HIGH);
 +    Serial.println("Luces ONN!");
 +  } else {
 +    digitalWrite(ledTrigger, LOW);
 +    Serial.println("Luces OFF");
 +  }
 +}
 +
 +// the loop function runs over and over again forever
 +void loop() {
 +  timeClient.update();
 +  Serial.print(daysOfTheWeek[timeClient.getDay()]);
 +  Serial.print(", ");
 +  Serial.print(timeClient.getHours());
 +  Serial.print(":");
 +  Serial.print(timeClient.getMinutes());
 +  Serial.print(":");
 +  Serial.print(timeClient.getSeconds());
 +  Serial.println("");
 +  statusWIFI();
 +  //lucesVegetativo();
 +  lucesFloracion();
 +  delay(1000);
 +
 +  /*
 +  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)}
 +  digitalWrite(ledTrigger, HIGH);
 +  delay(1000);                       // wait for a second
 +  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
 +  digitalWrite(ledTrigger, LOW);
 +  delay(1000);                       // wait for a second
 +  */
 +}
 +</code>
 +
 +el platformio.ini
 +<code json>
 +;PlatformIO Project Configuration File
 +;
 +;   Build options: build flags, source filter
 +;   Upload options: custom upload port, speed and extra flags
 +;   Library options: dependencies, extra library storages
 +;   Advanced options: extra scripting
 +;
 +; Please visit documentation for the other options and examples
 +; https://docs.platformio.org/page/projectconf.html
 +
 +[env:d1_mini_lite]
 +platform = espressif8266
 +board = d1_mini_lite
 +framework = arduino
 +lib_deps = NTPClient
 +
 +</code>
 +
 +====== control de humedad y temperatura ======
 +
 +Se inicia de aqui [[https://create.arduino.cc/projecthub/Pedro52/arduino-capacitive-soil-moisture-sensor-diy-with-esp32-d7ad72|conectar sensor de humedad capacitivo]]
 +
 +{{:personas:johnny:proyectos:capacitivo.jpg?400|}}
 +
 +{{:personas:johnny:proyectos:photo4938261042715273252.jpg?400|}}
 +
 +<code c++> 
 +#include <Arduino.h>
 +
 +int sensorPin = A0;    // select the input pin for the potentiometer
 +int ledPin = D4;      // select the pin for the LED
 +int sensorValue = 0;  // variable to store the value coming from the sensor
 +
 +void setup() {
 +  // declare the ledPin as an OUTPUT:
 +  pinMode(ledPin, OUTPUT);
 +  Serial.begin(115200);
 +}
 +
 +void loop() {
 +  // read the value from the sensor:
 +  sensorValue = analogRead(sensorPin);
 +  Serial.println(sensorValue);
 +  // turn the ledPin on
 +  digitalWrite(ledPin, HIGH);
 +  // stop the program for <sensorValue> milliseconds:
 +  delay(sensorValue);
 +  // turn the ledPin off:
 +  digitalWrite(ledPin, LOW);
 +  // stop the program for for <sensorValue> milliseconds:
 +  delay(sensorValue);
 +}
 +
 +</code>
 +
 +<WRAP center round important 60%>
 +Sensor totalmente seco: 833
 +Sensor totalmente humedo: 482
 +</WRAP>
 +
 +====== actualizacion nov 3 2019 ======
 +
 +He creado una nueva versión del modulo que contiene un **capacitive moisture sensor** para medir la humedad en la tierra, un **module relay x 4** para controlar las luces y la ventilación. Para el ciclo solar de las luces estoy usando la libreria **time.h**, me di cuenta que es mejor usar sin el **timeAlarms.h** porque se pueden customizar mejor los ciclos de la luz y es mejor, o hasta ahora me funciona a mi asi.
 +
 +
 +----
 +{{:personas:johnny:proyectos:version-indoor-1.jpg?400|}}
 +
 +{{:personas:johnny:proyectos:version-indoor-3.jpg?400|}}
 +
 +{{:personas:johnny:proyectos:version-indoor-4.jpg?400|}}
 +
 +Mi abuelo me ha ayudado en la creación del indoor, una estructura de 90cm x 90cm x 1.5m. En su interior he añadido el DHT11 para "medir" la temperatura y humedad interna del lugar. Y a la planta mas grande he anclado en la tierra el sensor capcitivo.
 +
 +{{:personas:johnny:proyectos:indoor-build-and-module1.jpg?400|}}
 +{{:personas:johnny:proyectos:indoor-build-and-module2.jpg?400|}}
 +{{:personas:johnny:proyectos:indoor-build-and-module3.jpg?400|}}
 +{{:personas:johnny:proyectos:indoor-build-and-module4.jpg?400|}}
 +{{:personas:johnny:proyectos:indoor-build-and-module5.jpg?400|}}
 +{{:personas:johnny:proyectos:indoor-build-and-module6.jpg?400|}}
 +
 +[[https://gist.github.com/Kaziuz/ad3751c3b075d593cda2c111af3b242b|Link hacia el codigo del indoor]]
 +
 +
 +====== Actualización nov 9 2019 ======
 +
 +Hasta ahora la libreria time.h a funcionado muy bien, reemplazandome por completo un rtc.
 +
 +=== Los datos se puede ver en:===
 +
 +[[http://aqa.unloquer.org:8888/sources/1/dashboards/2?lower=now%28%29%20-%2015m|Enlace al influx]]
 +
 +====== Actualización nov 12 2019 ======
 +
 +Logro adjuntar a la trama de datos la humedad en la tierra de un sensor de humedad capacitivo.
 +
 +====== Actualización 1 diciembre 2019 ======
 +
 +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,  (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.
 +  - 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