(Arduino) Programando un Semaforo
Hoy vamos a aprender a programar las luces de un semáforo utilizando una placa Arduino con la ayuda de Bitbloq ¿te apuntas?
Pero como decimos siempre:
¡Vayamos por partes!
Material: ¿Que necesitamos?
Para programar las luces del semáforo vamos a utilizar una placa Freaduino UNO y dos Leds que hemos sacado de nuestro Primer Kit de Robótica.
La razón por la que utilizamos una placa Freaduino es porque al tener los pines de toma de tierra (G) y corriente (V) repetidos en una fila, es mas fácil hacer las conexiones sin tener que usar una placa para cableado o protoboard, pero cualquier placa Arduino y dos leds servirían igualmente.
El Semáforo
Para programar las luces del semáforo lo primero tendremos que pensar es el algoritmo, es decir, la receta de instrucciones que tendremos que dar a la luces para que funcionen como un semáforo, veamos:
Veamos que secuencia siguen las luces de un semáforo:
- Se enciende la luz verde durante un tiempo determinado, tras el que..
- La luz verde se enciende y apaga (parpadea) un numero de veces y se apaga, tras lo que..
- Se enciende la luz roja durante un tiempo determinado y vuelta a empezar
Conectemos los cables
Siempre que conectemos o desconectemos componentes a la placa nos aseguraremos que no esta alimentada ni por el cable de las pilas ni por el cable USB.
Ahora vamos a conectar los cables de los leds a los pines digitales, ten en cuenta los colores al conectar los cables. En la foro puedes ver señalados con dos cuadraditos azules en la fila superior de pins, que es donde se encuentran los pines digitales. ¡Ojo con respetar los colores de los cables!
Vamos a utilizar:
- el pin digital numero 2 para el color verde
- y el pin digital numero 5 para el color rojo
aunque cualquier otro pin, excepto el pin numero 0, servirían igual.
Ten en cuenta que aunque los dos leds son del mismo color, el color de las luces las vamos a hacer luego con papel de celofán.
Programando el semáforo
Ahora que ya tenemos conectados los cables vamos a programar nuestra receta para las luces del semáforo.
Este es el programa completo para las luces de nuestro semáforo:
Pero vayamos por partes:
- Hemos utilizado variables globales para guardar los valores que configuraran el comportamiento de nuestro semáforo (tiempos de espera, tiempos de parpadeos, en que pin hemos conectado cada led..)
- Hemos utilizado funciones para hacer nuestro programa mas corto y fácil de leer
- Hemos añadido comentarios a aquellas partes de nuestro programa que pueden requerir alguna explicación adicional
- De esta forma el bucle principal de nuestro programa se reduce a 5 bloques de instrucciones muy sencillas de entender.
Es Tiempo de Manualidades
Con un poco cartulina y celofán es hora de darle un poco de vida a nuestro semáforo.
Puedes seguir las instrucciones completas para construir un semáforo en la pagina de Bq http://diwo.bq.com/construye-tu-propio-semaforo/
Detrás de la Magia
Aunque ahora nos pueda parece magia, detrás de los bloques que acabamos de programar esta el código fuente que luego se compila para subir a la placa. Si tienes curiosidad puedes pulsar sobre el siguiente enlace y ver el codigo que acabamos de escribir con la ayuda de Bitbloq:
[code language=”cpp” collapse=”true” title=”Expandir Código Arduino de nuestro Semáforo”]
/*** Global variables ***/
int luz_verde;
int luz_roja;
int tiempo_de_luz_verde=10000;
int tiempo_de_parpadeo=4000;
int tiempo_de_luz_roja=10000;
// 10.000 milisegundos son 10 segundos
/*** Function declaration ***/
void encender_luz_verde ();
void parpadear ();
void encender_luz_roja ();
void setup()
{
luz_verde=(2);
luz_roja=(5);
}
void loop()
{
encender_luz_verde();
delay(tiempo_de_luz_verde);
parpadear();
encender_luz_roja();
// Estos cinco bloques representan un ciclo, y se ejecutan repeditamente en bucle
delay(tiempo_de_luz_roja);
}
/*** Function definition ***/
void encender_luz_verde () {
pinMode(luz_verde,OUTPUT);
digitalWrite(luz_verde,HIGH);
pinMode(luz_roja,OUTPUT);
digitalWrite(luz_roja,LOW);
}
void parpadear () {
int contador=0;
for (contador = 1; contador <= 4; contador++) {
pinMode(luz_verde,OUTPUT);
digitalWrite(luz_verde,HIGH);
delay(tiempo_de_parpadeo / 8);
pinMode(luz_verde,OUTPUT);
digitalWrite(luz_verde,LOW);
// Dividimos el tiempo de espera entre 8 para que parpadee 4 veces
delay(tiempo_de_parpadeo / 8);
}
}
void encender_luz_roja () {
pinMode(luz_verde,OUTPUT);
digitalWrite(luz_verde,LOW);
pinMode(luz_roja,OUTPUT);
digitalWrite(luz_roja,HIGH);
}
[/code]
¡Esperamos que te haya gustado! ¡No olvides compartirlo con tus amigos!
¡Nos vemos en el próximo tutorial!
Latest posts by José Manuel Tejeda (see all)
- [Libro] Mindset: La Actitud del Éxito de Carol Dweck - June 20, 2017
- Nuevo Grupo de Desarrollo Personal a través del Entrenamiento Mental - May 19, 2017
- 9 Actitudes Mindfulness para una vida mas plena y consciente… - May 16, 2017
Leave a Reply
Want to join the discussion?Feel free to contribute!