Parte 4 - Primeiro Projeto (Semáforo Interativo)

Semáforo Interativo

Parte 1 - Componentes

Para começar, devemos saber o que iremos utilizar no projeto:

Protoboard de 830 pontos

Obs: Se você não tiver uma protoboard de 830 pontos, você pode usar 2 de 400, juntas.

2 LEDs vermelhos, 2 verdes e 1 amarelo, de 5 milímetros


resistores de 300 Ω e 1 de 10

Obs: Se precisar usar outros valores, calcule o resistor apropriado para o LED utilizado.
Um exemplo de site para isso é esse aqui.

1 Push Button de 6x6x5 milímetros

1 Arduino Uno


14 Cabos de Ligação (Fios Jumper) da cor de sua preferência.


Obs: Como estamos utilizando duas protoboards de 400 pontos, teremos que utilizar mais 2 Cabos de Ligação para uni-las. Então, no caso, utilizaremos 16 no total.


Parte 2 - Montagem

Conecte os componentes na Protoboard como mostra a imagem abaixo. Verifique cuidadosamente os Cabos de Ligação antes de ligar/ativar seu Arduino. Lembre-se de que o Arduino deve estar totalmente desconectado  da força enquanto você monta o circuito.

Atenção:

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


2) A montagem abaixo foi feita em uma protoboard com linhas de alimentação contínuas. Verifique se a sua tem linhas de alimentação contínuas ou separadas.

Parte 3 - O Código

Em todos os projetos que você for fazer com Arduino, você precisará criar (se souber programar em C/C++) ou pegar da internet um código. Digite-o manualmente ou, se você estiver acessando a página pelo computador, selecione o código abaixo, copie e cole 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
}

Parte 4 (Final) - Funcionamento

Em teoria, se tudo deu certo, 1. Quando você executou o programa, ele iniciou com o semáforo verde, para permitir que os carros passem, e a luz para pedestres no vermelho.

2. Quando o botão foi pressionado, o programa verificou se ao menos ocorreu 5 segundos desde a última vez que o semáforo mudou (para permitir que o trânsito flua). Se afirmativo, foi executado a função changeLights(), onde o semáforo para carros foi do verde para o amarelo e depois para o vermelho, e então o semáforo para pedestres foi 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 piscou 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 ascendeu e a luz dos carros foi do vermelho para o verde, permitindo novamente o fluxo do tráfego.

Obs: se as imagens ficaram fora de ordem, não peça para arrumarmos isso, pois o problema, na verdade, é o tamanho do seu monitor.

Comentários