Semaforo Arduino
Semaforo Arduino
Se trata de un mini proyecto que hice para probar y aprender a programar Arduino.
Este semáforo no cambia por periodos de tiempo, cambia según como se interactúe con el.
El ciclo empieza con el semáforo para peatones en verde con el Buzzer pitando intermitentemente para que los
peatones invidentes sepan que pueden pasar mientras que el semáforo de coches se encuentra en rojo. Para que el
semáforo de coches cambie se usa el sensor de ultrasonido que mide la distancia en un área para saber si existen
coches detenidos esperando para ello también se tiene que cumplir una regla de 6 segundos seguidos a menos de
esa distancia. En este caso y como es un ejemplo puse que si la distancia es menor a 100 centímetros durante 6
segundos cambiara. Una vez se encuentre en verde el semáforo de coches y en rojo el de peatones para que cambie
otra vez el peatón tendrá que pulsar el botón.
Los procesos de cambios no son inmediatos una vez accionados tardan 5 segundos en cambiar de verde a rojo
además entre los cambios de semáforo a semáforo se aplica un segundo y medio mas.
Componentes
Plano
En plano se ve muy bonito en la realidad es algo como esto
Código:
#include <SR04.h>
#define PEATON_LED_ROJO 2
#define PEATON_LED_vERDE 3
#define PEATON_BUZZER 4
#define COCHE_LED_ROJO 5
#define COCHE_LED_AMARILLO 6
#define COCHE_LED_VERDE 7
#define BOTTON_PEATON 8
#define ECHO_PIN 9
#define TRIG_PIN 10
int iPulsadorCoches;
int iIteradorCoches;
int iBottonEmergencia;
long a;
//SENSOR SR04
void setup() {
Serial.begin(9600);
pinMode(PEATON_LED_ROJO, OUTPUT);
pinMode(PEATON_LED_vERDE, OUTPUT);
pinMode(PEATON_BUZZER, OUTPUT);
pinMode(COCHE_LED_ROJO, OUTPUT);
pinMode(COCHE_LED_AMARILLO, OUTPUT);
pinMode(COCHE_LED_VERDE, OUTPUT);
pinMode(BOTTON_PEATON, INPUT);
digitalWrite(PEATON_LED_ROJO, LOW);
digitalWrite(PEATON_LED_vERDE, HIGH);
digitalWrite(COCHE_LED_ROJO, HIGH);
digitalWrite(COCHE_LED_AMARILLO, LOW);
digitalWrite(COCHE_LED_VERDE, LOW);
bPasoPeatonesActivo = true;
void loop() {
if (bPasoPeatonesActivo){
sensorProximidad();
semaforoPeatones();
} else {
iPulsadorPeatones = digitalRead(BOTTON_PEATON);
if (iPulsadorPeatones == HIGH) {
semaforoCoches();
bPasoPeatonesActivo = true;
void semaforoPeatones() {
delay(iTiempoCambioSemaforo-3000);
digitalWrite(PEATON_LED_vERDE, LOW);
delay(250);
digitalWrite(PEATON_LED_vERDE, HIGH);
delay(250);
sonarBuzzer("CORTO");
digitalWrite(PEATON_LED_vERDE, LOW);
digitalWrite(PEATON_LED_ROJO, HIGH);
delay(iTiempoEntreSemaforo);
digitalWrite(COCHE_LED_ROJO, LOW);
digitalWrite(COCHE_LED_VERDE, HIGH);
bPasoPeatonesActivo = false;
void semaforoCoches() {
delay(iTiempoCambioSemaforo);
digitalWrite(COCHE_LED_VERDE, LOW);
digitalWrite(COCHE_LED_AMARILLO, HIGH);
delay(iTiempoCambioLed);
digitalWrite(COCHE_LED_AMARILLO, LOW);
digitalWrite(COCHE_LED_ROJO, HIGH);
delay(iTiempoEntreSemaforo);
digitalWrite(PEATON_LED_ROJO, LOW);
digitalWrite(PEATON_LED_vERDE, HIGH);
bPasoPeatonesActivo = true;
sonarBuzzer("LARGO");
if (sVelocidad == "CORTO") {
tone(PEATON_BUZZER, 500);
delay(50);
noTone(PEATON_BUZZER);
delay(50);
} else { sensorProximidad(); }
void sensorProximidad() {
int iX = 1;
while (iX==1){
a=sr04.Distance();
delay(400);
tone(PEATON_BUZZER, 500);
delay(150);
noTone(PEATON_BUZZER);
delay(150);
iIteradorCoches++;
} else { iIteradorCoches = 0; }
if (iIteradorCoches >= 6) {
iIteradorCoches = 0;
iX=2;