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.

// 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);

Alguma dúvida, comentário ou algo que queira acrescentar? Entre no tópico do nosso fórum!

{"cart_token":"","hash":"","cart_data":""}