Semáforo são instrumentos luminosos utilizados para fazer controle de veículos e pedestres em ruas e avenidas, são usados três sinais luminosos, um vermelho que significa “PARE” e indica que os veículos que estão na via não podem seguir liberando os pedestres para atravessar a via, o segundo sinal é o amarelo que significa “ATENÇÃO” e indica que o sinal de vermelho de parada esta prestes a se acionado e os motoristas devem ficar atentos e por fim o verde que significa “SIGA” e libera o trafego para os veículos atravessar o cruzamento ou seguir pela via e impede que os pedestres atravessem.
Neste projeto iremos simular um semáforo e para isso usaremos LEDs, vermelho, amarelo e verde para representar cada sinal luminoso do semáforo onde cada um será acionado por um determinado tempo enquanto os outros dois ficarão apagados e seguirá nesse loop.
Componentes e Equipamentos | |
Descrição | Quantidade |
LED Verde 5mm | 1 |
LED Amarelo 5mm | 1 |
LED Vermelho 5mm | 1 |
Resistor 300Ω | 3 |
Hardware
O esquema do projeto terá na protoboard os três LEDs usados colocado lado a lado em uma mesma linha, em uma pequena distancia entre eles. A sequencia dos LEDs fica parecido com a de um semáforo, vermelho amarelo e verde respectivamente. Para evitar uma sobre carga sobre o LED e queima-los é preciso limitar a corrente de saída da porta digital do Arduino Uno que é de 40 mA(milliamperes) para isso usaremos resistores de 300Ω(ohms) no pino do ânodo(parte positiva do LED que pode ser identificado como a parte menor em seu invólucro ou corpo) para cada um dos três LEDs, pois como neste projeto de exemplo usamos LEDs de 5mm(milímetro) que varia de 1.9V(volts) do amarelo até 1.98V do vermelho que usam cada um uma corrente máxima de 10mA (milliamperes).
Se calcularmos a resistência para o amarelo usando a formula:
R (Resistência) = V(Tensão de aplicada – Tensão do Led) / I(Tensão aplicada em Amperes)
Assim teremos que dissipar 3.1V dos 5V da saída digital do Arduino Uno em que subtraímos os 1.9V de tensão do LED amarelo, e assim se dividirmos os 3.1 para os 0.01A (dos 10mA de alimentação do LED convertido em Amperes, ou seja dividimos por 1000 os 10mA) e obtemos 310Ω de resistência necessária. Poderíamos fazer este calculo também para o LED verde e vermelho e obteríamos valores de resistência variando dos 310Ω do amarelo para os 302Ω do vermelho, com tão pouca variação entre os valores das resistências podemos utilizar um mesmo valor para os três LEDs, e nesse caso usaremos o de 300Ω por ser um valor mais fácil de ser encontrado.
Vamos ligar o GND do Arduino na segunda linha da extremidade inferior da protoboard onde todos os furos são ligados entre si na horizontal, dessa forma tornamos acessível o GND em toda essa linha. Nessa linha ligamos os catodo(negativo) dos LEDs.
O esquema do projeto é este:
Software
Em nosso código iniciaremos o loop de nosso semáforo com um dos LEDs aceso enquanto os outros dois ficam desligados, iniciamos com o sinal vermelho e daremos para ele um tempo de 8 segundos, bem pouco se compararmos com os reais, mais está bom para se fazer um teste. Em seguida desligamos o sinal vermelho para acionarmos o sinal Verde com um tempo de 7 segundos e assim que este tempo se esgotar com um tempo bem menor acionamos nosso sinal de alerta com o LED amarelo e desligamos o LED vermelho, 3 segundos esta boa para o sinal de alerta. No final desligamos tudo, pois no próximo loop a primeira coisa que será feita é ligar o LED vermelho sem se preocupar com os outros dois.
Veja o código:
#define LEDVERMELHO 2
#define LEDAMARELO 3
#define LEDVERDE 4
void setup(){
pinMode(LEDVERMELHO, OUTPUT);
pinMode(LEDAMARELO, OUTPUT);
pinMode(LEDVERDE, OUTPUT);
digitalWrite(LEDVERMELHO, LOW);
digitalWrite(LEDAMARELO, LOW);
digitalWrite(LEDVERDE, LOW);
}
void loop(){
digitalWrite(LEDVERMELHO, HIGH);
delay(8000);
digitalWrite(LEDVERMELHO, LOW);
digitalWrite(LEDVERDE, HIGH);
delay(7000);
digitalWrite(LEDAMARELO, HIGH);
digitalWrite(LEDVERDE, LOW);
delay(3000);
digitalWrite(LEDAMARELO, LOW);
}
Utilizamos o comando #define do c para definimos as constantes referente ao numero das portas digitais que serão utilizados para alimentar os LEDs, com essas constantes fica mais fácil saber quais LEDS estão em quais portas.
Na função de inicialização do Arduino, setup (), iniciamos as portas com a função pinMode() como pinos de saída OUTPUT, afinal estaremos alimentando os LEDS por essas portas. Para garantirmos que quando iniciarmos o nosso semáforo os LEDs não acendam todos de uma vez vamos executar a função digitalWrite() para desligar com o parâmetro LOW, isso para todos o LEDs.
Assim podemos iniciar nosso loop na função padrão do Arduino para isso, o loop() , nela iniciamos ligando o LED vermelho com digitalWrite(LEDVERMELHO, HIGH) e damos um tempo em milissegundos usando delay() até que o próximo comando seja executado, e assim executamos digitalWrite() para o LED vermelho novamente , só que dessa vez com o parâmetro LOW para desligar esse LED e ligar o próximo LED e assim por diante até que todos sejam executado e a função loop() seja reiniciada religando o LED vermelho.