Sequenciador de leds

sequenciador leds
Sequenciador leds com Arduino

ARDUINO UNO
R= 220 Ω
Led = 1,7V 15mA
Mas pretende-se vários leds que permitam uma sequência, neste caso, vamos definir e dar nome a cada um deles. Definir cada um dos pinos como saída e criar o ciclo como entendermos.

No circuito, se apenas for construído para gerador uma sequência com um único led aceso, pode ser usada um único resistor ligado à massa (-), no entanto, se pretendermos alterar a "programação" para que simultâneamente fiquem acesos diversos leds, a sua luminosidade e parâmetros de funcionamento ficam fora dos valores normais danificando o circuito mais tarde ou mais cedo.

Podem ser usados mais leds em série ou nas restantes saídas do arduino, é muito importante não utilizar leds em paralelo sem resistor na mesma saída



int led = 6;
int leda = 2;
int ledb = 3;
int ledc = 4;
int ledd = 5;

void setup() {

pinMode(led, OUTPUT);
pinMode(leda, OUTPUT);
pinMode(ledb, OUTPUT);
pinMode(ledc, OUTPUT); 
pinMode(ledd, OUTPUT);
}
void loop() {
// o led fica aceso durante o tempo de delay e apaga
digitalWrite(leda, HIGH);   
delay(100);             
digitalWrite(leda, LOW);   
digitalWrite(ledb, HIGH);   
delay(100);             
digitalWrite(ledb, LOW);   
digitalWrite(ledc, HIGH);   
delay(100);             
digitalWrite(ledc, LOW);   
digitalWrite(ledd, HIGH);   
delay(100);             
digitalWrite(ledd, LOW);   
digitalWrite(led, HIGH);  
delay(100);              
digitalWrite(led, LOW); 
digitalWrite(ledd, HIGH);   
delay(100);             
digitalWrite(ledd, LOW);   
digitalWrite(ledc, HIGH);   
delay(100);             
digitalWrite(ledc, LOW);   
digitalWrite(ledb, HIGH);   
delay(100);             
digitalWrite(ledb, LOW);   
digitalWrite(leda, HIGH);   
delay(100);             
digitalWrite(leda, LOW);   
}

Se o objetivo é apenas usar uma sequência o código pode ser melhorado


void setup() {                
  pinMode(2, OUTPUT);    
  pinMode(3, OUTPUT);   
  pinMode(4, OUTPUT);  
  pinMode(5, OUTPUT);      
  pinMode(6, OUTPUT);  
}

void loop() 
{
  int x,status; 
// delay define o tempo em que o led está aceso em milisegundos
// um ciclo no sentido de 2 a 6 
 for (x=2; x<=6; x++)
  {
    digitalWrite(x, HIGH);   
    delay(100);              
    digitalWrite(x, LOW);    
  }
// um ciclo no sentido de 6 a 2 
// pode ser anulado se pretendermos apenas um sentido  
 for (x=6; x>=2; x--)
  {
    digitalWrite(x, HIGH);  
    delay(100);              
    digitalWrite(x, LOW);   
  }
}

Variar a velocidade da sequência

variar velocidade
Variar Velocidade

O arduino pode ler a tensão na entrada analógica(A0 por exemplo), se variarmos essa tensão e definirmos o delay para o valor da leitura, a velocidade da sequência varia. Para isso, basta colocarmos um potenciómetro entre +5V e o GND, o pino intermédio irá ligar à entrada A0.
No entanto, quando o valor é muito baixo, o delay será muito baixo ficando todos os leds a piscar a uma velocidade muito elevada não se percebendo a sequência. Se o objetivo é ter apenas a sequência, pode ser inserida uma resistência (R1) que, quanto maior o valor, menor será a velocidade.

Vamos alterar o loop para que o delay varie em função da leitura da entrada analógica.

void loop() 
{
int sensorValue = analogRead(A0);
// como o valor é elevado 0-1023
// evita-se velocidades lentas 
// .12 deve ser ajustado 
float voltage = sensorValue * .12; 

  int x,status;
 
  for (x=2; x<=6; x++)
  {
    digitalWrite(x, HIGH);   
    delay(voltage);              
    digitalWrite(x, LOW);    
 
  }
 for (x=6; x>=2; x--)
  {
    digitalWrite(x, HIGH);  
    delay(voltage);              
    digitalWrite(x, LOW);   
 
  }

}
sequencial 5 canais

Ligar vários leds na mesma saída

Ao contrário de muitos circuitos que se encontram pela internet, cada saída do arduino não suporta um número "infinito" de leds como alguns projetos querem fazer crer. Na internet encontram-se muitos projetos que são apenas teóricos, simplesmente não funcionam com o número de leds que lhe colocaram.

Para ligar vários leds na mesma saída, pode ser usado um transistor que, neste caso, vai suportar a corrente e não a placa do arduino.

ligação multiplos led com transistor

Como calcular os valores para 5, 6 ou 20 leds?

Os transistores NPN de silício têm uma particularidade, seja qual for a corrente, entre a base e o emissor a tensão é de 0,7V.
Vamos simular um circuito para 4 Leds. Em primeiro lugar vamos calcular o consumo do circuito, supondo que vamos usar leds de 1,8V e 20mA, necessitamos de N(Número de leds), a tensão necessário será de 1.8V x N = 1.8 x 4 =7.2V, temos de ter mais de 7,2V na alimentação.
Podemos assim calcular o valor de R. Se a alimentação for de 12V (Vcc) e o consumo 20mA, o valor de R será:

R=(Vcc-Vled)/IR
R=(12V-7.2V)/0.02A= 240Ω

(220Ω valor comercial mais próximo)

Como sabemos a corrente que atravessa o resistor (IR), neste caso 20mA, podemos calcular o valor da corrente de base do transistor e assim calcular o valor de RB. Primeiro calculamos a corrente de base do transistor IC= IB x HFE(ganho) Na folha técnica do transistor podemos verificar o HFE típico, por exemplo, BC548 tem um ganho(HFE) de 100. Assim a corrente de base (IB) será IB = IC / HFE teremos:

IB = 0.02A / 100 = 0.0002A.
Podemos assim calcular o valor de RB,

RB=(VIN - VBE)/IB
RB=(5V-0.7V)/0.0002A=4.3/0.0002=21500Ω

(Valor comercial mais próximo 22KΩ)

Para uma alimentação de 12V, com 4 Leds de 1,8V e 20mA. precisamos de um resistor (RB) de 22KΩ na base de cada transistor e um resistor(R) nos leds de 220Ω. O transistor utilizado tem de suportar a corrente e a tensão. Um BC548 pode suportar até 5 Leds com um consumo de 20mA e uma alimentação de 2V.


Artigos Relacionados