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