#include <dht.h>
#include <DHT_U.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <MQUnifiedsensor.h>
LiquidCrystal_I2C lcd(0x27,16,2); // lcd es un nombre que yo le doy
int cuenta_T=0;
int cuenta_H=0;
int pin_s_HT=6; // PINT QUE CONECTE La señaL sensor temp y humedad//
int pinLED = 9; // Pin rojo digital del LED para niveles amoniaco
int pinMQ2 = A0; // Pin analógico del sensor MQ-2
int pinLED2 =11; // pin verde para temperatura del estanque peces.
int relay=6; // con respecto al rele
OneWire oneWire(2); // para sensor DS18B20
DallasTemperature sensor(&oneWire);
const float tempDallas_min=20;
const float tempDallas_max=30;
const float temp_min=18; //temperatura minima
const float temp_max=30; //temperatura maxima
DHT HyT(pin_s_HT, DHT22); // hyt es un nombre que uno decide poner//
// Configuración del sensor MQ-2
#define Board ("Arduino UNO")
#define Voltage_Resolution (5)
#define ADC_Bit_Resolution (10)
#define RatioMQ2CleanAir (9.83) // Ratio del MQ-2 en aire limpio
MQUnifiedsensor MQ2(Board, Voltage_Resolution, ADC_Bit_Resolution, pinMQ2, "MQ-2");
// Configuración del relé
unsigned long DURACION = 10000;
unsigned long T_Tiempo;
void setup() {
// put your setup code here, to run once:
pinMode(pinLED, OUTPUT);
pinMode(pinLED2, OUTPUT);
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW); // Inicialmente apagado
Serial.begin(9600);
HyT.begin();
Serial.println("sensor de humedad inicializado");
delay(2000);
lcd.init(); // llamar a la pantalla
Wire.begin();
lcd.backlight();
lcd.clear(); //limpia la pantalla//
lcd.setCursor(0,0);
lcd.print("LECTURA DE LOS SENSORES ");
delay (2000);
lcd.clear();
// Inicialización del sensor Dallas
sensor.begin();
// Inicialización del sensor MQ-2
MQ2.setRegressionMethod(1);
MQ2.setA(574.25); MQ2.setB(-2.222);
MQ2.init();
Serial.print("Calibrando MQ-2...");
float calcR0 = 0;
for (int i = 1; i <= 10; i++) {
MQ2.update();
calcR0 += MQ2.calibrate(RatioMQ2CleanAir);
Serial.print(".");
}
MQ2.setR0(calcR0 / 10);
Serial.println("¡Calibración completa!");
if (isinf(calcR0) || calcR0 == 0) {
Serial.println("Error de conexión o valor de R0 fuera de rango.");
while (1);
}
T_Tiempo = millis() + DURACION; // Configuración inicial del tiempo para el relé
}
void loop() {
// put your main code here, to run repeatedly:
float temp,humedad, tempDallas;
temp=HyT.readTemperature();
humedad=HyT.readHumidity();
sensor.requestTemperatures();
tempDallas = sensor.getTempCByIndex(0);
// Lectura del sensor MQ-2
MQ2.update();
float amoniaco = MQ2.readSensor();
if (isnan(temp)||isnan(humedad))
{
Serial.println("Error en la Lectura");
delay(2000);
}
else{
Serial.print("temperatura ºC");
Serial.println(temp);
Serial.print("Humedad Relativa %");
Serial.println(humedad);
delay(5000);
Serial.print("Temp Dallas ºC ");
Serial.println(tempDallas);
Serial.print("Nivel de amoníaco");
Serial.println(amoniaco);
}
//VISUALIZACION EN LA PANTALLA LCD//
lcd.setCursor(0,0);
lcd.print("TEMPERATURA ºC"); //imprimir que diga TEMPERATURA//
lcd.setCursor(6,1); // escribiendo en la columna 6 fila 1//
lcd.print(temp); // imprimiendo el valor de la variable primera
delay(3000); // esperar un segundo//
cuenta_T=cuenta_T+1; // se le suma 1 a la variables//
lcd.clear(); //limpia la pantalla//
lcd.setCursor(0,0);
lcd.print("HUMEDAD % "); //imprimir que diga HUMEDAD//
lcd.setCursor(6,1); // escribiendo en la columna 6 fila 1//
lcd.print(humedad); // imprimiendo el valor de la variable primera
delay(3000); // esperar un segundo//
cuenta_H=cuenta_H+1; // se le suma 1 a la variables//
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp Dallas ºC");
lcd.setCursor(6, 1);
lcd.print(tempDallas);
delay(3000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Amoníaco: ");
lcd.print(amoniaco);
delay(3000);
if (tempDallas < tempDallas_min || tempDallas > tempDallas_max) { //fuera del rango temp estanque
digitalWrite(pinLED2, HIGH);//led encendido
} else {
digitalWrite(pinLED2, LOW); // led apagado
}
if (amoniaco > 25) { //CAMBIAR EL NUMERO DE PARAMETRO//
digitalWrite(pinLED, HIGH);//led rojo encendido
} else
digitalWrite(pinLED, LOW); // led rojo apagado
{
// Control del relé con temporizador
if (millis() >= T_Tiempo) {
digitalWrite(relay, HIGH); // Activar el relé
T_Tiempo = millis() + DURACION;
delay(2000); // Mantener activado el relé por 2 segundos
}
digitalWrite(relay, LOW); // Desactivar el relé
delay(1000);
}}