quarta-feira, 17 de fevereiro de 2021

EX26 - Programa: Relé de impulso de dois canais com Arduino

Iremos programar o controle de duas lâmpadas por um botão pulsador, similar ao funcionamento do rele de impulso. A aplicação terá uma chave, S0 que irá ligar as lâmpadas  na sequência: 00, 01, 10 e 11, a cada pulso. Para esta aplicação utilizei a "Shield Módulo Relé 5V de 4 Canais"  sem o uso de uma biblioteca Arduino.

O Shield Módulo Relé 5V de 4 Canais permite que a partir do Arduino seja possível controlar cargas AC (alternada) de forma simples e prática. Por ter 4 canais, é possível controlar até quatro cargas AC de até 3A e de forma independente. Comumente é utilizado para controle de lâmpadas, ventiladores e outras saídas que possam ser acionadas através de relé.

Para projetos de automação residencial o Shield Módulo Relé 5V de 4 Canais é um componente importante, pois a placa em conjunto com o Arduino conectado à internet, possibilita que lâmpadas sejam acionadas através de uma página web, smartphone ou tablet, por exemplo. Por ser um shield, mesmo acoplado na parte de cima do Arduino, você ainda poderá utilizar as portas digitais e analógicas da placa. Especificações e características:

  • Tensão de operação: 5VDC
  • Corrente de operação: 15 ~ 20mA (por canal)
  • Capacidade do relé: 24VDC/3A e 120VAC/3A
  • Corrente máxima por canal: 3A
  • 4 canais independentes
  • Tempo de resposta: 5 ~ 10ms
A primeira coisa que fazemos no início do programa é colocar uma pequena observação sobre o nome do programa, sua função e quem o criou:

1
2
3
4
//Programa : Relé de Impulso SRG //Autor : Sinésio Gomes //Data :23/05/2023

Após os comentários, vem é realizado a declaração e estado inicial das variáveis, com isso cada pino será associados á um componente, não sendo mais necessário saber qual pino está o componente.

5
6
7
8
9
10
11
12
// Definição das variáveis
int Rele_3 = 6; // Declara a variável "Rele" do tipo inteiro no endereço "6"
int Rele_4 = 7; // Declara a variável "Rele" do tipo inteiro no endereço "7" int botao = A1; //Declara a variável "botão" do tipo inteiro no endereço "A1" int funcaoa = 0; // Declara a variável "função a" com valor inicial 0 int funcaob = 0; // Declara a variável "função b" com valor inicial 0 int estado = 0; // Declara a variável "estado" com valor inicial 0
A terceira parte da programação é a estrutura do setup(). É nela que definimos quais componentes (pino) do Arduino serão utilizados como entradas e saídas e o estado inicial dos pinos de saída.

13
14
15
16
17
18
19
// Definição dos pinos de entradas
void setup() { pinMode (Rele_3, OUTPUT); //Define o Rele como saida pinMode (Rele_4, OUTPUT); //Define o Rele como saida pinMode (botao, INPUT); //Define o botão como entrada }


Por último, temos o loop(), que contém as instruções para acender e apagar as lâmpadas através dos reles conforme é acionado a chave.

20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// Programação principal
void loop() {funcaoa = digitalRead (botao); // ler o valor enviado pelo botão if ((funcaoa == HIGH) && (funcaob == LOW)) {(estado = estado +1); delay (500); // tempo apertando o botão } funcaob = funcaoa; if (estado > 3){ estado = 0; } // zera o contador switch (estado) { case 0: digitalWrite (Rele_3, LOW); // desliga o rele 3 digitalWrite (Rele_4, LOW); // desliga o Rele 4 break; case 1: digitalWrite (Rele_3, LOW); // desliga o rele 3 digitalWrite (Rele_4, HIGH); // desliga o Rele 4 break; case 2: digitalWrite (Rele_3, HIGH); // desliga o rele 3 digitalWrite (Rele_4, LOW); // desliga o Rele 4 break; case 3: digitalWrite (Rele_3, HIGH); // desliga o rele 3 digitalWrite (Rele_4, HIGH); // desliga o Rele 4 break; } }
Para esta aplicação foi utilizados a estrutura de decisão "Switch / Case" no Arduino
A estrutura de decisão condicional Switch / Case é utilizada para que seja possível escolher uma opção dentre várias existentes, eliminando a necessidade de se usar diversos if .. else encadeados. Isso simplifica a codificação do algoritmo, e facilita sua depuração e atualização. Assim, esse comando testa uma condição (“caso”), e dependendo do resultado, executará os códigos associados a cada caso.

Switch / Case – Sintaxe
A sintaxe do Switch / Case no Arduino é, como esperamos, a da linguagem C, como podemos ver a seguir:

switch <variável) {
 case <valor1>:
   comandos a executar
   break;
 case <valor2>:
   comandos a executar
   break;
 case <valor3>:
   comandos a executar
   break;
 case <valorN>: 
   comandos a executar
   break;
 default:
   comandos-padrão
   break;
}

O conteúdo da variável passada para a instrução switch é testado, sendo comparado com os valores de cada caso, e quando uma correspondência for encontrada (variável igual ao caso), os comandos referentes ao caso são executados. Se o primeiro caso não corresponder à variável, então o próximo é avaliado, e assim sucessivamente até que uma correspondência de valores seja encontrada. Caso nenhum caso corresponda, então os comandos do bloco default serão executados, por padrão.
Note o uso da instrução break; em cada caso. Ela é utilizada para encerrar as comparações caso um valor correspondente seja encontrado. Se essa instrução não for utilizada, mesmo que uma correspondência seja encontrada, o comando switch continuará a fazer comparações da variável com os casos seguintes, o que é desnecessário.

Arquivo do código fonte - Rele de impulso está disponível em:  23_05_04_Rele_de_Impulso_SRG. (PDF)

O arquivo do diagrama elétrico - Rele de impulso estará disponível em: 23_05_02_Rele_impulso_SRG (PDF).

Exercício proposto pelo Professor Murilo Henrique Miranda.

© Direitos de autor. 2023: Gomes; Sinésio Raimundo. Última atualização: 24/05/2023 

Nenhum comentário:

Postar um comentário