Saltar al contenido principal

Código básico para controlar un relé

Con IN en el pin 7.

1. Encender y apagar​

#define RELE 7

// Cambia a LOW si tu módulo es activo en bajo
#define ENCENDIDO HIGH
#define APAGADO !ENCENDIDO

void setup() {
digitalWrite(RELE, APAGADO); // primero el estado, luego el modo:
pinMode(RELE, OUTPUT); // así no hace un clic al arrancar
}

void loop() {
digitalWrite(RELE, ENCENDIDO);
delay(3000);
digitalWrite(RELE, APAGADO);
delay(3000);
}

Oirás el clic y verás el LED del módulo cada 3 segundos. Si el ventilador funciona al revés (apagado cuando debería estar encendido), cambia HIGH por LOW en la línea de ENCENDIDO.

2. Termostato​

Con un DHT22 en el pin 2, el ventilador se enciende con calor. Usamos dos umbrales (histéresis) para que el relé no esté conmutando todo el rato:

#include <DHT.h>

#define RELE 7
#define ENCENDIDO HIGH
#define APAGADO !ENCENDIDO

DHT dht(2, DHT22);

const float ENCENDER_A = 27.0; // °C
const float APAGAR_A = 25.5;
bool ventilador = false;

void setup() {
digitalWrite(RELE, APAGADO);
pinMode(RELE, OUTPUT);
dht.begin();
}

void loop() {
delay(2000);
float t = dht.readTemperature();
if (isnan(t)) return;

if (!ventilador && t > ENCENDER_A) ventilador = true;
if (ventilador && t < APAGAR_A) ventilador = false;

digitalWrite(RELE, ventilador ? ENCENDIDO : APAGADO);
}

3. Temporizador sin bloquear el programa​

Un riego que se activa 10 segundos cada hora, usando millis() para que el Arduino pueda hacer otras cosas mientras tanto:

const unsigned long CADA = 3600000UL; // 1 hora en ms
const unsigned long DURANTE = 10000UL; // 10 s

unsigned long inicio = 0;

void loop() {
unsigned long t = millis() - inicio;

if (t >= CADA) {
inicio = millis(); // empieza un ciclo nuevo
}
digitalWrite(RELE, t < DURANTE ? ENCENDIDO : APAGADO);

// ...aquí puede ir el resto del programa
}
tip

La UL al final de los números indica que son unsigned long. Sin ella, 3600000 puede no caber en un int del Arduino UNO, y el cálculo sale mal.

¿Y ahora qué?​

Con relés, sensores y un poco de lógica tienes la base de cualquier automatismo: invernaderos, acuarios, alarmas. Para un robot, el siguiente actuador es el más potente de todos: el motor brushless.