Estoy haciendo un proyectito en arduino para controlar un relé que active o desactive un humidificador en función de si la humedad ambiental es mayor o menor al 50%.
He utilizado para ello:
DHT11
LCD 16x2
Relé JQC-3FF-S-Z
TENGO UN PROBLEMA. EL RELÉ NO RESPONDE CUANDO HAGO WRITEPIN ¿Algún shur me podría echar una mano? No sé si he hecho bien las conexiones (SÍ QUE ME FUNCIONA EL PROGRAMA DE EJEMPLO LLAMANDO AL MISMO PIN DE SALIDA).
Antes del relé no puse potenciómetros ni resistencias ni nada ¿es necesario?
IMAGEN DE CONEXIONES:
CÓDIGO:
Cita:
// Libreria para Sensores DHT
#include "DHT.h"
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x3F
#define DHTPIN 2 // Pin del Arduino al cual esta conectado el pin 2 del sensor
// Descomentar segun el tipo de sensor DHT usado
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Diagrama
// Pin 1 Sensor a +5V de Arduino
// Pin 2 Sensor a HDTPIN (en este sketch es el pin 2)
// Pin 4 Sensor a GROUND de Arduino
// Resistencia de 10K desde Pin 2 de sensor a Pin 1 de Sensor o +5V
// Inicializa el sensor
DHT dht(DHTPIN, DHTTYPE);
//Inicializa el display
LiquidCrystal_I2C lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);
//Indicar pin de salida del relé
const int pin = 9;
const int humedadminima = 50;
int encendido = 0;
// Configura Arduino
void setup() {
Serial.begin(9600);
Serial.println("Midiento temperatura y humedad con sensor DHTxx!");
pinMode(pin, OUTPUT); //definir pin como salida
lcd.begin (16,2); // Inicializar el display con 16 caraceres 2 lineas
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
dht.begin();
}
void loop() {
/* digitalWrite(pin, HIGH); // poner el Pin en HIGH
delay(10000); // esperar un segundo
digitalWrite(pin, LOW); // poner el Pin en LOW
delay(10000); // esperar un segundo */
// Espera dos segundos para realizar la primera medición.
delay(2000);
// Lee los datos entregados por el sensor, cada lectura demora 250 milisegundos
// El sensor muestrea la temperatura cada 2 segundos}
// Obtiene la Humedad
float h = dht.readHumidity();
// Obtiene la Temperatura en Celsius
float t = dht.readTemperature();
// Control de errores, valida que se obtuvieron valores para los datos medidos
if (isnan(h) || isnan(t)) {
Serial.println("Falla al leer el sensor DHT!");
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0,0);//Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("ERROR
lcd.setCursor(6,1);
lcd.print(" DHT");
Serial.println("Apagando humidificador");
encendido = 0;
digitalWrite(pin, LOW); //Apagar humidificador
delay(10000);
return;
}
if(h<humedadminima && encendido==0)
{
Serial.println("Encendiendo humidificador");
encendido=1;
digitalWrite(pin, HIGH); //Encender humidificador
delay(10000);
}
if(h>humedadminima && encendido==1)
{
Serial.println("Apagando humidificador");
encendido=0;
digitalWrite(pin, LOW); //Apagar humidificador
delay(10000);
}
Serial.print("Humedad
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura
Serial.print(t);
Serial.println(" *C ");
///////////////////////////////////////////////////
lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0,0);//Posiciona la primera letra despues del segmento 5 en linea 1
lcd.print("Humedadtiva ");
lcd.setCursor(6,1);
lcd.print(h);//Escribe la humedad
lcd.print(" %");
delay (2500);
///////////////////////////////////////////////////
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Temperatura
lcd.setCursor(6,1);
lcd.print(t);//Escribe la temperatura
lcd.print(" C'");
delay (2500);
///////////////////////////////////////////////////
//Informar de estado del relé
if(encendido==0)
{
Serial.println("Humidificador apagado");
}
else
{
Serial.println("Humidificador encendido");
}
}