Olá Garagistas! Neste tutorial mostraremos como utilizar a RelayBoard, uma placa muito útil que junta a praticidade com a economia, pois com apenas 3 pinos de controle você pode acionar diversos relés. E como demonstração disponibilizamos ao final deste tutorial um sketch exemplo, utilizando uma biblioteca desenvolvida para Arduino!
Material Utilizado:
1. RelayBoard
Imagem 1 - RelayBoard
Criada pelo garagista Gustavo Suim e incubada pelo Lab de Garagem, a RelayBoard é uma placa expansível que com apenas 3 pinos de controle, permite acionar até 8 relés por placa. Com mais de uma placa ligadas juntas é possível controlar 8, 16, 24, até 80 relés, com apenas um microcontrolador. Foi desenvolvida uma biblioteca para Arduino para facilitar o controle de todos os relés, podendo determinar qual a Placa a ser acionada, o Relé e seu Estado (ON/OFF) independentemente.
Pinos de Controle da RelayBoard:
Data: Pino responsável pelo envio dos dados responsáveis pelo controle das saídas.
Strobe: Pino responsável por disponibilizar nas saídas as entradas carregadas.
Clock: Pino responsável pelo clock das placas.
2. Biblioteca - RelayBoard.h
A biblioteca, e toda a documentação de como utilizá-la pode ser encontrada clicando aqui. A descrição das funções da biblioteca podem ser encontradas abaixo:
- #include <RelayBoard.h>
Declaração necessária para utilização da placa.
- RelayBoard::RelayBoard(int date, int str, int clk, int numberboard)
Ex.: RelayBoard relay(2,4,6,2); // cria o objeto “relay” com as devidas propriedades
Observação:
- void RelayBoard::set(int shield, int out, boolean status)
Ex.: relay.set(0,3,1);
Observações:
- void RelayBoard::load(int board, int out, boolean status)
Ex.: relay.load(0,2,1);
Observação:
- void RelayBoard::go()
Após carregar as saídas solicitadas na função LOAD, à função GO faz o acionamento simultâneo das saídas solicitadas.
Ex.: relay.go();
3. Circuito da Demonstração
Utilizando uma fonte 12V para alimentar a(s) RelayBoard e o Arduino, faça as ligações do circuito abaixo.
Imagem 2 - Circuito da demonstração
4. Sketch da Demonstração
//====================================================================================
#include <RelayBoard.h> //Inclui a biblioteca RelayBoard.h
#define data 6 //Define a palavra data como 6 para o pino D6 ser utilizado como o pino do DATA
#define strobe 3 //Define a palavra strobe como 4 para o pino D4 ser utilizado como o pino do STROBE
#define clock 2 //Define a palavra clock como 2 para o pino D2 ser utilizado como o pino do CLOCK
#define numberboards 2 //Define a palavra numberboards como 2, onde é definido quantas RelayBoard há no circuito
RelayBoard relay(data, strobe, clock, numberboards); //Cria a instância, informando os pinos de controle e o número //de placas no circuito
int i; //Variável para contagem
int j; //Variável para contagem
void setup()
{
delay(1000); //Aguarda 1 segundo antes de iniciar o programa
}
void loop()
{
//relay.set(int board, int out, boolean status)
//Board: Informa qual a placa que deverá ser utilizada, começando de 0.
//Out: informa qual a saída da placa informada acima deverá ser acionada (ON/OFF), de 0 a 7
//Status: Devemos informar "1" para LIGAR a saída ou "0" para DESLIGAR a saída.
//relay.load(int board, int out, boolean status)
//Board: Informa qual a placa que deverá ser utilizada, começando de 0.
//Out: informa qual a saída da placa informada acima deverá ser acionada (ON/OFF), de 0 a 7
//Status: Devemos informar "1" para LIGAR a saída ou "0" para DESLIGAR a saída.
//relay.go()
//Após carregar as saídas solicitadas na função LOAD, à função GO faz o acionamento simultâneo das //saídas solicitadas.
for(i=0; i<=7; i++)
{
relay.set(0,i,1);
delay(50);
relay.set(0,i,0);
delay(50);
}
for(i=7; i>=0; i--)
{
relay.set(0,i,1);
delay(50);
relay.set(0,i,0);
delay(50);
}
for(i=0,j=7;i<=3;i++,j--)
{
relay.load(0,i,1);
relay.load(0,j,1);
relay.go();
delay(50);
}
for(i=3,j=4;i>=0;i--,j++)
{
relay.load(0,i,0);
relay.load(0,j,0);
relay.go();
delay(50);
}
for(i=0;i<=1;i++)
{
for(j=0;j<=1;j++)
{
relay.load(0,0,j);
relay.load(0,1,j);
relay.load(0,6,j);
relay.load(0,7,j);
relay.go();
delay(500);
}
}
for(i=0;i<=1;i++)
{
for(j=0;j<=1;j++)
{
relay.load(0,2,j);
relay.load(0,3,j);
relay.load(0,4,j);
relay.load(0,5,j);
relay.go();
delay(500);
}
}
for(i=0; i<=7; i++)
{
relay.load(0,i,0);
}
relay.go();
delay(500);
for(i=0; i<=7; i++)
{
relay.load(0,i,1);
}
relay.go();
delay(500);
for(i=0; i<=7; i++)
{
relay.set(1,i,1);
delay(50);
relay.set(1,i,0);
delay(50);
}
for(i=7; i>=0; i--)
{
relay.set(1,i,1);
delay(50);
relay.set(1,i,0);
delay(50);
}
for(i=0,j=7;i<=3;i++,j--)
{
relay.load(1,i,1);
relay.load(1,j,1);
relay.go();
delay(50);
}
for(i=3,j=4;i>=0;i--,j++)
{
relay.load(1,i,0);
relay.load(1,j,0);
relay.go();
delay(50);
}
for(i=0;i<=1;i++)
{
for(j=0;j<=1;j++)
{
relay.load(1,0,j);
relay.load(1,1,j);
relay.load(1,6,j);
relay.load(1,7,j);
relay.go();
delay(500);
}
}
for(i=0;i<=1;i++)
{
for(j=0;j<=1;j++)
{
relay.load(1,2,j);
relay.load(1,3,j);
relay.load(1,4,j);
relay.load(1,5,j);
relay.go();
delay(500);
}
}
for(i=0; i<=7; i++)
{
relay.load(1,i,0);
}
relay.go();
delay(500);
for(i=0; i<=7; i++)
{
relay.load(1,i,1);
}
relay.go();
delay(1000);
for(i=0; i<=7; i++)
{
relay.load(1,i,0);
relay.load(0,i,0);
}
relay.go();
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Então é isso Garagistas! Agora vocês podem começar a utilizar essa placa para fazer uma automação na sua residência, esperamos que tenham gostado deste tutorial, até a próxima!
=D
Comentar
boa tarde pessoal, todos bem.
ja estou utilizando esta placa em sistema piloto, controlar acionamento de lâmpadas pelo arduino e interface web , mas tambem estou utilizando este sistema ligado em paralelo com um interruptor, que tb liga/desliga a lampada.
Minha duvida eh, como consigo alimentar o sistema web ao operar com o interruptor?
ligo a lampada pela web/adruibo/relayboard mas ao desligar pelo interruptor nao sei como fazer para ter o retorno ao arduino/web?
grato
Detalhe: nessa foto que eu tirei, está errado pois o amarelo não tá alinhado com o resistor. Porém, já tentei alinhado. Dá o mesmo resultado independente de ter o resistor ou nao
Sim, coloquei o resistor de 10k. Até achei que tivesse errado, mas ai um amigo me disse que estava certo o jeito que eu liguei:
https://api.ning.com/files/Ug-Ogup9PZ-yjFQS1jYrJ-FPl7RznXd-*ume0x*QtVPS4yCX3N6ifoV2O5Hoib8APUVbCG2N*qWRRlBFXtrcCTOPcqFWzvSw/arduino.jpg
_Sendo o vermelho o data que vai pro rele, o amarelo, o GND, e o azul, o 6 do arduino
Olá João! Você conectou o resistor de 10K entre o DATA e o GND? Ele é recomendado para evitar a entrada de ruído em seu circuito.
Bom dia, liguei tudo certinho a relay board, porém às vezes reles são acionados por engano. Como faço para resolver isso?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2023 Criado por Marcelo Rodrigues.
Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)