quinta-feira, 18 de fevereiro de 2021

EX28 - Programa: Liga motor com botões no Arduino

O programa abaixo, liga, mantém e desliga o rele K1, que irá acionar o motor trifásico, com botões ligado na placa Arduino. 

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

// C++ code //Programa : Liga Motor e Sinaleiros //Autor : Sinésio Gomes //Data :04/11/2025

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
19
20
21
22
// Definição dos pinos de entrada
#define B0 2 // Nome do pino 2
#define RT 3 // Nome do pino 3
#define S0 4 // Nome do pino 4
#define S1 5 // Nome do pino 5

// Definição dos pinos de saída
#define K1 6 // Nome do pino 6 #define Led_Vd 7 // Nome do pino 7 #define Led_Vm 8 // Nome do pino 8 #define Led_Am 9 // Nome do pino 9 #define Buzzer 10 // Nome do pino 10 // Declaração do tipo e estado inicial das variáveis
bool estado_B0 = 0; // Reset do pino 2 bool estado_RT = 0; // Reset do pino 3 bool estado_S0 = 0; // Reset do pino 4 bool estado_S1 = 0; // Reset do pino 5

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
36
37
38
39
void setup()
{
//Define a porta das chaves como entradas e dos led,s como saida pinMode(B0, INPUT); // Pinos como entradas pinMode(RT, INPUT); pinMode(S0, INPUT); pinMode(S1, INPUT); pinMode(K1, OUTPUT); // Pinos como saídas pinMode(Led_Vd, OUTPUT); pinMode(Led_Vm, OUTPUT); pinMode(Led_Am, OUTPUT); pinMode(Buzzer, OUTPUT); digitalWrite (K1, 0); // Reset dos pinos digitalWrite (Led_Vd, 0); digitalWrite (Led_Vm, 0); digitalWrite (Led_Am, 0); digitalWrite (Buzzer, 0); }

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

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

void loop() // Laço principal
{ estado_B0 = digitalRead (B0); // Lê entrada B0 - Emergência estado_RT = digitalRead (RT); // Lê entrada RT - Rele Térmico estado_S0 = digitalRead (S0); // Lê entrada S0 - Desliga estado_S1 = digitalRead (S1); // Lê entrada S1 - Liga if (estado_S1 == 1) {digitalWrite (Led_Vd, 1); digitalWrite (Led_Vm, 0);} if (estado_S0 == 0) { digitalWrite (Led_Vd, 0); digitalWrite (Led_Vm, 1);} if (estado_RT == 1) {digitalWrite (Led_Am, 0);} else {digitalWrite (Led_Am,1); digitalWrite (Led_Vm,0); digitalWrite (Led_Vd,0); } if (estado_B0 == 1) {digitalWrite (Buzzer, 1);} else {digitalWrite (Buzzer,0); digitalWrite (Led_Am,0); digitalWrite (Led_Vm,0); digitalWrite (Led_Vd,0); } }

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:  25_10_02_Controle_de_Motor_SRG. (PDF)

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

Nenhum comentário:

Postar um comentário