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: 27276

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 rodrigo em 8 julho 2014 às 12:48
  • Pessoal alguem pode me ajudar??? comprei uma releyboard e preciso ativar e desativar os reles via comando serial apenas.. quando colocar por exemplo R1on o rele 1 liga e R1off o rele desliga..sera que alguem poderia me ajudar e que eu estou começando agora com arduino.  meu e-mail é alvesrodrigo@me.com

Comentário de Laboratório de Garagem em 13 maio 2014 às 10:55

Olá Deiverson,

Os Relés são de 10A e você pode utiliza-los ligados a fase de seu circuito sem nenhum problema. Lembre-se que o que vai determinar se você esta usando 110V ou 220V será a forma como esta fechando o circuito. Se fechar fizer um fechamento Fase-Fase 220V e fizer um fechamento Fase-Neutro=110V.

Comentário de Deiverson Gonçalves Leite em 12 maio 2014 às 16:44

Oi comprei a RelayBoard  e estou com algumas duvidas por exemplo ela aguenta ate 10A como diz nas informações para venda mais tem escrito la apenas 125V ela aguenta os 220V ne e a alimentação da mesma seria 12V uma Fonte chaveada de 12V 1,5A seria o ideal para mesma pois tenho aqui uma que tem essas informações posso usa ela na Relayboard?

Comentário de Jhonata Beckman Caranha em 8 maio 2014 às 23:56

Olá,  estoui com muita dificuldade,enviei o código exemplo para o Arduino Mega 2560 R3, e não consigo mais enviar outro programa.............alguém pode me ajudar???

Comentário de Jocinei Edevandro Marquetti em 3 março 2014 às 14:03

ola amigo eu tentei enviar o código mas ele não envia é da esse erro (oke pode ser?)

relayboardtest:8: error: 'RelayBoard' does not name a type
relayboardtest.ino: In function 'void loop()':
relayboardtest:23: error: 'relay' was not declared in this scope
relayboardtest:31: error: 'relay' was not declared in this scope
relayboardtest:39: error: 'relay' was not declared in this scope
relayboardtest:47: error: 'relay' was not declared in this scope
relayboardtest:57: error: 'relay' was not declared in this scope
relayboardtest:70: error: 'relay' was not declared in this scope
relayboardtest:81: error: 'relay' was not declared in this scope
relayboardtest:84: error: 'relay' was not declared in this scope

Comentário de Fabio Alipio em 2 fevereiro 2014 às 12:12

Pessoal Boa Tarde!

estou com dificuldades em utilizar o mesmo botão ligar e desligar  segue meu código,

sera que alguem pode me ajudar

#include <RelayBoard.h>

#define data    6
#define strobe  4
#define clock   2
#define numberboards 1
RelayBoard relay(data, strobe, clock, numberboards);

#define blp01      A0  
#define blp02      A1  
#define blp03      A2  
#define bcena01    A3
#define bcena02    A4
#define bcena03    A5


boolean blp01status;
boolean blp02status;
boolean blp03status;
boolean bcena01status;
boolean bcena02status;
boolean bcena03status;

int blp01statuslamp = 0;
int blp02statuslamp = 0;
int blp03statuslamp = 0;
int bcena01statuslamp = 0;
int bcena02statuslamp = 0;
int bcena03statuslamp = 0;


void setup()
{
  delay(1000);
 
  pinMode(blp01,    INPUT);   
  pinMode(blp02,    INPUT);
  pinMode(blp03,    INPUT);
  pinMode(bcena01,  INPUT);
  pinMode(bcena02,  INPUT);
  pinMode(bcena03,  INPUT);
 
  digitalWrite(blp01,  HIGH);  // Aciona o pull-up interno
  digitalWrite(blp02,  HIGH);  // dos botões
  digitalWrite(blp03,    HIGH);
  digitalWrite(bcena01,  HIGH);
  digitalWrite(bcena02,  HIGH);
  digitalWrite(bcena03,  HIGH);
     
     
}

void loop(){
 
      
       
 blp01status = digitalRead(blp01);
 blp02status = digitalRead(blp02);
 blp03status = digitalRead(blp03);
 bcena01status = digitalRead(bcena01);
 bcena02status = digitalRead(bcena02);
 bcena03status = digitalRead(bcena03);
   


 if(blp01status == LOW)
   blp01statuslamp++;

  if(blp01statuslamp == 1) {     

    relay.set(0,0,1);  
    delay(50);
    relay.go();
    

     
    if(blp01status == LOW)
    
 
    
    
    if(bcena03status == LOW){
      bcena03statuslamp++;
    }
      if(bcena03statuslamp == 1){
       relay.set(0,0,0);
       relay.set(0,1,0);
       relay.set(0,2,0);
       relay.set(0,3,0);
       relay.set(0,4,0);
       relay.set(0,5,0);
       relay.set(0,6,0);
       relay.set(0,7,0);
       relay.set(0,8,0);
       delay(50);
       relay.go();
       
    }
    
     if(bcena01status == LOW){
       relay.set(0,0,1);
       relay.set(0,1,1);
       relay.set(0,2,1);
       relay.set(0,3,1);
       relay.set(0,4,1);
       relay.set(0,5,1);
       relay.set(0,6,1);
       relay.set(0,7,1);
       relay.set(0,8,1);
       delay(50);
       relay.go();
       
    }
    
    if(bcena02 == LOW){
      delay(50);
       relay.set(0,0,1);
       relay.set(0,5,1);
       relay.set(0,8,1);
       relay.set(0,7,1);
       relay.set(0,6,1);
              delay(50);
       relay.go();
    
    }
  }
}

Comentário de Josauro S.J. em 24 janeiro 2014 às 9:03

Ola comprei 2 relayboard, notei que elas vieram sem os pinos para encaixar os jumpers, como é padrão em todos os shields, então isso é normal, terei que soldar os jumpers para poder conectar as placas ? Como faço isso. (Seria mais prático se ja viessem com os jumpers). 

Comentário de Silvio Cavalcante em 23 novembro 2013 às 0:47

Olá pessoal estou com dificuldade  em controlar um rele enviando um comando através de um botão, o primeiro rele aciona mas quando vou acionar o segundo dispara todos coloquei o resistor de 10k, capacitor ceramico.

alguém poderia me dar uma dica.

Grato

Comentário de Geraldo Antônio dos Santos Jr em 1 novembro 2013 às 14:16
Alguém conectou a relayboard com o raspberry pi?
Comentário de João Gusmão em 23 outubro 2013 às 20:46

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço