¿Cómo hacer un semáforo con Arduino?
| Actualizado:
Comentarios: 0
![¿Cómo hacer un semáforo con Arduino?](https://eloctavobit.com/imagenes/2020/05/1685692567_3fc635e3d18ec3317b3b.webp)
Simular un semáforo es uno de los clásicos en la iniciación de los proyectos de Arduino. Aquí vamos a mostrar como puedes montar un semáforo sencillo, un semáforo para coches y peatones automatizado y por último, el semáforo para coches y peatones con pulsador.
Contenido
- 1 Semáforo sencillo
- Esquema montaje
- Programación con el IDE de Arduino
- Programación con bloques
- 2 Semáfora para coches y peatones.
- Esquema montaje
- Programación con el IDE de Arduino
- 3 Semáforo para coches y peatones con pulsador
- Esquema montaje
- Programación con el IDE de Arduino
- Programación con bloques
Semáforo sencillo
Material necesario:
- Arduino Uno o similar.
- Protoboard.
- Cables.
- Un led rojo, un led amarillo y uno verde.
- 3 resistencias de 220 Ω
Para el montaje del esquema colocamos los leds rojo, amarillo y verde en la protoboard, teniendo en cuenta que los vamos a conectar a los pines digitales 10, 9 y 8 de la placa de Arduino UNO. Comprobaremos que la patilla larga del LED está conectada al voltaje positivo, mientras que la pata corta está conectada a la resistencia.
![Esquema para el montaje de un semáforo sencillo para Arduino](https://eloctavobit.com/imagenes/2023/06/6479a28f3375f.webp)
Programando con el IDE de Arduino.
El código es sencillo: se crea una variable donde almacenar el tiempo de espera. En la función setup() indicamos que los pines 10, 9 y 8 funcionarán como salida.
Lo siguiente será encender el led correspondiente, con un valor HIGHT, y apagarlo cuando queramos, cambiando el valor a LOW. Primero, el rojo estará encendido; cuando el semáforo se ponga verde, el rojo se apagará; y antes de volver a rojo, se encenderá el amarillo y se apagará el verde.
// Semáforo sencillo en Arduino
int tiempoEspera = 5000;
void setup(){
pinMode(10, OUTPUT); // Rojo
pinMode(9, OUTPUT); // Amarillo
pinMode(8, OUTPUT); // Verde
}
void loop() {
digitalWrite(10, HIGH); // rojo encendido
delay(tiempoEspera);
digitalWrite(8, HIGH); // verde encendido
digitalWrite(10, LOW); // rojo apagado
delay(tiempoEspera);
digitalWrite(9, HIGH); // amarillo encendido
digitalWrite(8, LOW); // verde apagado
delay(1000);
digitalWrite(9, LOW); // amarillo apagado
}
En la función setup() indicamos los pines que corresponden a cada LED, mientras que en la función loop() tenemos un bucle que va enciendiendo y apagando los LED, segun corresponda.
Programando con bloques
![Semaforo arduino programación por bloques](https://eloctavobit.com/imagenes/2023/11/655b2351eb1b1.webp)
Como observamos en la imagen tenemos un bucle con tres bloques: el primer bloque enciende el LED rojo, espera 5 segundos, el segundo bloque enciende el LED verde, espera 5 segundos y el tercer bloque, enciende el LED naranja, espera un segundo. Y se vuelve a repetir.
Semáforo para coches y peatones sencillo
Material necesario:
- Arduino Uno o similar.
- Protoboard.
- Cables.
- 2 leds rojos, 1 led amarillo y 2 leds verdes.
- 5 resistencias de 220 Ω
Para el montaje del esquema la única diferencia es que hemos añadidos 2 nuevos leds.
![Esquema para el montaje de un semáforo para coches y peatones con Arduino](https://eloctavobit.com/imagenes/2023/06/6479a2c621efb.webp)
El código es igual de fácil que con un solo semáforo, pero fijándonos que tenemos 2 luces nuevas. Hay que tener en cuenta que comenzaremos con el semáforo para coches en rojo, por tanto, el semáforo de peatones estará en verde.
// Semáforo coches y peatones sencillo en Arduino
int tiempoCoches = 5000;
int tiempoPeatones = 3000;
void setup(){
// semaforo coches
pinMode(10, OUTPUT); // Rojo
pinMode(9, OUTPUT); // Amarillo
pinMode(8, OUTPUT); // Verde
// semaforo peatones
pinMode(3, OUTPUT); // Rojo
pinMode(2, OUTPUT); // Verde
}
void loop() {
digitalWrite(10, HIGH); // rojo encendido
digitalWrite(2, HIGH); // verde peatones encendido
digitalWrite(3, LOW); // rojo peatones apagado
delay(tiempoCoches);
digitalWrite(8, HIGH); // verde encendido
digitalWrite(10, LOW); // rojo apagado
digitalWrite(2, LOW); // verde peatones apagado
digitalWrite(3, HIGH); // rojo peatones encendido
delay(tiempoPeatones);
digitalWrite(9, HIGH); // amarillo encendido
digitalWrite(8, LOW); // verde apagado
delay(1000);
digitalWrite(9, LOW); // amarillo apagado
}
Semáforo para coches y peatones con pulsador
Material necesario:
- Arduino Uno o similar.
- Protoboard.
- Cables.
- 2 leds rojos, 1 led amarillo y 2 leds verdes.
- 5 resistencias de 220Ω y una de 10 kΩ
- 1 Pulsador.
Ahora se complica un poco el montaje porque vamos a añadir un pulsador que activará el cambio de color del semáforo para permitir el paso de los peatones. Para el pulsador utilizamos una resistencia pull-up, que esta conectado al pin 6 y lo registramos como entrada. Si el pulsador esta presionado nos dara un valor de cero.
![Esquema para semáforo de coches y peatones con pulsador](https://eloctavobit.com/imagenes/2023/06/6479a2eb33d6c.webp)
Programando con el IDE de Arduino
Partimos de la situación en la que el semáforo para coches está en verde y el de peatones, esta en rojo. Hemos creado una función «cambioLuz» a la cual se hará una llamada si el estado del pulsador cambia.
int tiempoCruce = 5000;
unsigned long tiempoCambio = 0;
void setup(){
// semaforo coches
pinMode(10, OUTPUT); // rojo
pinMode(9, OUTPUT); // amarillo
pinMode(8, OUTPUT); // verde
// semáforo peatones
pinMode(3, OUTPUT); // rojo
pinMode(2, OUTPUT); // verde
pinMode(6, INPUT); // pulsador, cambio de color
digitalWrite(8, HIGH); // iniciamos con el verde encendido, coche
digitalWrite(3, HIGH); // iniciamos con el rojo encendido, peatón
}
void loop() {
int estado = digitalRead(6);
if (estado == LOW && (millis() - tiempoCambio) > 5000 ){
cambioLuz();
}
}
void cambioLuz() {
digitalWrite(8,LOW); // verde apagado, coche
digitalWrite(9, HIGH); // amarillo encendido, coche
delay(2000);
digitalWrite(9, LOW); // amarillo apagado, coche
digitalWrite(10, HIGH); // rojo encendido, coche
delay(1000);
digitalWrite(3, LOW); // rojo apagado, peatón
digitalWrite(2, HIGH); // verde encendido, peatón
delay(tiempoCruce);
// parpadeo de la luz verde del peatón
for (int x=0; x < 10; x++) {
digitalWrite(2, HIGH);
delay(250);
digitalWrite(2, LOW);
delay(250);
}
digitalWrite(3, HIGH); // rojo encendido, peatón
delay(500);
digitalWrite(10, LOW); // rojo apagado, coche
digitalWrite(8, HIGH); // verde encendido, coche
tiempoCambio = millis();
}
Como se puede comprobar esta continuamente comprobando el estado del pulsador, en el momento que este se pulse (LOW) realiza la llamada a la función cambioLuz().
Programando con bloques
![Programación de un semáforo con pulsador utilizando bloques](https://eloctavobit.com/imagenes/2023/11/655ba5178f151.webp)
Para la programación por bloques se comprueba si no esta presionado el pulsador (pin digital 6 = 1) o si esta pulsado (pin digital = 0).
Si el valor es 1, el semáforo para los vehículos estará en verde y el de los peatones en rojo. Si el valor es 0, el semáforo para vehículos estará en rojo y el de los peatones en verde. Para el parpadeo de la luz ambar se ha colocado un bloque de repetir.