Rele controlando Humidificador

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");
} 
}

He editado tu título (retirando la palabra Ayuda) y el código (no tenía el tag de código </> correspondiente)

Te invito a que leas las normas del foro y por favor no repitas estos errores.

Para comenzar tienes varios errores en tu código, tal vez lo copiaste mal

// en una parte del código dice
lcd.print("ERROR
// luego en otra parte...
lcd.print("Temperatura"

debe ser

lcd.print("ERROR");
lcd.print("Temperatura");

Solo veo un abuso de los delays lo que demora todo el funcionamiento de tu código y por lo tanto su operación y tal vez una mala interpretación de como funciona el rele.
Si tienes un módulo lo mas seguro es que creas que se activa con HIGH y se apaga con LOW y es a la inversa.
Se activa con LOW y se apaga con HIGH.
Invierte los comandos de accionamiento y debería funciona.
Si eso no ocurre lo tienes mal conectado pero como nada dices voy a ponerte una imagen que te ayude a conectarlo debidamente.

En realidad algunos reles no funcionan con digitalWrite(pin, HIGH), lo que deberias hacer seria poner en su lugar analogWrite(pin, 255)

@MyArduino...
Me sorprende esa problematica, porque la libreria hace esto:

// Right now, PWM output only works on the pins with
// hardware support.  These are defined in the appropriate
// pins_*.c file.  For the rest of the pins, we default
// to digital output.
void analogWrite(uint8_t pin, int val)
{
 // We need to make sure the PWM output is enabled for those pins
 // that support it, as we turn it off when digitally reading or
 // writing with them.  Also, make sure the pin is in output mode
 // for consistenty with Wiring, which doesn't require a pinMode
 // call for the analog output pins.
 pinMode(pin, OUTPUT);
 if (val == 0)
 {
 digitalWrite(pin, LOW);
 }
 else if (val == 255)
 {
 digitalWrite(pin, HIGH);
 }
 else
 {
// ........

¿ Quizás sea una libreria distinta ?

En realidad algunos reles no funcionan con digitalWrite(pin, HIGH), lo que deberias hacer seria poner en su lugar analogWrite(pin, 255)

Lástima que no puedo poner una expresión pero QUEEEEEEEEEEEEEEEEEEEEE!!!!!!!!!!!!!!

**Quien dijo que algunos reles necesitan analogWrite? **

Coloca la fuente, enlace o la justificación a la que refieres MyArduinoNedsHelp porque es la primera vez que leo que un elemento DIGITAL como un RELE que tiene dos estados SI o NO, energizado/NoEnergizado debe manejarse con un control analógico a full lo que es lo mismo que usarlo DIGITAL o sea un mal uso de recursos.

PD: estaré vigilando tu ip MyArduinoNedsHelp** porque suena a broma tu comentario.**

Lo que hay que ver,...

A que no responde?