UN CLASICO: SEMAFORO CON ARDUINO Y EJEMPLO DE LIBRERIA.

  Me he decidido a escribir este artículo como ejemplo de como avanzar en la programación con arduino. Mi hijo Pablo está haciendo unas prácticas con arduino en su clase de tecnología en 1º de bachillerato. Una de las prácticas básicas y clásicas es la del semáforo. En concreto tienen que programar un semaforo con arduino, de manera que este pase de rojo a verde, de verde a ambar intermitente y por último a rojo, y vuelta a empezar. Además mientras parpadea en ambar se activa un pitido intermitente a modo de aviso para invidentes.



 Vemos el esquema de conexiones y animación de funcionamiento:



 Este es un ejemplo del código que se suele generar para esta práctica:



   Paso a paso vamos activando unos pines y desactivando los demás, con la diferencia del ambar y el pitido que le ponemos un bucle “for” para generar la  intermitencia.

   Esto está muy bien como solución, pero no es válido si queremos ir un poco más allá. El problema es que si por ejemplo queremos poner 2 o más semáforos, es muy engorroso controlarlos de esta forma. ¿Como podemos mejorarlo?

   Podemos crear un objeto “Semaforo”:



   Como podemos ver en el ejemplo, declaramos nuestra clase Semaforo, y luego creamos un objeto al que llamamos como queramos, en el ejemplo miSemaforo, del tipo Semaforo, y le pasamos los pines en los que están conectados los leds rojo, amarillo y verde, así como el zumbador. También he creado dos funciones, una que pone el semaforo en verde, y otra que lo pone en rojo pasando antes por el ambar intermitente con el sonido. Si lo comprobáis, el programa hace exactamente lo mismo que el anterior, con la diferencia de que si por ejemplo queremos poner más de un semaforo, solo tenemos que declarar tantos objetos como queramos del tipo semáforo y en el loop() hacer la combinación que queramos para coordinarlos.

   Ahora vamos a dar un paso más. En vez de incluir la clase en nuestro programa, vamos a incluirla en una librería. La información para crear una librería la podemos encontrar en este enlace de la página de Arduino:

https://playground.arduino.cc/ArduinoNotebookTraduccion/Appendix2

   Necesitamos un archivo de cabecera, Semaforo.h, en el que declaramos la clase Semaforo, variables y funciones. Solo la declaración. Y un archivo Semaforo.cpp en el que escribimos el código. Quedarían de la siguiente forma:

Semaforo.h


Semaforo.cpp


   Como podéis ver he incluido tres funciones más que nos van a dar más posibilidades a la hora de programar. Cambiar() pondrá el semaforo en verde si este está en rojo, y en rojo (pasando por ambar intermitente) si este está en verde. EsRojo() y EsVerde() nos devolverán TRUE o FALSE según el semaforo esté en rojo o en verde. Podríamos seguir enriqueciendo la librería añadiendo más funcionalidades y diferentes configuraciónes de semáforos. Por ahora nos ceñiremos al ejemplo de la práctica de Pablo.

   Al final del artículo está el link a la librería y los ejemplos que vamos a ver a continuación. Solo tenéis que descargarla e importarla desde el ide de arduino directamente en zip o descomprimirla y grabarla en la carpeta de librerías del ide. En este último caso tenemos que reiniciar el ide para que la reconozca. Una vez importada, la veremos en la lista de librerías y podremos también acceder a los ejemplos desde el menú. Si tenéis dudas sobre como importar la librería podéis consultar el siguiente tutorial:

https://www.arduino.cc/en/Guide/Libraries#

   A partir de aquí, lo único que tenemos que hacer es incluir la librería en nuestro programa. El ejemplo de la práctica quedaría así de simple:



   Otra forma sería esta:



   Como podemos ver con un par de lineas tenemos exactamente el mismo resultado que en la práctica inicial.

   Y ahora viene lo mejor. Si tenemos dos semáforos y queremos que cambien alternativamente, como en un cruce de calles, tendríamos este esquema y este programa:




   Otro ejemplo, esta vez con dos semáforos que cambian con la pulsación un botón conectado al pin 7:




   Y así podemos escribir rápidamente muchas combinaciones usando tantos semáforos como podamos conectar físicamente a nuestro arduino.

   Espero que sea de ayuda.

   Link a la librería:  https://github.com/Lamolda/Semaforo.git

Comentarios

Entradas populares de este blog

Mirrorlink. Smartphone Samsung Galaxy A5 y Peugeot Partner Tepee. Controla tu móvil desde la pantalla de tu coche.

TeLEOsketch. Un experimento con arduino, bluetooth, appinventor y android.