Arduino

Acionar relé remoto por botoeira

Imagine uma situação em que existam 2 prédios; prédio A e prédio B. Um segurança noturno passa desligando determinados pontos de energia no prédio A e posteriormente deve dirigir-se ao prédio B para o mesmo procedimento. Não seria mais eficiente se ele fosse apenas em um dos prédio e fizesse o desligamento remoto do prédio oposto? Bem, devido a um caso semelhante, tive que fazer esse pequeno projetinho – e com quase nenhum código, apenas implementando alguma funcionalidade no sketch de exemplo em Examples > RF24 > GettingStarted.

Mas como acionar esse relé remoto por botoeira?



Nesse outro artigo eu mostro um modelo de painel com botoeira. No caso real, quando o botão virar para a posição de acionamento do relé, ele deve colocar o respectivo pino de um PCF8574 em GND, então o Arduino faz a leitura do estado dos pinos do PCF8574 e envia um byte (unsigned char) para o outro lado via rádio NRF24L01. O Arduino do outro lado faz a recepção dessa informação e faz a correspondência dos bits (contidos nesse byte) com a posição do array de relés, que demonstro em seguida no código implementado sobre o sketch de exemplo.

Nessa pequena porção de código, defini ligadodesligado porque o acionamento do relé é feito com o pino de IO em LOW. Isso evita fazer confusão.

Utilizei um Arduino UNO e um Arduino Nano, como você pode ver no video. Na comunicação dos rádios, algumas configurações especificas são necessárias. O role define quem está enviando (como mestre) e quem está recebendo. Porém isso não importa de fato, porque quando um dado chega, uma resposta é enviada, então a comunicação acontece de forma bidirecional em intervalos de 1.2s (esse tempo pode ser modificado tanto para o delay do loop como para a leitura do rádio).

O rádio deve possuir um identificado. Repare no código de exemplo que há uma definição para o identificar (que não é IP nem MAC, mas apenas um array de unsigned char):

Nessa lista estão dispostos apenas 2 rádios, e quando definimos a variável radioNumber estamos apontando um desses dois identificadores desse array, então não cometa o erro de colocar um número maior que 1 ou menor que 0. E já que só pode ser 0 ou 1, o jeito mais simples de evitar confusão é definir a variável radioNumber com o mesmo valor de role, usando um define para SIDE_A  ou SIDE_B.

Por fim, devemos definir um endereço para o PCF8574. Olhando para o módulo, você pode notar o sinal de de um lado dos jumpers e – do lado oposto. Para o endereço 0x22 coloquei o jumper em +– no Arduino Nano.

Defini uma variável para guardar o valor de leitura do rádio (buf) e o array de pinos dos relés. Seria muito mais simples adicionar outro PCF8574 e apenas transferir o valor advindo do rádio para ele, mas se quiser evitar wiring ou reduzir o custo em cada centavo, essa solução pode ser a mais próxima de ideal.

Função de manipulação dos relés

E depois das poucas linhas acima, adicionei essa função para manipular os relés, o restante do sketch é o mesmo código contido no exemplo. Fácil implementar algo funcional sem esforço com Arduino, hum?

O código completo ficou assim (usando como base o Arduino UNO):

O resultado você vê no video a seguir.

1 Star2 Stars3 Stars4 Stars5 Stars (43 votes, average: 5,00 out of 5)
Loading...

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!