viernes, 23 de abril de 2010

Semáforo Arduino





Hoy hemos terminado la programación de un montaje que simula un semáforo, con luces de paso para tráfico rodado, peatones, un pulsador para preferencia de paso para los peatones e incluso señal acústica para peatones invidentes.



El circuito electrónico es el ejemplo de semáforo de los tutoriales de fritzing, al cual hemos añadido un altavoz piezoeléctrico para el modo de aviso acústico.
El código controla el estado de los semáforos para tráfico rodado y peatones, el pulsador para prioridad de paso de los peatones, el avisador acústico para paso de peatones invidentes, e informa por puerto serie el estado del semáforo en tiempo real.

Este es el código fuente:

#include "pitches.h"

int Tr_rojo=12;
int Tr_amarillo=11;
int Tr_verde=10;

int P_rojo=9;
int P_verde=8;

int P_boton=2;

int Tr_tiempo;

int P_tiempo;
int Estado_boton;
int Bandera;

void setup()
{
pinMode(Tr_rojo, OUTPUT);
pinMode(Tr_amarillo, OUTPUT);
pinMode(Tr_verde, OUTPUT);
pinMode(P_rojo, OUTPUT);
pinMode(P_verde, OUTPUT);
pinMode(P_boton, INPUT);

P_tiempo=10000;

Serial.begin(9600);
}

void loop()
{

Estado_boton = digitalRead(P_boton);
Serial.println(P_tiempo);
Serial.println(Bandera);

if(Estado_boton == HIGH)
{
P_tiempo=5000;
Bandera=1;
}
// Bloque 1
Serial.println("Bloque 1");
digitalWrite(Tr_verde, HIGH);
digitalWrite(P_rojo, HIGH);
delay(P_tiempo);
if(Bandera==1)
{
P_tiempo=10000;
Bandera=0;
}
// Bloque 2
Serial.println("Bloque 2");
digitalWrite(Tr_verde, LOW);
for(Tr_tiempo=0; Tr_tiempo<10;>
{
Serial.println("Bloque 2 - Encendido");
Serial.println(Tr_tiempo);
digitalWrite(Tr_amarillo, HIGH);
digitalWrite(P_rojo, HIGH);
delay(250);
Serial.println("Bloque 2 - Apagado");
digitalWrite(Tr_amarillo, LOW);
digitalWrite(P_rojo, LOW);
delay(250);
}

// Bloque 3
Serial.println("Bloque 3");

for(Tr_tiempo=0; Tr_tiempo<5;>
{
digitalWrite(Tr_rojo, HIGH);
digitalWrite(P_verde, HIGH);
tone(6, NOTE_G3,8);
tone(6, NOTE_G3,8);
delay(1000);
}
// Bloque 4
Serial.println("Bloque 4");
digitalWrite(Tr_rojo, LOW);
for(Tr_tiempo=0; Tr_tiempo<5;>
{
Serial.println("Bloque 4 - Encendido");
Serial.println(Tr_tiempo);
digitalWrite(Tr_amarillo, HIGH);
digitalWrite(P_verde, HIGH);
delay(250);
tone(6, NOTE_G3,4);
tone(6, NOTE_G3,4);
Serial.println("Bloque 4 - Apagado");
digitalWrite(Tr_amarillo, LOW);
digitalWrite(P_verde, LOW);
delay(250);
}

}