segunda-feira, 8 de fevereiro de 2021

EX19 - Programa: Controle de Led's e Buzzer por chaves com Arduino

Figura 01 - Controle de Led's por chaves 
Iremos programar o controle de Led's por chaves. A aplicação terá três chaves, S0 irá ligar o Led 0, S1irá piscar Led 1 e Led 2 alternadamente, e a terceira irá controlar o buzzer por alguns segundos.

Primeiro, atribuímos os novos pinos de chaves na variáveis ​​e configuramos como entradas e Led's como saídas, depois associamos cada chave á uma saída para definir o funcionamento.

Para esta aplicação utilizei a "Multi-Funcion Shield"  sem o uso de uma biblioteca Arduino. Se você está elaborando projetos simples que exigem interruptores, leds e uma campainha, talvez não precise de tudo isso, então este guia não tem como objetivo substituir o uso da biblioteca, mas fornecer ao usuário uma maneira de acessar facilmente os recursos da placa  "Multi-Funcion Shield".  
Figura 02 - "Multi-Funcion Shield" 
Primeiro, vamos examinar os componentes instalados:

  • Um "Reset button" instalado para reinicializar o Arduino conectado.
  • Três "Push buttons"  botões de pressão definidos pelo usuário conectado nos pinos de entradas analógicas A1, A2, A3.
  • Um "Potentiometer" para que você insira uma tensão variável no Arduino, conectado ao pino de entrada analógica A0.
  • Um "Buzzer" que não é acionado diretamente de um pino do Arduino, mas controlado por um transistor conectado ao pino digital D3.
  • Um "LED display" de 4 dígitos e 7 segmentos que é acionado por meio de registradores de deslocamento 74HC595 para selecionar o dígito e os segmentos desse dígito a serem energizados.
  • Quatro LEDs montados na placa (pinos digitais D10, D11, D12, D13).
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

//Programa : Minuteria e pisca Leds com Arduino
// Autor : Sinésio Gomes
// Data : 18/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
13
14
15
16
17
18

// Definição dos pinos de entradas
#define S0 A1 // Nome do pino A1
#define S1 A2 // Nome do pino A2 #define S2 A3 // Nome do pino A3

// Definição dos pinos de saídas
#define Led_Vm 13 // Nome do pino 13 #define Led_Vd 12 // Nome do pino 12 #define Buzzer 3 // Nome do pino 3 // Declaração do tipo e estado inicial das variáveis
bool estado_S0 = 0; // Reset do pino A1 bool estado_S1 = 0; // Reset do pino A2 bool estado_S2 = 0; // Reset do pino A3

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.

20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

void setup()
{
//Definição das chaves como entradas e dos led,s como saida pinMode(S0, INPUT); // Pinos como entradas pinMode(S1, INPUT); pinMode(S2, INPUT);
pinMode(Led_Vm, OUTPUT); // Pinos como saídas pinMode(Led_Vd, OUTPUT); pinMode(Buzzer, OUTPUT);
  //Apaga os led,s da saída digitalWrite (Led_Vd, 1); // Reset dos pinos digitalWrite (Led_Vm, 1); digitalWrite (Buzzer, 1); }
 

Por último, temos o loop(), que contém as instruções para acender e apagar os led's conforme são acionados as chaves, cada chave terá uma função diferente.

37
38
39
40
41
42
43
44

75
void loop() // Laço principal
{
  //Leitura das chaves
estado_S0 = digitalRead (S0); // Lê entrada S0
estado_S1 = digitalRead (S1); // Lê entrada S1 estado_S2 = digitalRead (S2); // Lê entrada S2
      
  // Agora será escrito a função de cada chave ...
 
}

Para esta estrutura de programação iremos utilizar o "if". O if é uma das estruturas mais básicas de programação em geral. O "if" significa "se" em inglês, e é exatamente isso que ele faz: ele verifica uma expressão e, apenas se ela for verdadeira, executa um conjunto de comandos. Em linguagem natural, ele executa uma lógica do tipo: "se isso for verdadeiro, então faça aquilo". Quando usamos um "if", ele segue o seguinte formato:
if(condição) { ... }
A lógica é muito simples: sempre que a condição for verdadeira, os comandos entre { e } são executados, caso contrário o programa prossegue sem executá-los. Vamos ver então como fica a função.

Função condicional da primeira chave, que liga 01 led, dentro do "loop()" ...
45
46
47
48

// Função da primeira chave, se acionada
if (estado_S0 == 0) { digitalWrite (Led_Vd, 1); digitalWrite (Led_Vm, 0);
                     }

Função condicional da segunda chave, que pisca dois Led's três vezes, dentro do "loop()" ...
49
50
51
52
53
54
55

65

// Função da segunda chave, se acionada
if (estado_S1 == 0) {  digitalWrite (Led_Vd, 0);
digitalWrite (Led_Vm, 1);
delay(500);
digitalWrite (Led_Vd, 1);
digitalWrite (Led_Vm, 0);
delay(500);
// A estrutura de programação acima irá se repetir três vezes.
                     }


Agora iremos utilizar o "if-else". O if-else, também conhecido como if-then-else, pode ser visto como uma extensão do comando if. Else em inglês significa "caso contrário", e ele faz exatamente o que o nome diz: "se isso for verdadeiro, então faça aquilo, caso contrário, faça outra coisa". Ele segue o seguinte formato:
if(condição) { ...  } else { ... }
Para a função condicional da terceira chave, que liga o Buzzer por 5 segundos, e apagar os Led's dentro do "loop()" ...
65
66
67
68
69
70
71
72
73
74
75
// Função da terceira chave, se acionada
if (estado_S2 == 1) {digitalWrite (Buzzer, 1);
                    }

else {digitalWrite (Buzzer,0);
delay(5000);
digitalWrite (Led_Vd, 1);
digitalWrite (Led_Vm, 1);
}
}

Arquivo do código fonte - Controle de Led's por chaves está disponível em:  23_05_02_Controle_de_Led's_SRG. (PDF)

O arquivo do diagrama elétrico - Semáforo de duas vias estará disponível em: 23_05_02_Controle_de_Led's_SRG (PDF).

Exercício proposto pelo Professor Murilo Henrique Miranda.

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

Nenhum comentário:

Postar um comentário