Módulo Relé Serial - Acionamento por Botão
Introdução
Nesse tutorial vamos dar sequência aos nossos estudos de como utilizar o Módulo Relé Serial desenvolvido por nós da RoboCore. Inicialmente vamos explicar o acionamento direto de um relé por um botão e, posteriormente, o acionamento pulsado pelo mesmo botão.
Essa aplicação é bem diversa, pois num código simples conseguimos abordar algumas funções importantes para lidar com o módulo.
Lista de Materiais
Lista completa de produtos
comprarBlackBoard UNO R3
Cabo USB AB 1.50m
Módulo Relé Serial
Chave Momentânea (PushButton) - Pacote com 10 unidades
Resistor 10kΩ - Pacote com 10 unidades
Fonte Chaveada 12V 1A
Protoboard 400 Pontos
WorkPlate 400 - Preta
Jumpers Macho-Macho x40 Unidades
Jumpers Macho-Fêmea x40 Unidades
Teoria
Relé
No tutorial Módulo Relé Serial - Primeiro Contato já demos uma geral de como é o funcionamento de um relé e de como o nosso módulo funciona. Mas vale lembrar, né?
Um relé é um interruptor eletromecânico que é acionado quando corrente elétrica passa pela bobina do módulo, e este interruptor pode acionar lâmpadas ou motores. Existem módulos relé com vários canais, ou seja, para acionar mais de uma carga utilizando apenas uma placa, no entanto cada relé necessita de uma conexão direta com o seu Arduino. Inicialmente pode não parecer um problema, mas caso você queira ligar centenas de relés em apenas um Arduino UNO, você perceberá que é extremamente complexo controlar cada relé diretamente pelo pino digital da placa, e pensando nesse problema, nós, da RoboCore, desenvolvemos o Módulo Relé Serial.
Nosso módulo permite que você controle até 40 relés (10 módulos) usando apenas dois pinos digitais do Arduino.
Botão
O que é e como funciona um botão?
O botão nada mais é que um dispositivo de interface para comunicação entre o ser humano e a máquina. Parece complicado? Com certeza você vai perceber que não. Os botões estão presentes no nosso cotidiano, desde o acender e apagar de lâmpadas, até o bloqueio de tela do seu celular.
Em estado normal, o botão interrompe o circuito. Quando o botão é pressionado, os seus terminais internos são interligados e permitem que a corrente flua pelo circuito. Essa mudança de estado lógico pode ser facilmente lida pelo Arduino. No entanto, se o circuito estiver aberto, o pino do Arduino ficará desconectado e o valor lido será imprevisível. Por isso é necessário usar uma tensão de referência no pino, e basta usar um resistor de pull-down, como na imagem a seguir.
Circuito
Monte o circuito de acordo com a imagem a seguir. Lembrando que o Módulo Relé Serial tem de ser alimentado por uma fonte de 12 V.
Uma das conexões do botão é alimentada diretamente com 5 V, e outra é conectada no pino 9 da BlackBoard, passando pelo resistor de 10k que está ligado no GND na protoboard.
O módulo relé é conectado diretamente no pino Vin da BlackBoard (a tensão da fonte é direta), e o GND no mesmo GND da protoboard. Os pinos Data e Clock vão, respectivamente, nas saídas digitais 4 e 5 da BlackBoard.
Programação
Biblioteca
Vamos começar baixando a biblioteca do Módulo Relé Serial para que você possa controlar o módulo corretamente através de sua placa Arduino. Para fazer o download, clique no botão abaixo.
Download da BibliotecaO arquivo também está disponível no Github.
Para descompactar o arquivo, utilize o programa 7-Zip (para baixar o programa, clique aqui). O 7-Zip é um programa similar ao WinRAR, mas gratuito (eu sei, você achava que o WinRAR é gratuito, mas não é!).
Caso não saiba como baixar e colocar a biblioteca nos arquivos do Arduino, acesse nosso tutorial Adicionando Bibliotecas na IDE Arduino.
Acionamento Direto
Copie o código abaixo e carregue ele para a sua BlackBoard.
Entendendo o Código
A primeira parte do código, #include <SerialRelay.h>
, inclui a biblioteca que baixamos anteriormente, o que possibilita usarmos as funções corretas para o acionamento do relé.
Logo após, acrescentamos as variáveis constantes presentes no código. Ou seja, as variáveis que não vão se alterar no decorrer do experimento. No caso, definimos as variáveis NUMERO_MODULOS
e PINO_BOTAO
, que correspondem à quantidade de módulos utilizados e ao pino em que o botão está conectado à BlackBoard, respectivamente.
Para que o software e o módulo se comuniquem, precisamos definir em quais saídas digitais o Módulo Relé Serial está conectado. Na linha SerialRelay reles (4, 5, NUMERO_MODULOS)
configuramos os pinos Data e Clock nas saídas 4 e 5 da BlackBoard, assim como usamos a constante que define quantos módulos temos.
Nós já definimos todas as variáveis que vamos utilizar, e também já configuramos os pinos do módulo e do botão. Também informamos ao software quantos módulos vamos usar, mas e agora? Antes de ir para a seção loop()
, temos de configurar o pino do botão como uma entrada para a BlackBoard, para que posteriormente possamos fazer a leitura digital. A definição é feita do seguinte modo: pinMode(PINO_BOTAO, INPUT)
.
Agora vamos trabalhar na lógica por trás do acionamento!
Precisamos que o comando seja executado apenas quando o botão for realmente acionado, ou seja, temos de garantir que nenhum tipo de ruído consiga acionar o relé! Mas como fazemos isso? Simples, a gente usa um debounce! Debounce é uma estrutura de código que filtra o ruído e garante o acionamento direto pela leitura digital do botão. A função mais básica para fazer esse filtro é a seguinte.
Esse laço garante que o resto do código só será executado se o botão ficar acionado por mais tempo que o delay, e como um ruído não dura mais do que 30 milissegundos, nós fazemos com que o código funcione apenas quando o botão for realmente pressionado.
Na sequência, fazemos uma condição para o acionamento do relé.
Note que acrescentamos um laço while
após o acionamento do relé, com nenhum comando dentro dessa condição, para que assim o relé se mantenha aceso enquanto o botão estiver pressionado.
Agora precisamos desligar o relé quando o botão não estiver pressionado, e fazemos isso utilizando o seguinte comando.
Repare que o comando para desligar está dentro do if
que verifica se o botão foi pressionado, e após o while
que verifica se o botão continua pressionado ou não. Afinal, se o while
não é mais verdadeiro, significa que o botão está solto, logo, o relé deve ser desligado.
O Que Deve Acontecer
Você conseguirá acionar o primeiro relé ao segurar o botão pressionado, e quando soltar o botão, o relé deverá desligar.
Acionamento Pulsado
Copie o código abaixo e carregue ele para a sua BlackBoard.
Entendendo o Código
O início do código até a seção setup()
é quase idêntico ao do programa anterior. Observe que incluímos apenas a variável flag
, que será explicada posteriormente. Vamos alterar apenas a lógica por trás do acionamento do relé via botão.
No programa anterior utilizamos a função while
para manter o relé ligado enquanto o botão estivesse pressionado. No entanto, agora queremos que ele se mantenha acionado mesmo após você soltar o botão. Como fazemos isso?
O flag é uma variável auxiliar associada ao relé, ou seja, de acordo com o seu valor conseguimos identificar e controlar o estado do relé. Nesse caso, o estado inicial do relé foi adotado como zero (flag = 0
), pois consideramos que ao inicializar o programa o relé está desligado. Deste modo, determinamos o acionamento dele de acordo com o valor de flag
, e não unicamente com o pressionar do botão.
Diferente do bloco anterior, a condição que desliga o relé é validada apenas quando flag = 1
, ou seja, apenas quando o relé estiver ligado e o botão for novamente pressionado.
Para garantir que o acionamento do botão não crie um sequência de troca de estados do relé, acrescentamos um while
para travar o laço e garantir que o programa não entre em repetição.
O Que Deve Acontecer
Você deve conseguir acionar o primeiro relé ao apertar o botão uma vez, e ao pressionar novamente, o relé deve desligar.
Indo Além
O que acha de tentar trabalhar com o acionamento de mais de um relé ao mesmo tempo, e utilizando mais módulos? Tente e fale consoco sobre os resultados!
Gostou desse tutorial? Mande nos comentários suas opiniões, sugestões e dicas!
Fique ligado, temos ainda outros tutoriais no nosso site, entre lá e venha aprender mais com a gente!