Um relé é um interruptor eletromecânico composto por uma bobina e um conjunto de contatos. Ao ser energizado, uma corrente percorre a bobina fazendo com que os seus contatos abram ou fechem.
O módulo apresentado aqui é um dispositivo com quatro canais independentes e é ativado com nível lógico baixo. Uma grande vantagem deste módulo é que cada canal utiliza um acoplador ótico, garantindo que não exista nenhum contato elétrico entre o pino da placa Arduino com o circuito de acionamento do relé.

Quando o pino de entrada do canal (IN1 a IN4) vai ao nível lógico baixo (LOW) , o acoplador ótico (U1 a U4) conduz e aciona o transistor (Q1 a Q4) que por sua vez energiza a bobina do relé (K1 a K4) fechando os contatos 2 e 3. Parece confuso com muitos elementos 😀 , porém veja o esquema a seguir.

Teste do módulo
Monte o circuito abaixo observando os pinos de ligação.
| pino módulo Relé | pino Arduino |
| IN1 | D7 |
| IN2 | D8 |
| IN3 | D9 |
| IN4 | D10 |
| VCC | 5V |
| GND | GND |

Aqui vamos criar dois arquivos: o rele.ino que é o código principal e o Rele.h (atente para o primeiro caractere maiúsculo) com a declaração das macros (#define) e a função de tratamento do módulo. A separação, na prática, não é necessária. Estamos sugerindo a separação para que o código seja o mais reutilizável possível. Deste modo você poderá utilizar um mesmo módulo em diversos projetos e ser poupado de escrever tudo novamente 😎 .
| Obs.: toda diretiva de pré-processamento começa com o símbolo #. As diretivas não são comandos da linguagem C ou Arduino. São instruções que antes da compilação efetiva, são tratadas (processadas) no código fonte (sketch) e posteriormente entregues ao compilador. Ah, a sintaxe também difere dos comandos/declarações C/Arduino. Não temos o ponto e virgula (;) ao termino de uma diretiva. Por convenção, o nome das constantes da diretiva #define são escritas em maiúsculas. |
Copie e cole no IDE do Arduino e salve como rele.ino
#include "Rele.h"
void setup() {
byte arrPinos[] = {RELECH1, RELECH2, RELECH3, RELECH4};
for ( byte indice = 0; indice < sizeof(arrPinos); indice++ ) {
pinMode( arrPinos[indice], OUTPUT );
acionaRele( arrPinos[indice], RELEOFF );
}
for ( byte indice = 0; indice < sizeof(arrPinos); indice++ ) {
acionaRele( arrPinos[indice], RELEON );
delay(1000);
acionaRele( arrPinos[indice], RELEOFF );
delay(1000);
}
}
void loop() {
}
Copie e cole no IDE do Arduino e salve como Rele.h
#define RELEON LOW
#define RELEOFF (! RELEON)
#define RELECH1 7
#define RELECH2 8
#define RELECH3 9
#define RELECH4 10
void acionaRele( byte canal, boolean estado ) {
digitalWrite( canal, estado );
}
