terça-feira, 28 de dezembro de 2010

Semáforo com Botoeira - Arduino

Comprei um Arduino pelo ebay a mais ou menos dois meses atrás. Paguei pelo kit aproximadamente 70 reais com frete incluso com o vendedor "tenovo2010". O Kit possui uma Protoboard, 1 Arduino Duemilanove, 1 Display LCD, 1 Potênciometro de 10K, fios, resistores, e alguns leds. Tomei a decisão de compra-lo pois queria exercitar meus conhecimentos em C, e por uma matéria que cursei na Universidade chamada "Sistemas Microprocessados", que despertou meu interesse por microcontroladores, só que lá usávamos o PIC 16F877A, e a linguagem  de programação em Assembly. O Arduino é super fácil de trabalhar e bastante poderoso. Farei um post dedicado a ele futuramente.
Arduino Duemilanove

Hoje vou compartilhar uma experiência simples que fiz como o Arduino.  Consiste em um semáforo com Botoeira para pedestres. Segue abaixo um vídeo mostrando seu funcionamento.

video
Chocolate Rain

Código e circuito que utilizei no projeto:

Circuito - Clique para ampliar
================================================================
//SEMAFORO COM BOTOEIRA PARA PEDESTRES
//GABRIEL TORELLI - 28 DE DEZEMBRO DE 2010 - TOXINADIGITAL.BLOGSTPOT.COM
int carVermelho = 12; // Semaforo p/ Carros pinos 12/11/10
int carAmarelo = 11;
int carVerde = 10;
int pedVermelho = 9; // Semaforo p/ Pedestres pinos 9/8/7
int pedVerde = 8;
int button = 2; // Botoeira
int Tempo_Travessia = 5000; // Tempo para travessia
unsigned long changeTime;
void setup() {
pinMode(carVermelho, OUTPUT);
pinMode(carAmarelo, OUTPUT);
pinMode(carVerde, OUTPUT);
pinMode(pedVermelho, OUTPUT);
pinMode(pedVerde, OUTPUT);
pinMode(button, INPUT); // Botoeira no pino 2
// Luz verde LIGADA
digitalWrite(carVerde, HIGH);
digitalWrite(pedVermelho, HIGH);
}
void loop() {
int state = digitalRead(button);
/* check if button is pressed and it is
over 5 seconds since last button press */
if (state == HIGH && (millis() - changeTime) > 5000) {
// Call the function to change the lights
changeLights();
}
}
//ROTINA PARA TRAVESSIA DO PEDESTRE
void changeLights() {
digitalWrite(carVerde, LOW); // VERDE DESLIGADO
digitalWrite(carAmarelo, HIGH); // AMARELO LIGADO
delay(2000); // ESPERA 2 SEG

digitalWrite(carAmarelo, LOW); // AMARELO LIGADO
digitalWrite(carVermelho, HIGH); // VERMELHO LIGADO
delay(1000); // ESPERA 1 SEG

digitalWrite(pedVermelho, LOW); // VERMELHO PEDESTRE DESLIGADO
digitalWrite(pedVerde, HIGH); // VERDE PEDESTRE LIGADO
delay(Tempo_Travessia); // ESPERA O TEMPO DE TRAVESSIA(2 SEG)

//PISCA A LUZ VERDE DO PEDESTRE
for (int x=0; x<10; x++) {
digitalWrite(pedVerde, HIGH);
delay(250);
digitalWrite(pedVerde, LOW);
delay(250);
}
//LIGA O VERMELHO DO PEDESTRE
digitalWrite(pedVermelho, HIGH);
delay(500);

digitalWrite(carAmarelo, HIGH); // AMARELO LIGADO
digitalWrite(carVermelho, LOW); // VERMELHO DESLIGADO
delay(1000);
digitalWrite(carVerde, HIGH);
digitalWrite(carAmarelo, LOW); // AMARELO DESLIGADO

//GRAVA TEMPO DESDE A ULTIMA MUDANÇA NO SEMAFORO
changeTime = millis();
//RETORNA PARA O LOOP
}

================================================================

É isso aí pessoal! :)

Nenhum comentário:

Postar um comentário