Projeto 4 – Semáforo

Já está sabendo tudo de LEDs e como ligá-los? Então vamos montar esse projeto maior para juntar várias coisas que aprendemos até agora.

Este projeto irá simular um semáforo de carros e pedestres. Serão três LEDs para os carros e dois para os pedestres. A sequência inicia com o LED verde dos carros aceso e vermelho para pedestres. O semáforo dos carros então passa para cor amarela indo para cor vermelha, juntamente com o LED verde de pedestres. O LED vermelho dos pedestres então pisca e a sequência volta ao início.

Funcionamento projeto 4

Material necessário

2x LED Vermelho 5mm
2x LED Verde 5mm
1x LED Amarelo 5mm
5x Resistor 220 ohm
1x Protoboard
11x Jumper macho-macho
1x Cabo USB
1x Placa Uno

Montagem do circuito

O grande desafio deste projeto está em montar os LEDs corretamente, pois o circuito consiste de mais LEDs, mais resistores e mais jumpers. Agora faremos uso de uma das linhas inferiores da protoboard, conectando o pino GND (negativo) do Arduino na linha azul da protoboard.

Circuito semáforo com Arduino

A maioria das pessoas, mesmo makers experientes, tem que voltar para esta parte do projeto e refazer, não se preocupe. Se você conseguir fazer a montagem funcionar na primeira tentativa, parabéns!

Programa Projeto 4 Semáforo

Esse código, apesar de parecer extenso, é simples. Não tem nada que ainda não foi visto neste guia. Procure entender o código e ver o que irá acontecer a partir dele.

Como todo código, começamos definindo as variáveis, os pinos utilizados e, por fim, o loop() que fica repetindo continuamente.

Se estiver com problemas para entender, você pode ler os comentários dentro do programa e/ou voltar nos projetos 1 e 2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Projeto 4 - Semáforo
 
int pedVerde = 9;  // Define os pinos que serao utilizados
int pedVermelho = 8;
int carroVerde = 12;
int carroAmarelo = 11;
int carroVermelho = 10;
 
void setup() // Define os pinos como saidas
{
  pinMode(pedVerde, OUTPUT);
  pinMode(pedVermelho, OUTPUT);
  pinMode(carroVerde, OUTPUT);
  pinMode(carroAmarelo, OUTPUT);
  pinMode(carroVermelho, OUTPUT);
 
  digitalWrite(carroVerde, HIGH); // Coloca na posição inicial. Somente o verde dos carros e o vermelho dos pedestres acesos
  digitalWrite(carroVerde, LOW);
  digitalWrite(carroVerde, LOW);
  digitalWrite(pedVerde, LOW);
  digitalWrite(pedVermelho, HIGH);
}
 
void loop()
{
  digitalWrite(carroVerde, HIGH); // Acende o verde dos carros e o vermelho dos pedestres
  digitalWrite(pedVermelho, HIGH); 
  delay(5000); // Aguarda 5 segundos
  digitalWrite(carroVerde, LOW);
  digitalWrite(carroAmarelo, HIGH); // apaga o verde dos carros e acende o amarelo
  delay(3000); // aguarda mais 3 segundos
  digitalWrite(carroAmarelo, LOW); // apaga o amarelo dos carros e acende o vermelho
  digitalWrite(carroVermelho, HIGH);
  digitalWrite(pedVermelho, LOW); // apaga o vermelho dos pedestres e acende o verde
  digitalWrite(pedVerde, HIGH);
  delay(5000);  // aguarda mais 5 segundos
  digitalWrite(pedVerde, LOW);
  for(int x = 0; x<5; x++) // Pisca o vermelho dos pedestres
  {
    digitalWrite(pedVermelho, HIGH);
    delay(250);
    digitalWrite(pedVermelho, LOW);
    delay(250);
  }
  digitalWrite(carroVermelho, LOW); 
}

Conseguiu pegar a lógica do programa? Você pode alterá-la conforme bem entender e fazer a sua própria lógica de semáforo!

Possíveis erros

Caso o projeto não funcione verifique alguns dos possíveis erros:

  • Verifique se os jumpers estão na mesma coluna dos terminais dos componentes, fazendo assim a conexão;
  • Verifique se os jumpers estão ligados nos pinos corretos no Arduino;
  • Verifique se o LED não está conectado invertido;
  • Verifique se o código carregou na placa através da IDE Arduino.

Desafios

Veja abaixo alguns desafios que você pode tentar!

  • Monte o circuito de uma maneira alternativa usando outros furos e posições na protoboard;
  • Mude o tempo que o LED amarelo dos veículos permanece aceso mudando o valor na programação na linha delay(3000); por exemplo: delay(6000);

Última atualização: domingo, 14 abr. 2019, 14:52