Disculpen si me equivoco, creo que elegí bien la categoría, quiero publicar algo que llevo algún tiempo desarrollando y ha tenido diferentes etapas, quiero compartir el código y alguna que otra foto a la comunidad, y también ayudar a quien este desarrollando algo parecido.
Con este proyector he utilizado un Arduino mega como unidad central, montado en una pcb de puntos (ya se no es lo ideal pero con algo se empieza).
Utilizo los sensores BH1750 (luxómetro) , un DHT22 (temperatura y humedad ambiental relativa del aire) y por ultimo el MQ135 (calidad de aire).
Empleo un HC-06 por el puerto SERIAL 1 con el que comunico el aparejo con una app hecha en mit inventor que también puedo compartir si quieren.
LCD 16x2 i2c.
5 relevos.
Una SD y lector de la misma.
zumbador.
RTC DS1307.
y por ultimo uso un ADS1115 de 16bit.
Algo muy interesante que les quiero compartir es una librería personalizada que uso para calcular el Déficit de presión de vapor. (dato practico para invernáculos, incubadoras o terrarios).
Calibrando de diferente manera las variables el sistema puede usarse para cualquier cosa.
En la próxima ampliación que quiero hacer es usar un segundo DHT22 para medir la temperatura exterior, agregar un emisor IR para controlar un aire acondicionado y un modulo MAX485 para enviar unos comandos básicos a un esclavo que va a controlar unos motores para cerrar y abrir unas persianas y/o cortinas.
Estoy trabajando en unos retoques en el código y lo publico, ya que es bastante largo y uso varias librerías, ¿debería publicarlo por partes ? ustedes que piensa.
Voy a mostrarles como se ve la APP.
Como este foro es de Arduino no puedo contarles muchos sobre la app, pero por privado me contactan.
Bien empecemos por el principio.
/*************** Librerias ************************/
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_Sensor.h>
#include <MQUnifiedsensor.h>
#include <Adafruit_ADS1X15.h>
#include <DHT.h>
#include <DHT_U.h>
#include <DPV.h>
#include <EEPROM.h>
#include <BH1750.h>
Uso todas librerías para ejecutar el programa creo que son todas bien conocidas no voy a darle mucha importancia a esto. Gracias a la configuración que utilizo puedo sacar mucho provecho del sensor MQ135 tanto por que esta con un ADC de 16 bit como y además las lecturas del DHT22 son bastante precisas, puedo utilizar sin problemas una corrección del valor resistivo, gracias a la vinculación de las variables de temperatura y humedad del aire, fácilmente con la librería <MQUnifiedsensor.h> la calibración ha sido una maravilla.
Voy a pasar por alto la configuración de la librerías ya que depende muchas cosas, y además en la web ahí información de sobra de las mismas.
Pero si les voy hacer mención de esta librería personal <DPV.h>
#include <DHT.h>
#include <DHT_U.h>
#include "DPV.h"
#define DHTPIN1 7
DPV dpv;
DHT dht1(DHTPIN1, DHT22);
float t1, h1, dpvValue;
void setup() {
Serial.begin(9600);
dht1.begin();
h1 = dht1.readHumidity();
t1 = dht1.readTemperature();
if (isnan(h1) || isnan(t1)) {
Serial.println("!Error, configuracion del DHT-22¡");
delay(10);
} else {
Serial.println("DHT-22 iniciado.");
delay(500);
}
}
void loop() {
h1 = dht1.readHumidity();
t1 = dht1.readTemperature();
dpvValue = dpv.calcularDPV(t1, h1);
Serial.println("----------------------");
Serial.print("Temperatura ambiental relativa: ");
Serial.print(t1);
Serial.println("°C");
Serial.print("Humedad ambiental relativa: ");
Serial.print(h1);
Serial.println(" %");
Serial.print("Deficit de presion de vapor: ");
Serial.print(dpvValue);
Serial.println(" kPa");
delay(2000);
}
Con la ayuda de la librería de adafruit <DHT_U.h> podemos ver fácilmente la implementación en el código es realmente fácil.
¿Por que diseñar una librería ?
Cuando comencé a trabajar con la automatización de un invernáculo, me encontré con la problemática que al tener poca incidencia del sol en el ambiente, especialmente en invierno, se implemento un temporizador, un foto control y luces artificiales para suplantar el sol. Esto con el tiempo lo reemplace con un Arduino nano, un RTC y un relevo para las luces. Esto me trajo a este mundo que es el Arduino, perdón si escribo mucho pero me gustaría contar la historia completa.
Con el tiempo las plantas estaban muy estresadas, note que el ambiente esta excesivamente caliente, y entonces comencé a monitorear el ambiente con un DHT11, es muy simple y con una precisión decente y mas que suficiente para empezar, había veces que la temperatura era elevada de mas de 30°C y estaban bien y otras era de 25°C y estaba super pachuchas lo que notaba es que se condicionaba con una humedad muy baja, mas que con temperaturas altas, entonces encontré el déficit de presión de vapor, dependiendo el mismo hace que todo tipo de planta habrá y cierre los estomas. Dependiendo exactamente si estamos cultivando tomates, u orquídeas, etc. Los valores convenientes de D.P.V. para cada tipo de planta son diferentes, pasa lo mismo para incubadoras o terrarios.
DVP.cpp
#include "DPV.h"
// Constructor
DPV::DPV() {}
// Función para convertir Celsius a Kelvin
float DPV::celsiusToKelvin(float celsius) {
return celsius + 273.15;
}
// Función para calcular la presión de vapor en saturación (es) en función de la temperatura (T)
float DPV::calcularPresionVaporSaturacion(float temperatura) {
float T = celsiusToKelvin(temperatura);
float es = 0.6108 * exp((17.27 * temperatura) / (temperatura + 237.3));
return es * 1000; // Convertir kPa a Pa
}
// Función para calcular el DPV en función de la temperatura (T) y la humedad relativa (RH)
float DPV::calcularDPV(float temperatura, float humedadRelativa) {
float es = calcularPresionVaporSaturacion(temperatura);
float ea = (humedadRelativa / 100.0) * es;
return es - ea;
}
DVP.h
#ifndef DPV_H
#define DPV_H
#include <Arduino.h>
class DPV {
public:
// Constructor
DPV();
// Función para calcular la presión de vapor en saturación (es) en función de la temperatura (T)
float calcularPresionVaporSaturacion(float temperatura);
// Función para calcular el DPV en función de la temperatura (T) y la humedad relativa (RH)
float calcularDPV(float temperatura, float humedadRelativa);
private:
// Función auxiliar para convertir Celsius a Kelvin
float celsiusToKelvin(float celsius);
};
#endif
Disculpen se ve muy feo.
229 pascales es el resultado de la vinculación 27.9°C y 38.9%
1492.51 ppm de dióxido de carbono por lo que estuve leyendo es una buena lectura. lo recomendable se estima por debajo de 1600 ppm, es muy interesante como el viento o la cantidad de personas dentro de una habitación hacen cambiar este valor.
El luxómetro todavía no se bien como interpretar la unidad que me devuelve, para mostrar en el lcd la he redondeado como int, ya que se estima que para el tipo de cultivo que estoy realizando es el sensor debería devolverme unos 80000 luxes, de haber un valor inferior no seria apto la ultima etapa de crecimiento de las plantas, aunque cuando son plántulas debería ser de unos 12000 luxes, este valor si lo tengo chequeado, paso a mostrar en la siguiente foto.
Como se puede ver para una plántula una luz led artificial debe darnos un valor similar a este, también ahí que tomar en cuenta que este sensor es mas sensible al espectro ultravioleta que el infrarrojo, permitiendo saber cuando nuestras luces led necesitan recambio, todavía no tengo refinado ningún dato de esto ya que hace poco estoy recopilando con una SD y la vida útil de los led son muy largas. Pero en teoría, dejan de servir mucho antes de que se rompan, como son luces especiales para cultivos, todos los tipos tienen este problema, desde las de vapor de sodio o led full espectro. El haz ultravioleta al ser de alta frecuencia tiende a disiparse antes que el infrarrojo, y a la vez es mas importante, en la mayoría de los cultivos que necesitan alta luminiscencia. También es muy importante la distancia de nuestro sensor a la fuente de luz, nos hará variar abismalmente el valor. La distancia debe ser similar a la que están las plantas para tener datos comparables.
Durante estos años la vida útil de mis luces la determinaba a partir del ritmo de crecimiento de las plantas y un aproximado de horas de uso que tenían, en base a la duración dada por el fabricante, en un 70%, luego de eso las recambiaba, y era abismal el efecto que surtían en las plantas, estoy ansioso por documentar el proceso.
Hola, espero que les haya gustado el tema, apareció el primer problema en el sistema, jajjaaj
Les cuento, el sensor BH1750 estuve leyendo que puede medir hasta 65535 LUX, creo que no sirve para medir el stress máximo de luminiscencia, si para las etapas de germinación y vegetación , pero no de fructificación o floración.
Me pregunto si alguien podria ayudarme a buscar un mejor sensor. El rango teórico máximo debería ser de 120000 aproximadamente, ya que todos sabemos que en la realidad ahí muchos factores intervinientes.
Tal vez exista algun lente para ampliar este rango de trabajo, no se lo que digo pero imagino la función de un lente de sol, algo que minimice al 50% la llegada de la luz, pero tendría que tener mucho cuidado de que tipo de luz deja pasar, ya que si no mide UV no sirve para este propósito específico.
También tal vez lo que busco es muy caro y tendré que conformarme jaajajja.
Revisa la hoja de datos del BH1750 porque puede medir hasta 100.000 lx cambiando un registro.
- Adjustable measurement result for influence of optical window (It is possible to detect min. 0.11 lx, max. 100000 lx by using this function.)
Igual quedaría corto pero se arrima un poco más.
Por otro lado, el MAX44007 llega casi a 105.000 lx.
El MAX44009EDT+ llega a 188.000 lx y la buena noticia es que hay librería disponible.
En ebay hay un modulito que sale cerca de 10 dólares.
GRACIAS, cuando dices registro a que te refieres, cambiando una resistencia? o el registro desde la librería?
Voy a investigar ese modulo para próximas ampliaciones lo usare, jeje
Revisa la hoja de datos del BH1750. ![]()
Cuando te comunicas con el dispositivo lo haces en forma serial, I2C, SPI a través de registros de memoria. Cada registro puede ser de lectura, escritura o de lectura/escritura.
Entonces mirando la librería entenderás mejor todo esto. Debes consultar la hoja de datos y la librería y verás la luz.
haaaaa, gracias, como siempre vos me explicas esas boludeces jajja, como aprendi solo desconosco mucho vocabulario.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.






