Básico - Projeto 10

Semáforo interativo

Objetivo

Criar um simulador de farol de pedestre em conjunto com um semáforo para automóveis. Quando o botão é pressionado, o sistema de luzes é alterado (vermelho) para que os carros parem e os pedestres possam atravessar a rua  em segurança (verde).

Aplicação

Para fins didáticos. Pode ser utilizado também em maquetes para ferrovia em miniatura ou em mini cidades de brinquedo.

Componentes necessários

Referência

Componente

Quantidade

 Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v Utilizar no mínimo protoboard com 830 pontos
Led Difuso 5mm Led 5mm vermelho 2  
 Led Difuso 5mm  Led 5mm verde  2 Resultado de imagem para led verde  
 Led Difuso 5mm  Led 5mm amarelo  1    
Resistor  Resistor 300 Ω  5 Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado - Cálcular Resistor
  Resistor  Resistor 10 kΩ  1    
Push Button  Push Button 6x6x5mm  1  
Arduino UNO R3 Arduino UNO  1  

Obs.: Utilizar também Cabos de ligação.

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.

Atenção:

1) Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

1.1. Portanto, faça a conexão do Arduino no terminal positivo (anodo) e o GND no terminal negativo (catodo) do led.

1.2. Para evitar danos ao led é necessário a inclusão de um resistor no circuito. Como o resistor é um limitador da corrente elétrica, ele poderá estar conectado no anodo (terminal maior) ou no catodo (terminal menor) do led, tanto faz.

2) A montagem abaixo foi realizada em um protoboard com linhas de alimentação contínuas. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas - saiba mais em protoboard

Código do Projeto

 Digite o código abaixo no ambiente de desenvolvimento do Arduino. Faça a verificação e o upload.

/*******************************************************************************
*
*    Projeto 10 – Semáforo interativo
*
*******************************************************************************/

int carRed = 13; // estabelece o semáforo para carros
int carYellow = 12;
int carGreen = 11;
int pedRed = 10; // estabelece o semáforo para pedestres
int pedGreen = 9;
int button = 2; // pino do botão
int crossTime = 5000; // tempo para que os pedestres atravessem (5 segundos)
unsigned long changeTime; // tempo desde que o botão foi pressionado

//******************************************************************************

void setup() {
pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
pinMode(carGreen, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
pinMode(button, INPUT); // botão no pino 2
// acende a luz verde (carros) e vermelha (pedestre)
digitalWrite(carGreen, HIGH);
digitalWrite(pedRed, HIGH);
}

//******************************************************************************

void loop() {
int state = digitalRead(button);
/* verifica se o botão foi pressionado e se transcorreram 5 segundos desde a última vez que
isso ocorreu */
if (state == HIGH && (millis() - changeTime) > 5000) {

// Chama a função para alterar as luzes
changeLights();
}
}
void changeLights() {
digitalWrite(carGreen, LOW); // apaga o verde
digitalWrite(carYellow, HIGH); // acende o amarelo
delay(2000); // espera 2 segundos
digitalWrite(carYellow, LOW); // apaga o amarelo
digitalWrite(carRed, HIGH); // acende o vermelho
delay(1000); // espera 1 segundo, por segurança
digitalWrite(pedRed, LOW); // apaga o vermelho dos pedestres
digitalWrite(pedGreen, HIGH); // acende o verde dos pedestres
delay(crossTime); // espera por um intervalo de tempo predefinido (variável = 5seg)
// pisca o verde dos pedestres
for (int x=0; x<10; x++) {
digitalWrite(pedGreen, HIGH);
delay(250);
digitalWrite(pedGreen, LOW);
delay(250);
}
// acende o vermelho dos pedestres
digitalWrite(pedRed, HIGH);
delay(500);
digitalWrite(carRed, LOW); // apaga o vermelho
digitalWrite(carGreen, HIGH); // acende o verde
// registra o tempo desde a última alteração no semáforo
changeTime = millis();
// depois retorna para o loop principal do programa
}

Vídeo

 

Como o projeto deve funcionar

1. Quando você executar o programa, ele iniciará com o semáforo no verde, para permitir que os carros passem, e a luz para pedestres no vermelho.

2. Quando o botão é pressionado, o programa irá verificar se ao menos ocorreu 5 segundos desde a última vez que o semáforo mudou (para permitir que o trânsito flua). Se afirmativo, será executado a função changeLights(), onde o semáforo para carros vai do verde para o amarelo e depois para o vermelho, e então o semáforo para pedestres vai para o verde.

3. Depois de um intervalo de tempo, definido pela variável crossTime (tempo suficiente para os pedestres atravessarem - 5 segundos no nosso exemplo), a luz verde para pedestre deverá piscar para avisar aos pedestres que devem atravessar rapidamente antes que o semáforo feche.

4. Então, a luz vermelha do semáforo do pedestre ascende e a luz dos carros vai do vermelho para o verde, permitindo novamente o fluxo do tráfego.

Veja a simulação no link --> Projeto 10 - simulação

 

Compartilhe:

Doações

Contribua pra manter o site online :)

Inscreva-se no canal Squids

Squids Arduino News

Desafio 88 - Projeto I12 Cronômetro contador de voltas com sensor infravermelho Com base no projeto I12 - Cronômetro com pause controlado por leds infravermelhos - Arduino resolva os seguintes ...

Intermediário - Projeto 12 Cronômetro com pause, sensor infravermelho e reset - Arduino Objetivo Criar um cronômetro utilizando o módulo TM1637 (opcional) e/ou o display LCD com pause controla...

Básico - Hub 013 Cronômetro com pause e reset (interrupção por timer)   Sugerido por: Wagner G L Objetivo O objetivo é adaptar o Projeto 64 - Cronômetro com display TM1637 e Arduino acresc...

Básico - Hub 012 Cronômetro com pause e reset   Sugerido por: Wagner G L Objetivo O objetivo é adaptar o Projeto 64 - Cronômetro com display TM1637 e Arduino acrescentando botões de pause ...

Básico - Hub 011 Acertar número aleatório usando potenciômetro - jogo   Sugerido por: Juliandrew Facundo Para iniciar o jogo deve-se pedir ao usuário que digite o valor 1 no teclado do comp...

Outros artigos

Mais: Desafios Projetos Intermediários Básico Projetos Básicos Arduino Maker

Você está preparado?

Topo