A Barra de LEDs é um componente com várias aplicações tanto na área comercial como industrial. Basicamente, é utilizado como indicador de nível de uma forma fácil e compreensível. Não possui os terras ligados, ou seja, os catodos não tem um ponto em comum. Logo, todos os pinos da barra de LEDs terão que ser usados.
A aplicação deste componente é bem simples de fácil conexão e não necessita de código específico para seu funcionamento.
Neste projeto, a Barra de LEDs será utilizada no controle de um Motor CC, similar a outro projeto já aqui apresentado.
Componentes:
Após a conexão dos fios nos componentes carregue o código:
Neste projeto, a Barra de LEDs será utilizada no controle de um Motor CC, similar a outro projeto já aqui apresentado.
Componentes:
- 01 Arduino Mega
- 01 Motor CC de 5V
- 01 CI controlador de motor L293D ou SN754410 ou Ponte H L298N
- 01 Push Button
- 01 Potenciômetro
- 12 Resistores de 220Ω
- 02 LEDs de cores diferentes
- 01 Resistor de 10KΩ (pull-down)
Após a conexão dos fios nos componentes carregue o código:
1
2
3 #define
botaoPin 2 // Entrada do push button
4 #define
motorPin1 3 // Entrada 1 do L293D
5 #define
motorPin2 4 // Entrada 2 do L293D
6 #define
velocPin 5 // Pino de Ativação 1 do L293D
7 #define
potPin A0 // Potenciômetro no pino analógico 0
8 #define
LedVerdPin 6 // LED verde
9 #define
LedVermPin A1 // LED vermelho (porta
analógica)
10 //#define LedVermPin 7// LED vermelho
11
12 int valorVeloc = 0; // Uma variável para armazenar o valor de velocidade
atual
13 int valorVeloc_M = 0;
14
15 boolean leBotao(int porta); // Protótipo função que lê o botão.
16
17 boolean sentido = false; // Define o sentido de rotação do
motor.
18
19 byte LedPin[] = {22, 23, 24, 25, 26, 27, 28, 29, 30, 31}; // Cria um array para os
pinos dos LEDs.
20
21 void parada(float valorVeloc_M); // Protótipo função que controla a parada do motor.
22 void liga1(); // Protótipo função que liga o motor no sentido 1.
23 void liga2(); // Protótipo função que liga o motor no sentido 2.
24
25 void BarraLed(float valorVeloc_M); // Protótipo
função que acende a barra de LEDs.
26 void BarraLedLOW(); // Protótipo função que apaga a barra de LEDs.
27
28 void setup()
29 {
30 pinMode(botaoPin, INPUT); // Define o pino da chave como INPUT
31 pinMode(motorPin1, OUTPUT); // Define os pinos remanescentes como saída
32 pinMode(motorPin2, OUTPUT);
33 pinMode(velocPin, OUTPUT);
34 pinMode(LedVerdPin, OUTPUT);
35 pinMode(LedVerdPin, OUTPUT);
36
37
38 for(int i = 0; i < 10; i++) // Define pinos de saída
39 {
40 pinMode(LedPin[i], OUTPUT);
41
42 }
43 }
44
45 void loop()
46 {
47
48 valorVeloc = analogRead(potPin);
49 valorVeloc_M = map(valorVeloc, 0, 1023, 0, 255);
50 analogWrite(velocPin, valorVeloc_M); // escreve a velocidade
para o pino de Ativação 1
51
52 if (leBotao(botaoPin)) /* Se
botão for apertado retorna true, se não for, retorna false. */
53 {
54 digitalWrite(LedVerdPin, LOW);
55 // digitalWrite(LedVermPin, LOW); outra opção
56 analogWrite(LedVermPin, 0);
57 BarraLedLOW();
58 parada(valorVeloc_M);
59 sentido = !sentido;
60 }
61
62
63 if (sentido)
64 {
65 digitalWrite(LedVerdPin, HIGH);
66 //digitalWrite(LedVermPin, LOW);
67 analogWrite(LedVermPin, 0);
68 liga1();
69 BarraLed(valorVeloc_M);
70
71 }
72 else
73 {
74 analogWrite(LedVermPin, 255);
75 digitalWrite(LedVerdPin, LOW);
76 //digitalWrite(LedVermPin, HIGH);
77 liga2();
78 BarraLed(valorVeloc_M);
79 }
80
81 delay(20);
82 }
83
84 boolean leBotao(int porta)
85 {
86 static boolean estadoAnterior[14] =
{true,true,true,true,true,true,true,true,true,true,true,true,true,true};
87 /* static --> para manter a variável na memória
88 estadoAnterior[14] --> É um artifício de escolha para qualquer das 14
primeiras portas digitais*/
89 boolean estadoBotao = digitalRead(porta);
90 boolean ligado = false;
91
92 if (!estadoBotao
&& estadoAnterior[porta]) /* Esse controle permite que, mesmo o botão
permanecendo apertado, vai ser considerado apenas uma vez.*/
93 {
94 ligado = true;
95 }
96
97 estadoAnterior[porta] = estadoBotao;
98
99 return ligado;
100 }
101
102 void parada(float valorVeloc_M)
103 {
104 int i, v;
105
106 v = int(valorVeloc_M);
107
108 for(i = v; i >= 0; i--)
109 {
110
analogWrite(velocPin, i); // escreve a velocidade para o pino de Ativação 1
111
delay(20);
112 }
113 delay(2000);
114 }
115
116 void liga1() // Esta função liga o motor no sentido 1
117 {
118
digitalWrite(motorPin1, HIGH);// define a Entrada 1 do L293D como baixa.
119
digitalWrite(motorPin2, LOW); // define a Entrada 2 do L293D como alta.
120 }
121
122 void liga2() // Esta função liga o motor no sentido 2
123 {
124 digitalWrite(motorPin1, LOW); // define a Entrada 1 do L293D como baixa.
125
digitalWrite(motorPin2, HIGH); // define a Entrada 2 do L293D como alta.
126 }
127
128 void BarraLed(float valorVeloc_M)
129 {
130 int valor;
131 valor = int(valorVeloc_M);
132
133 if(valor < 80)
134 {
135
BarraLedLOW();
136 }
137
138 if((valor >= 80)&&(valor) < 100)
139 {
140
digitalWrite(LedPin[0], HIGH);
141
digitalWrite(LedPin[1], LOW);
142 digitalWrite(LedPin[2], LOW);
143
digitalWrite(LedPin[3], LOW);
144
digitalWrite(LedPin[4], LOW);
145
digitalWrite(LedPin[5], LOW);
146
digitalWrite(LedPin[6], LOW);
147
digitalWrite(LedPin[7], LOW);
148
digitalWrite(LedPin[8], LOW);
149
digitalWrite(LedPin[9], LOW);
150 }
151
152 if((valor >= 120)&&(valor) < 140)
153 {
154
digitalWrite(LedPin[0], HIGH);
155
digitalWrite(LedPin[1], HIGH);
156 digitalWrite(LedPin[2], LOW);
157
digitalWrite(LedPin[3], LOW);
158
digitalWrite(LedPin[4], LOW);
159
digitalWrite(LedPin[5], LOW);
160
digitalWrite(LedPin[6], LOW);
161
digitalWrite(LedPin[7], LOW);
162
digitalWrite(LedPin[8], LOW);
163
digitalWrite(LedPin[9], LOW);
164 }
165
166 if((valor >= 140)&&(valor) < 160)
167 {
168
digitalWrite(LedPin[0], HIGH);
169
digitalWrite(LedPin[1], HIGH);
170
digitalWrite(LedPin[2], HIGH);
171
digitalWrite(LedPin[3], LOW);
172
digitalWrite(LedPin[4], LOW);
173
digitalWrite(LedPin[5], LOW);
174
digitalWrite(LedPin[6], LOW);
175
digitalWrite(LedPin[7], LOW);
176
digitalWrite(LedPin[8], LOW);
177
digitalWrite(LedPin[9], LOW);
178 }
179 if((valor >= 160)&&(valor) < 170)
180 {
181
digitalWrite(LedPin[0], HIGH);
182
digitalWrite(LedPin[1], HIGH);
183 digitalWrite(LedPin[2], HIGH);
184
digitalWrite(LedPin[3], HIGH);
185
digitalWrite(LedPin[4], LOW);
186
digitalWrite(LedPin[5], LOW);
187
digitalWrite(LedPin[6], LOW);
188
digitalWrite(LedPin[7], LOW);
189
digitalWrite(LedPin[8], LOW);
190
digitalWrite(LedPin[9], LOW);
191 }
192
193 if((valor >= 170)&&(valor) < 180)
194 {
195
digitalWrite(LedPin[0], HIGH);
196
digitalWrite(LedPin[1], HIGH);
197 digitalWrite(LedPin[2], HIGH);
198
digitalWrite(LedPin[3], HIGH);
199
digitalWrite(LedPin[4], HIGH);
200
digitalWrite(LedPin[5], LOW);
201
digitalWrite(LedPin[6], LOW);
202
digitalWrite(LedPin[7], LOW);
203
digitalWrite(LedPin[8], LOW);
204
digitalWrite(LedPin[9], LOW);
205 }
206
207 if((valor >= 180)&&(valor) < 190)
208 {
209
digitalWrite(LedPin[0], HIGH);
210
digitalWrite(LedPin[1], HIGH);
211
digitalWrite(LedPin[2], HIGH);
212
digitalWrite(LedPin[3], HIGH);
213
digitalWrite(LedPin[4], HIGH);
214
digitalWrite(LedPin[5], HIGH);
215
digitalWrite(LedPin[6], LOW);
216
digitalWrite(LedPin[7], LOW);
217
digitalWrite(LedPin[8], LOW);
218
digitalWrite(LedPin[9], LOW);
219 }
220
221 if((valor >= 190)&&(valor) < 200)
222 {
223
digitalWrite(LedPin[0], HIGH);
224
digitalWrite(LedPin[1], HIGH);
225
digitalWrite(LedPin[2], HIGH);
226
digitalWrite(LedPin[3], HIGH);
227
digitalWrite(LedPin[4], HIGH);
228
digitalWrite(LedPin[5], HIGH);
229
digitalWrite(LedPin[6], HIGH);
230
digitalWrite(LedPin[7], LOW);
231
digitalWrite(LedPin[8], LOW);
232
digitalWrite(LedPin[9], LOW);
233 }
234
235 if((valor >= 200)&&(valor) < 210)
236 {
237
digitalWrite(LedPin[0], HIGH);
238
digitalWrite(LedPin[1], HIGH);
239
digitalWrite(LedPin[2], HIGH);
240
digitalWrite(LedPin[3], HIGH);
241
digitalWrite(LedPin[4], HIGH);
242
digitalWrite(LedPin[5], HIGH);
243
digitalWrite(LedPin[6], HIGH);
244
digitalWrite(LedPin[7], HIGH);
245
digitalWrite(LedPin[8], LOW);
246
digitalWrite(LedPin[9], LOW);
247 }
248
249 if((valor >= 210)&&(valor) < 220)
250 {
251
digitalWrite(LedPin[0], HIGH);
252
digitalWrite(LedPin[1], HIGH);
253
digitalWrite(LedPin[2], HIGH);
254
digitalWrite(LedPin[3], HIGH);
255
digitalWrite(LedPin[4], HIGH);
256
digitalWrite(LedPin[5], HIGH);
257
digitalWrite(LedPin[6], HIGH);
258
digitalWrite(LedPin[7], HIGH);
259
digitalWrite(LedPin[8], HIGH);
260
digitalWrite(LedPin[9], LOW);
261 }
262
263 if(valor >= 220)
264 {
265
digitalWrite(LedPin[0], HIGH);
266
digitalWrite(LedPin[1], HIGH);
267 digitalWrite(LedPin[2], HIGH);
268
digitalWrite(LedPin[3], HIGH);
269
digitalWrite(LedPin[4], HIGH);
270
digitalWrite(LedPin[5], HIGH);
271
digitalWrite(LedPin[6], HIGH);
272
digitalWrite(LedPin[7], HIGH);
273
digitalWrite(LedPin[8], HIGH);
274
digitalWrite(LedPin[9], HIGH);
275 }
276
277 }
278
279 void BarraLedLOW()
280 {
281
digitalWrite(LedPin[0], LOW);
282
digitalWrite(LedPin[1], LOW);
283
digitalWrite(LedPin[2], LOW);
284
digitalWrite(LedPin[3], LOW);
285
digitalWrite(LedPin[4], LOW);
286
digitalWrite(LedPin[5], LOW);
287
digitalWrite(LedPin[6], LOW);
288
digitalWrite(LedPin[7], LOW);
289
digitalWrite(LedPin[8], LOW);
290 digitalWrite(LedPin[9], LOW);
291 }
292
Depois de carregado o código, ligue a fonte de alimentação do motor, comece a rodar o potenciômetro, verifique o comportamento da Barra de LEDs. Talvez, haja a necessidade de alterar a variável "valor" do código de acordo com cada tipo de potenciômetro.
Feito isso podemos observar que quando apertamos o botão o motor para lentamente, tanto a Barra de LEDs como o LED que indica o sentido de rotação se apagam. E após 2 segundos o motor gira no sentido contrário com a mesma intensidade anterior acendendo a Barra de LEDs e o LED indicador do outro sentido.