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 

terça-feira, 16 de fevereiro de 2021

EX25 - Programa: Sinalizador de Garagem com Arduino

 Iremos programar o controle de um sinalizador de garagem com duas lâmpadas por um botão pulsador. A aplicação terá uma chave, S0 que irá ligar as lâmpadas  na sequência: 01, 10 repetidas vezes. 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
Arquivo do código fonte - Rele de impulso está disponível em:  23_05_03_Sinalização_de_Garagem_SRG (PDF).

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

Exercício proposto pelo Professor Murilo Henrique Miranda.

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

segunda-feira, 15 de fevereiro de 2021

Aula 11 - Programação Arduino com "Shield Módulo Relé 5V de 4 Canais"

 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
Esquema de ligação da prática
Projetos com Arduino ou outras plataformas microcontroladas em que seja necessário fazer o controle de cargas AC. Caso o shield seja utilizado junto ao Arduino conectado à internet, torna-se possível controlar cargas AC através de uma página web, smartphone ou tablet.
Utilizar o Shield Módulo Relé 5V de 4 Canais em conjunto com o Arduino para controlar quatro lâmpadas através do envio de comandos a partir do monitor serial do ambiente de programação do Arduino.

 Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
const int pinoReleCh1 = 7; //PINO DIGITAL UTILIZADO PELO SHIELD RELÉ (CANAL 1)
const int pinoReleCh2 = 6; //PINO DIGITAL UTILIZADO PELO SHIELD RELÉ (CANAL 2)
const int pinoReleCh3 = 5; //PINO DIGITAL UTILIZADO PELO SHIELD RELÉ (CANAL 3)
const int pinoReleCh4 = 4; //PINO DIGITAL UTILIZADO PELO SHIELD RELÉ (CANAL 4)
 
int statusLampCh1 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO SHIELD RELÉ NO CANAL 1 (LIGADO / DESLIGADO)
int statusLampCh2 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO SHIELD RELÉ NO CANAL 2 (LIGADO / DESLIGADO)
int statusLampCh3 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO SHIELD RELÉ NO CANAL 3 (LIGADO / DESLIGADO)
int statusLampCh4 = 0; //VARIÁVEL QUE CONTROLA O ESTADO DO SHIELD RELÉ NO CANAL 4 (LIGADO / DESLIGADO)
 
void setup(){
  Serial.begin(9600); //INICIALIZA A SERIAL
  pinMode(pinoReleCh1, OUTPUT); //DEFINE O PINO COMO SAÍDA
  pinMode(pinoReleCh2, OUTPUT); //DEFINE O PINO COMO SAÍDA
  pinMode(pinoReleCh3, OUTPUT); //DEFINE O PINO COMO SAÍDA
  pinMode(pinoReleCh4, OUTPUT); //DEFINE O PINO COMO SAÍDA
  
  digitalWrite(pinoReleCh1, LOW); //SHIELD RELÉ INICIA DESLIGADO (CANAL 1)
  digitalWrite(pinoReleCh2, LOW); //SHIELD RELÉ INICIA DESLIGADO (CANAL 2)
  digitalWrite(pinoReleCh3, LOW); //SHIELD RELÉ INICIA DESLIGADO (CANAL 3)
  digitalWrite(pinoReleCh4, LOW); //SHIELD RELÉ INICIA DESLIGADO (CANAL 4)
}    
void loop(){
 
char c = Serial.read(); //VARIÁVEL RESPONSÁVEL POR RECEBER O CARACTERE DIGITADO NA JANELA SERIAL
 
if((c == 'a') && (statusLampCh1 == 0)){ //SE A LEITURA DO PINO FOR IGUAL A LOW E
    //VARIÁVEL statusLampCh1 FOR IGUAL A 0, FAZ
        digitalWrite(pinoReleCh1, HIGH); //LIGA O CANAL 1 DO SHIELD RELÉ (LÂMPADA ACENDE)
        Serial.println("Lampada 01 ligada");
        statusLampCh1 = 1; //VARIÁVEL RECEBE O VALOR 1
}else{//SENÃO, FAZ
      if((c == 'a') && (statusLampCh1 == 1)){ //SE A LEITURA DO PINO FOR IGUAL A LOW E
       //VARIÁVEL statusLampCh1 FOR IGUAL A 1, FAZ
            digitalWrite(pinoReleCh1, LOW); //DESLIGA O CANAL 1 DO SHIELD RELÉ (LÂMPADA APAGA)
            Serial.println("Lampada 01 desligada");
            statusLampCh1 = 0; //VARIÁVEL RECEBE O VALOR 0
        }
  }
 
  if((c == 'b') && (statusLampCh2 == 0)){ //SE A LEITURA DO PINO FOR IGUAL A LOW E
    //VARIÁVEL statusLampCh2 FOR IGUAL A 0, FAZ
        digitalWrite(pinoReleCh2, HIGH); //LIGA O CANAL 2 DO SHIELD RELÉ (LÂMPADA ACENDE)
        Serial.println("Lampada 02 ligada");
        statusLampCh2 = 1; //VARIÁVEL RECEBE O VALOR 1
}else{//SENÃO, FAZ
      if((c == 'b') && (statusLampCh2 == 1)){ //SE A LEITURA DO PINO FOR IGUAL A LOW E
       //VARIÁVEL statusLampCh2 FOR IGUAL A 1, FAZ
            digitalWrite(pinoReleCh2, LOW); //DESLIGA O CANAL 2 DO SHIELD RELÉ (LÂMPADA APAGA)
            Serial.println("Lampada 02 desligada");
            statusLampCh2 = 0; //VARIÁVEL RECEBE O VALOR 0
        }
  }  
if((c == 'c') && (statusLampCh3 == 0)){ //SE A LEITURA DO PINO FOR IGUAL A LOW E
    //VARIÁVEL statusLampCh3 FOR IGUAL A 0, FAZ
        digitalWrite(pinoReleCh3, HIGH); //LIGA O CANAL 3 DO SHIELD RELÉ (LÂMPADA ACENDE)
        Serial.println("Lampada 03 ligada");
        statusLampCh3 = 1; //VARIÁVEL RECEBE O VALOR 1
}else{//SENÃO, FAZ
      if((c == 'c') && (statusLampCh3 == 1)){ //SE A LEITURA DO PINO FOR IGUAL A LOW E
       //VARIÁVEL statusLampCh3 FOR IGUAL A 1, FAZ
            digitalWrite(pinoReleCh3, LOW); //DESLIGA O CANAL 3 DO SHIELD RELÉ (LÂMPADA APAGA)
            Serial.println("Lampada 03 desligada");
            statusLampCh3 = 0; //VARIÁVEL RECEBE O VALOR 0
        }
  }
  if((c == 'd') && (statusLampCh4 == 0)){ //SE A LEITURA DO PINO FOR IGUAL A LOW E
    //VARIÁVEL statusLampCh4 FOR IGUAL A 0, FAZ
        digitalWrite(pinoReleCh4, HIGH); //LIGA O CANAL 4 DO SHIELD RELÉ (LÂMPADA ACENDE)
        Serial.println("Lampada 04 ligada");
        statusLampCh4 = 1; //VARIÁVEL RECEBE O VALOR 1
}else{//SENÃO, FAZ
      if((c == 'd') && (statusLampCh4 == 1)){ //SE A LEITURA DO PINO FOR IGUAL A LOW E
       //VARIÁVEL statusLampCh4 FOR IGUAL A 1, FAZ
            digitalWrite(pinoReleCh4, LOW); //DESLIGA O CANAL 4 DO SHIELD RELÉ (LÂMPADA APAGA)
            Serial.println("Lampada 04 desligada");
            statusLampCh4 = 0; //VARIÁVEL RECEBE O VALOR 0
        }
  }
}