Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semafor2 PDF
Semafor2 PDF
Uno de los proyectos típicos cuando nos iniciamos con Arduino, es hacer un semáforo. En este
artículo vamos a darle una vuelta de tuerca, vamos a crear un semáforo inteligente.
Simularemos esa inteligencia con dos pulsadores, múltiples LEDs y mucha imaginación.
El objetivo de este tutorial es mostrarte cómo utilizar múltiples LEDs con Arduino y también
como integrarlo con dos pulsadores. Estos últimos se pueden sustituir por algún sensor de
presencia ya sea ultrasonidos (ya hemos visto un ejemplo en el sensor de aparcamiento) o
con infrarrojos.
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 1/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
Vamos a simular un cruce de semáforos en una calle. Los semáforos van a tener una
característica especial, van a funcionar solos. Con los múltiples LEDs crearemos las luces
de los semáforos. Los pulsadores simularán sensores de presencia.
Indice de contenidos
Pero ¿cuál es ese sentido? Es muy sencillo y con la práctica, te acostumbrarás a utilizarlos.
Los LEDs tienen una patilla más larga que otra, esa patilla se conoce como ánodo (el polo
positivo). Es por donde tiene que entrar la corriente. La patilla más pequeña se conoce como
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 2/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
Teniendo claro esto ya podemos conectar múltiples LEDs a nuestro circuito. Ahora solo
nos hace falta saber quá resistencia poner. Para ello debemos hacer uso de la Ley de Ohm.
Esta Ley es la base fundamental sobre la que debemos construir nuestros circuitos.
¿Por qué debemos conectar una resistencia? Siempre tenemos que mirar la
hoja de características técnicas de los componentes. Para un LED típico de
500 mm, el voltaje de operación está entre 1,8 V y 2,2 V. En caso contrario
podemos dañar el LED o como mínimo, disminuir la vida útil del componente.
Ley de Ohm
Esta Ley relaciona las tres magnitudes básicas de un circuito voltaje, corriente y resistencia.
Debes conocer y memorizar las fórmulas que nos ayudan a calcular una magnitud en relación a
las otras. Existe un círculo que te ayuda fácilmente a recordar esta relación. Tapando la
magnitud que quieres calcular te dice cómo hacerlo en base a las otras dos magnitudes.
Donde:
V es voltaje
I es intensidad
R es resistencia
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 3/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
Con esta fórmula ya podemos calcular cualquier magnitud. En principio, necesitamos conocer
dos de las magnitudes para calcular la tercera. En el ejemplo del semáforo inteligente con
múltiples LEDs y pulsadores, tendremos que calcularlo una sola vez. Veamos cómo hacerlo.
En un circuito en serie como el del ejemplo, da lo mismo colocar la resistencia antes que
después. Si aplicas la Ley de Ohm se obtiene el mismo valor. En ningún momento esta Ley
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 4/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
nos dice la posición de los componentes. Esto también es aplicable a múltiples LEDs.
Es un circuito muy simple, un LED y yba resistencia en paralelo. Pero, ¿cómo calculamos el
valor de la resistencia? Sólo tenemos que aplicar la Ley de Ohm. Conocemos el voltaje,
por los pines digitales se suministran 5 V. La intensidad la podemos sacar de la hoja de
características técnicas del propio Arduino. Si nos dirigimos a su web oficial podemos ver
el detalle que te muestro en la siguiente imagen.
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 5/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
Ya tenemos todo, solo hace falta sustituir los valores y calcular el valor de la resistencia.
Ojo, que este es el mínimo. Por debajo de ese valor de resistencia podemos dañar el LED, ya
que aumentaría el voltaje y nos saldríamos del rango de operación. En mi caso voy a utilizar
resistencias de 220Ω por comodidad. Esto me da como resultado que en la resistencia se
consumirán 4,4 V y quedarían 0,6 V para consumir en el LED. Estoy por debajo de lo
recomendado pero no dañaré el LED.
El típico tiene cuatro patillas. Están conectadas entre ellas dos a dos y entre ellas forman
el interruptor. Un pulsador no es más que un interruptor, deja pasar la corriente o no. Seguro
que te suena todo esto, dos estados posibles :). Exacto, a través de un pin digital podemos
saber si se ha pulsado o no un pulsador.
Esto es lo que sucede con los pulsadores, mientras que no pulsemos, tenemos el pin al aire y
se produce una indeterminación. Las dos configuraciones posibles son las siguientes.
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 6/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
El valor típico de la resistencia debe ser el mayor posible. Los 10kΩ es el aconsejable para
utilizar un pulsador con Arduino.
Componentes necesarios
Asegúrate que tienes los siguientes componentes para montar el circuito.
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 7/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
Los múltiples LEDs van a formar los semáforos de un cruce. Los pulsadores simularán
sensores de presencia. El circuito sería el siguiente.
Las resistencias conectadas a los múltiples LEDs son de 220 Ω y la de los pulsadores 10 kΩ.
Es una buena práctica utilizar cables de colores agrupados para los múltiples
LEDs y para el pulsador. Eso te permitirá localizarlos más rápidamente.
Para empezar tenemos que partir de unas condiciones iniciales, ¿qué semáforo comienza
abierto y qué semáforo comienza cerrado? Empezaremos con el semáforo 1 abierto y el
semáforo 2 cerrado. Para entendernos, en el esquema del circuito eléctrico, de izquierda a
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 8/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
derecha será semáforo 1, semáforo 2, pulsador 1 (simula sensor de presencia del semáforo 1)
y pulsador 2 (simula sensor de presencia del semáforo 2).
Una vez que un coche esté parado ante un semáforo en rojo (simulamos pulsando su pulsador),
pasará un determinado tiempo y comenzará la secuencia para apagar el otro semáforo y abrir
el suyo. Sencillo ¿no?. Pues vamos a ver el algoritmo.
Variables y constantes
Lo primero es declarar las constantes que identifiquen los múltiples LEDs y los
pulsadores. Eso lo hacemos en la parte de arriba del sketch o programa.
1 // Pines utilizados
2 #define LEDVERDE1 2
3 #define LEDAMARILLO1 3
4 #define LEDROJO1 4
5 #define LEDVERDE2 5
6 #define LEDAMARILLO2 6
7 #define LEDROJO2 7
8 #define PULSADOR1 8
9 #define PULSADOR2 9
Luego vamos a declarar tres variables. La primera será del tipo booleano, solo admite dos
valores a True (verdadero) o False (falso). Esta variable nos permitirá saber que semáforo
está activo. Cuando solo tenemos dos posibilidades, es una buena práctica utilizar este tipo de
variables.
En nuestro caso ponemos el nombre activo1. Si es True indica que el semáforo 1 está activo y
en verde y por lo tanto el semáforo 2 está no activo y en rojo. Si activo 1 es False, indicará que
el semáforo 2 está activo y en verde y el semáforo 1 estará no activo y en rojo.
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 9/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
Las otras dos variables son los tiempos de espera. La primera es el tiempo que esperamos
para cambiar de luces (de verde a amarillo y luego a rojo) y la segunda es un tiempo más
largo. Sirve para esperar un tiempo prudencial antes de hacer el cambio de semáforos.
1 // Variables
2 bool activo1 = true; // Indica si el semáforo 1 está activo, de lo contrario será el semáforo 2
3 int tiempoCambio = 1500; // Tiempo de espera entre transición de LEDs
4 int tiempoEspera = 5000; // Tiempo de espera hasta comenzar transición
Función setup
Ahora vamos a pasar a indicar las condiciones iniciales. Ya lo he comentado anteriormente.
Comenzaremos con el semáforo 1 activo (verde) y el semáforo 2 no activo (rojo). Pero antes
de hacer esto, iniciamos el monitor serie, ponemos los pines de los múltiples LEDs en modo
salida (OUTPUT) y los pines de los pulsadores en modo entrada (INPUT).
1 void setup() {
2 // Iniciamos el monitor serie
3 Serial.begin(9600);
4
5 // Modo entrada/salida de los pines
6 pinMode(LEDVERDE1, OUTPUT);
7 pinMode(LEDAMARILLO1, OUTPUT);
8 pinMode(LEDROJO1, OUTPUT);
9 pinMode(LEDVERDE2, OUTPUT);
10 pinMode(LEDAMARILLO2, OUTPUT);
11 pinMode(LEDROJO2, OUTPUT);
12 pinMode(PULSADOR1, INPUT);
13 pinMode(PULSADOR2, INPUT);
14
15 // Apagamos todos los LEDs
16 digitalWrite(LEDVERDE1, LOW);
17 digitalWrite(LEDAMARILLO1, LOW);
18 digitalWrite(LEDROJO1, LOW);
19 digitalWrite(LEDVERDE2, LOW);
20 digitalWrite(LEDAMARILLO2, LOW);
21 digitalWrite(LEDROJO2, LOW);
22
23 // Estado inicial: semáforo 1 activo, semáforo 2 no activo
24 digitalWrite(LEDVERDE1, HIGH);
25 digitalWrite(LEDROJO2, HIGH);
26 }
Función loop
Esta función es la que se va a repetir indefinidamente. Aquí comprobaremos el estado de
los pulsadores, encenderemos y apagaremos los múltiples LEDs según corresponda.
He dividido el código en dos funciones, a parte de la función loop(). Si tenemos que encender
el semáforo 1, llamamos a la función encenderSemaforo1(), y si tenemos que encender el
semáforo 2, llamamos a la función encenderSemaforo2().
1 void loop() {
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 10/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
2 // Dependiendo del semáforo que tengamos activo
3 if (activo1)
4 {
5 // Está encendido el semáforo 1, comprobamos el pulsador 2
6 int valor2 = digitalRead(PULSADOR2);
7
8 // Si hay un coche esperando, pulsador pulsado
9 if (valor2 == HIGH)
10 {
11 // Encender semáforo 2
12 ecenderSemaforo2();
13
14 // Semáforo 2 activo
15 activo1 = false;
16 }
17 }
18 else
19 {
20 // Está encendido el semáforo 1, comprobamos el pulsador 1
21 int valor1 = digitalRead(PULSADOR1);
22
23 // Si hay un coche esperando, pulsador pulsado
24 if (valor1 == HIGH)
25 {
26 // Encender semáforo 1
27 ecenderSemaforo1();
28
29 // Semáforo 1 activo
30 activo1 = true;
31 }
32 }
33 }
estado de un pin digital, LOW y HIGH. Estas constantes se definen igual que las
HIGH tiene asociado el valor 1. Por eso podemos guardar el valor de una
entrada digital en una variable del tipo int.
espera definido por tiempoEspera. Luego apagamos el otro semáforo y por último
encendemos el semáforo activo.
18 // Encendemos semáforo 2
19 // Esperamos
20 delay(tiempoCambio);
21
22 // Pasamos a luz amarilla
23 digitalWrite(LEDROJO2, LOW);
24 digitalWrite(LEDVERDE2, HIGH);
25 }
26
27 void ecenderSemaforo1()
28 {
29 // Apagamos semáforo 2
30 // Esperamos
31 delay(tiempoEspera);
32
33 // Pasamos a luz amarilla
34 digitalWrite(LEDVERDE2, LOW);
35 digitalWrite(LEDAMARILLO2, HIGH);
36
37 // Esperamos
38 delay(tiempoCambio);
39
40 // Pasamos a luz roja
41 digitalWrite(LEDAMARILLO2, LOW);
42 digitalWrite(LEDROJO2, HIGH);
43
44 // Encendemos semáforo 1
45 // Esperamos
46 delay(tiempoCambio);
47
48 // Pasamos a luz amarilla
49 digitalWrite(LEDROJO1, LOW);
50 digitalWrite(LEDVERDE1, HIGH);
51 }
CURSOS BLOG PODCAST ¿QUIÉN SOY?
CONTACTAR
Aunque ACCEDER
es un tema algo más complejo, podemos utilizar interrupciones para
realizar este ejercicio. El único inconveniente que veo son los tiempos de
espera. Con las funciones callback de las interrupciones no podemos utilizar la
función delay().
Código final
Como siempre, te dejo todo el código unido para que lo utilices en tus proyectos con Arduino.
Intenta hacerlo tu sólo, ya que copiar y pegar no te ayuda a entender las cosas. Recuerda que
hemos utilizado múltiples LEDs y pulsadores.
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 12/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
95 // Esperamos C++
96 delay(tiempoCambio);
97
98 // Pasamos a luz amarilla
99 digitalWrite(LEDROJO2, LOW);
100 digitalWrite(LEDVERDE2, HIGH);
101 }
102
103 void ecenderSemaforo1()
104 {
105 // Apagamos semáforo 2
106 // Esperamos
107 delay(tiempoEspera);
108
109 // Pasamos a luz amarilla
110 digitalWrite(LEDVERDE2, LOW);
111 digitalWrite(LEDAMARILLO2, HIGH);
112
113 // Esperamos
114 delay(tiempoCambio);
115
116 // Pasamos a luz roja
117 digitalWrite(LEDAMARILLO2, LOW);
118 digitalWrite(LEDROJO2, HIGH);
119
120 // Encendemos semáforo 1
121 // Esperamos
122 delay(tiempoCambio);
123
124 // Pasamos a luz amarilla Política de cookies
125 digitalWrite(LEDROJO1, LOW);
126 digitalWrite(LEDVERDE1, HIGH);
127 }
Hemos utilizado múltiples LEDs para simular los semáforos y pulsadores para simular
los sensores de presencia. Prueba a cambiar estos componentes por otros.
Únete a la conversación...
△ ▽ • Responder • Compartir ›
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 14/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
ver más
△ ▽ • Responder • Compartir ›
Luis del Valle Moderador > Eileen Alfaro Calvo • hace 12 días
Hola Eileen, por lo que puedo intuir en tu foto, no tienes conectadas las resistencias de los LEDs
a tierra, fíjate bien en el esquema que pongo en el artículo, un extremo de la resistencia al LED y
el otro extremo a GND.
△ ▽ • Responder • Compartir ›
Luis del Valle Moderador > Eileen Alfaro Calvo • hace 8 días
Gracias a ti
△ ▽ • Responder • Compartir ›
Hola Marlenii ¿qué quieres detectar con esos sensores? Si es presencia puedes utilizar un PIR o
un sensor de ultrasonidos por ejemplo
Responder
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 15/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
△ ▽ • Responder • Compartir ›
gracias
△ ▽ • Responder • Compartir ›
No entiendo la pregunta ¿qué quieres evitar?¿que se repita una y otra vez el funcionamiento del
semáforo con Arduino?
△ ▽ • Responder • Compartir ›
Elmer Jeanpierre Lopez Ramirez > Emmanuel David Mendoza Zapata • hace 5 meses
Vaya, vaya, lo unico que tienes que ver primero es "dejar pegado el botón" y de preferencia
declarar parpadeo fuera
△ ▽ • Responder • Compartir ›
Luis del Valle Moderador > Emmanuel David Mendoza Zapata • hace 5 meses
En este caso lo mejor es que utilices interrupciones. Te paso un tutorial para que lo intentes tu
mismo https://programarfacil.com/...
△ ▽ • Responder • Compartir ›
Emmanuel David Mendoza Zapata > Luis del Valle • hace 5 meses
Y como se podria salir de la interrupcion, hay algun comando
△ ▽ • Responder • Compartir ›
Emmanuel David Mendoza Zapata > Luis del Valle • hace 5 meses
He creado una interrucion, que me lleve a un estado de emergencia en void setup. el
codigo del estado es
void estadoemergencia(){
digitalWrite(amarrillo1,HIGH);//Encender los focos de emergencia
digitalWrite(amarrillo2,HIGH);
digitalWrite(rojo1, LOW);//Apagar los otros focos
digitalWrite(verde1, LOW);
digitalWrite(rojo2, LOW);
digitalWrite(verde2, LOW);
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 17/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
digitalWrite(verde2, LOW);
delay(15000000);
delay(15000000);
delay(15000000);
delay(15000000);
}
Pero como haría para salir de ese estado de emergencia
△ ▽ • Responder • Compartir ›
Luis del Valle Moderador > Emmanuel David Mendoza Zapata • hace 5 meses
Hola Emmanuel, dentro de la función ISR no puedes utilizar la función delay. Aquí
tienes un tutorial para utilizar interrupciones https://programarfacil.com/... lo miras
y me dices si no entiendes algo.
△ ▽ • Responder • Compartir ›
Luis del Valle Moderador > Edwin José de Paz García • hace 7 meses
Hola Edwin, comprueba bien las conexiones.
△ ▽ • Responder • Compartir ›
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 18/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
Hola Eefraa
Para hacerlo con cuatro semáforos solo tienes que replicar el código anterior 4 veces y encajarlo
todo bien.
△ ▽ • Responder • Compartir ›
Luis del Valle Moderador > Edwin José de Paz García • hace 8 meses
Hola Edwin, no he entendido muy bien lo que pretendes hacer pero te recomiendo que veas este
artículo donde explico las foto-resistencias, te servirá de ayuda https://programarfacil.com/...
△ ▽ • Responder • Compartir ›
Reloj con Arduino, cómo controlar los tiempos #107 Aplicaciones del IoT usos prácticos en el
con un RTC mundo real
57 comentarios • hace un año 2 comentarios • hace un año
Luis del V alle — Hola Arielito, te recomiendo que Luis del V alle — Muchas gracias a ti Alejo :)
utilices interrupciones, tiene toda la pinta de que
no te detecta las pulsaciones por eso. Aquí te
dejo …
#114 Sigfox, Arduino MKRFOX1200 y un #113 Aprender Arduino con Enrique Crespo
medidor de radiación UV (@jecrespom)
13 comentarios • hace 9 meses 4 comentarios • hace 10 meses
Luis del V alle — Muchas gracias Carlos :). Luis del V alle — No entiendo la pregunta,
Espero terminar pronto el proyecto y poderlo Arduino no está pensado para eso. Te
compartir :) recomiendo que eches un vistazo a Raspberry Pi
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 19/21
20/03/18 Múltiples LEDs y pulsadores, proyecto de un semáforo inteligente
https://programarfacil.com/blog/arduino-blog/multiples-leds-pulsadores-semaforo/ 21/21