Barra de LEDs

Barra de LEDs
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:
  • 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)

Barra de LEDs
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  


Barra de LEDs


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.