Franzininho - Controle do Relé Serial




Introdução

Agora que já vimos como programar a Franzininho DIY em nosso tutorial Franzininho - Primeiros Passos, está na hora de ampliar o universo de possibilidades desta pequena placa. Por possuir poucas entradas e saídas digitais, temos que aproveitar ao máximo os seis pinos disponíveis, e a melhor solução para essa limitação é o uso de módulos que possuam comunicação serial, como o Módulo Display Serial e o Módulo Relé Serial. Estes módulos podem ter todas suas funcionalidades controladas por apenas duas portas digitais de seu microcontrolador, além de possibilitar o controle individual de até 10 módulos interligados.

Neste tutorial iremos ensinar como controlar o Relé Serial através da Franzininho DIY, e como criar uma onda de acionamento de relés.

Lista de Materiais

Projeto Piscando Relé

Assim como fizemos em nosso tutorial de primeiros passos com a Franzininho, e como é sempre recomendado para os primeiros testes de qualquer novo microcontrolador, vamos iniciar os estudos do módulo Relé Serial piscando o relé de número um do módulo, em intervalos de um segundo.

Circuito

Para este projeto, monte o circuito abaixo.

circuito-eletrico-1
Circuito Elétrico

Vale lembrar que os relés do módulo Relé Serial possuem bobinas de 12 V, portanto é indispensável o uso de uma fonte que seja capaz de fornecer essa tensão.

Software

Biblioteca

Antes de prosseguir neste tutorial, instale a biblioteca do Relé Serial em sua Arduino IDE. Para isso, baixe o arquivo do botão abaixo.

Biblioteca "SerialRelay"

Caso não saiba como instalar bibliotecas na Arduino IDE, siga os passos do nosso tutorial Adicionando Bibliotecas na IDE Arduino.

Código

Para observar o piscar de seu módulo Relé Serial, copie e carregue o código a seguir.

Entendendo o Código

Primeiramente incluímos no código a biblioteca SerialRelay, previamente instalada. Em seguida declaramos a variável NUMERO_MODULOS, que é responsável por armazenar a quantidade de módulos Relé Serial que estão interligados. Com o comando SerialRelay rele(0,1,NUMERO_MODULOS), criamos o objeto rele em função da classe SerialRelay, através dos pinos 0 e 1 da Franzininho (DATA e CLOCK, respectivamente, no Relé Serial) e em relação ao número de módulos utilizados, mediante à variável NUMERO_MODULOS já declarada.

Por fim, no looping do código, acionamos o relé 1 do módulo 1 através do comando rele.SetRelay(1, SERIAL_RELAY_ON, 1). Aguardamos um segundo (delay(1000)) para desligá-lo por meio do comando rele.SetRelay(1, SERIAL_RELAY_OFF, 1), e aguardamos um segundo novamente, para que o código se repita.

O Que Deve Acontecer

Após carregar o código para a placa com o circuito montado, será possível observar o LED do relé um do módulo acender e apagar, como no GIF a seguir, e ouvir o barulho do acionamento e desacionamento do relé.

Resultado Final

Projeto Onda de Acionamentos

Neste projeto iremos selecionar o sentido de onda de acionamentos através de botões. Ao pressionar um dos botões, os relés irão simular uma onda para a esquerda ou para a direita.

Circuito

Para este projeto, monte o circuito a seguir.

circuito-eletrico-2
Circuito Elétrico

Código

Com o circuito acima montado, carregue o código a seguir para a sua Franzininho.

Entendendo o Código

Na declaração global do código, além da inclusão da biblioteca SerialRelay, da criação do objeto rele e da declaração da variável NUMERO_MODULOS, incluímos as variáveis PINO_BOTAO_DIREITA e PINO_BOTAO_ESQUERDA, que armazenam os pinos da Franzininho aos quais estão conectados os botões. Além destas variáveis, declaramos a variável TEMPO_ESPERA, que é utilizada para realizar um tempo de espera entre os acionamentos dos relés.

Em seguida, nas configurações do programa, configuramos as variáveis que armazenam os pinos dos botões como entradas, em nível lógico alto (pull up).

No looping do código, adicionamos a lógica por trás da animação de onda dos relés, mas primeiramente, por meio de um debounce de trinta milissegundos, verificamos através dos comandos if(digitalRead(PINO_BOTAO_DIREITA) == LOW) e if(digitalRead(PINO_BOTAO_ESQUERDA) == LOW), se algum dos botões foi pressionado. Caso o botão da esquerda tenha sido pressionado, por exemplo, o código executa a animação de onda para o lado esquerdo.

Para as animações de onda, utilizamos dois laços for, um dentro do outro. Para a animação no sentido da direita, o primeiro laço (for(int i = 1; i <= NUMERO_MODULOS; i++)) é responsável por executar a animação dos relés enquanto a variável i for menor ou igual ao valor configurado pela variável NUMERO_MODULOS. A cada repetição deste laço, a variável i é incrementada em uma unidade através do comando i++, e o relé 4 do módulo i é desligado, já que, caso isso não fosse feito, o relé 4 de cada módulo se manteria aceso após o ciclo. Já o laço for(int j = 1; j <= 4; j++) é responsável por selecionar, na sequência, um relé por vez do módulo atual, ou seja, o laço será verdadeiro enquanto a variável j for menor ou igual a 4, que é o número de relés por módulo. Neste laço, a cada repetição, a variável j é incrementada em uma unidade, um dos relés é acionado, e o relé anterior é desligado, tudo isso com intervalos definidos pela variável TEMPO_ESPERA, através do comando delay(TEMPO_ESPERA).

Todo o laço de animação acima apenas aciona os relés para a direita, mas para que possamos acionar os relés para a esquerda, temos de inverter a lógica dos laços. Para isso utilizamos os laços for(int i=NUMERO_MODULOS; i >= 1; i--) e for(int j = 4; j >= 1; j--), que executam uma lógica contrária à utilizada anteriormente, decrementado as variáveis dos laços. Além disso, alteramos a condição de desligamento do relé anterior e para desligar o último relé do módulo, já que agora a onda está se movimentando no sentido contrário.

O Que Deve Acontecer

Após carregar o código para a placa e alimentar o circuito com uma fonte de 12 V, será possível observar os LEDs realizando uma onda de acionamentos no sentido do botão pressionado, como no GIF abaixo.

Resultado Final

Indo Além

Agora que você já aprendeu a implementar um acionamento em onda dos relés do módulo Relé Serial, por que não alterar o método de acionamento das animações de um botão para um Sensor de Presença PIR, por exemplo? Deste modo você poderá criar algo como um corredor inteligente, onde as lâmpadas do corredor se acendem conforme você passa por elas. Para isso bastaria calibrar o tempo de intervalo entre acionamentos, e ampliar o número de acionamentos para a quantidade de lâmpadas de seu corredor.

Além disso, como o Módulo Display Serial utiliza a mesma comunicação do Relé Serial, tente implementar um cronômetro com a Franzininho DIY, seguindo os passos de nosso tutorial Módulo Display Serial - Primeiro Contato. Vale lembrar que talvez sejam necessárias algumas alterações de código e de circuito para este projeto.

Avatar