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:

RelayBoard

Arduino

Jumper Premium F/F

Jumper Premium F/M

Fonte 12V

Resistor 10KΩ

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)

  • Date: Pino responsável pelo envio dos dados responsáveis pelo controle das saídas.
  • Str: Pino responsável por disponibilizar nas saídas as entradas carregadas.
  • Clk: Pino responsável pelo clock das placas.
  • Numberboard: variável que informa para todo o sistema a quantidade de placas acopladas.

Ex.: RelayBoard relay(2,4,6,2); // cria o objeto “relay” com as devidas propriedades

Observação:

  • TODOS os pinos desta função são configurados como OUT automaticamente.

 

 

- void RelayBoard::set(int shield, int out, boolean status)

  • Shield: Informa qual a placa que deverá ser utilizada
  • Out: informa qual a saída da placa informada acima deverá ser acionada (ON/OFF).
  • Status: Devemos informar “1” para LIGAR a saída ou “0” para DESLIGAR a saída.

Ex.: relay.set(0,3,1);

Observações:

  • A contagem de placas e saídas iniciam-se com o valor 0 (zero).
  • Esta função realiza o acionamento da saída sempre que for utilizada.

 

 

- void RelayBoard::load(int board, int out, boolean status)

  • Board: Informa qual a placa que deverá ser acionada
  • Out: informa qual a saída da placa informada acima deverá ser acionada.
  • Status: Devemos informar “1” para LIGAR a saída ou “0” para DESLIGAR a saída.

Ex.: relay.load(0,2,1);

Observação:

  • Esta função carrega o STATUS desejado das saídas, porém NÃO faz o acionamento das mesmas.

 

 

- 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

 

 

Exibições: 27273

Comentar

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)

Comentário de Fabio do Bonfim em 23 outubro 2013 às 16:47

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

Comentário de João Gusmão em 18 outubro 2013 às 14:50

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

Comentário de João Gusmão em 18 outubro 2013 às 14:43

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

Comentário de Laboratório de Garagem em 18 outubro 2013 às 14:33

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.

Comentário de João Gusmão em 18 outubro 2013 às 13:33

Bom dia, liguei tudo certinho a relay board, porém às vezes reles são acionados por engano. Como faço para resolver isso?

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço