¡Construir un controlador de semáforo Arduino lo ayuda a desarrollar habilidades básicas de codificación!  Te ayudamos a comenzar.

Programación Arduino para principiantes: Tutorial de proyecto de controlador de semáforo

Anuncio El semáforo de Arduino es un pequeño y divertido proyecto que puedes construir en menos de una hora. Aquí le mostramos cómo construir el suyo usando un Arduino y cómo cambiar el circuito para una variación avanzada. Si prefiere ver esto como un tutorial en video, lo cubrimos: Lo que necesita para construir un controlador de semáforo Arduino Además del Arduino básico, necesitarás: 1 x resistencia de 10k ohmios 1 x interruptor de botón 6 x resistencias de 220 ohmios Un tablero Cables de conexión LED rojos, amarillos y verdes Casi cualquier Arduino trabajará para este proyecto, siempre que

Anuncio

El semáforo de Arduino es un pequeño y divertido proyecto que puedes construir en menos de una hora. Aquí le mostramos cómo construir el suyo usando un Arduino y cómo cambiar el circuito para una variación avanzada.

Si prefiere ver esto como un tutorial en video, lo cubrimos:

Lo que necesita para construir un controlador de semáforo Arduino

Además del Arduino básico, necesitarás:

  • 1 x resistencia de 10k ohmios
  • 1 x interruptor de botón
  • 6 x resistencias de 220 ohmios
  • Un tablero
  • Cables de conexión
  • LED rojos, amarillos y verdes

Casi cualquier Arduino trabajará para este proyecto, siempre que tenga suficientes pines. Asegúrese de leer nuestra guía de compra Arduino Guía de compra Arduino: ¿Qué placa debe obtener? Guía de compra de Arduino: ¿Qué placa debería obtener? Hay tantos tipos diferentes de placas Arduino por ahí, que te perdonarían por estar confundido. ¿Cuál deberías comprar para tu proyecto? ¡Permítanos ayudarlo con esta guía de compra de Arduino! Lea más si no está seguro de qué modelo necesita. Es posible que ya tenga estas piezas en su kit de inicio Arduino ¿Qué hay en su kit de inicio Arduino? [Principiantes de Arduino] ¿Qué hay en tu kit de inicio de Arduino? [Principiantes de Arduino] Frente a una caja llena de componentes electrónicos, es fácil sentirse abrumado. Aquí hay una guía de lo que encontrará exactamente en su kit. Lee mas .

Semáforo de Arduino: los fundamentos

Comencemos pequeño. Un semáforo básico y único es un buen lugar para comenzar. Aquí está el circuito:

Diagrama de circuito para semáforo básico de Arduino

Conecte el ánodo (pata larga) de cada LED a los pines digitales ocho, nueve y diez (a través de una resistencia de 220 ohmios). Conecte los cátodos (pata corta) a la tierra del Arduino.

Código para el semáforo de Arduino

Comience definiendo variables para que pueda abordar las luces por nombre en lugar de un número. Comience un nuevo proyecto Arduino y comience con estas líneas:

 int red = 10; int yellow = 9; int green = 8; 

A continuación, agreguemos la función de configuración, donde configurará los LED rojo, amarillo y verde como salidas. Como ha creado variables para representar los números de pin, ahora puede referirse a los pines por nombre:

 void setup(){ pinMode(red, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT); } 

La función pinMode configura el Arduino para usar un pin dado como salida. Tienes que hacer esto para que tus LED funcionen. Ahora para la lógica real del semáforo. Aquí está el código que necesitas. Agregue esto debajo de sus definiciones de variables y función de configuración:

 void loop(){ changeLights(); delay(15000); } void changeLights(){ // green off, yellow on for 3 seconds digitalWrite(green, LOW); digitalWrite(yellow, HIGH); delay(3000); // turn off yellow, then turn red on for 5 seconds digitalWrite(yellow, LOW); digitalWrite(red, HIGH); delay(5000); // red and yellow on for 2 seconds (red is already on though) digitalWrite(yellow, HIGH); delay(2000); // turn off red and yellow, then turn on green digitalWrite(yellow, LOW); digitalWrite(red, LOW); digitalWrite(green, HIGH); delay(3000); } 

Cargue este código en su Arduino y ejecútelo (asegúrese de seleccionar la placa y el puerto correctos en los menús Herramientas > Tablero y Herramientas > Puerto ). Debe tener un semáforo en funcionamiento que cambie cada 15 segundos, como este (acelerado):

Semáforo Arduino en acción

Analicemos este código. La función changeLights realiza todo el trabajo duro. Esto gira el semáforo a través de amarillo y rojo, luego vuelve a verde. Como esto se llama dentro de la función de bucle, el Arduino ejecutará este código para siempre, con una pausa de 15 segundos cada vez.

La función changeLights consta de cuatro pasos distintos:

  • Verde encendido, amarillo apagado
  • Amarillo apagado, rojo encendido
  • Amarillo encendido, rojo encendido
  • Verde encendido, rojo apagado, amarillo apagado

Estos cuatro pasos replican el proceso utilizado en semáforos reales. Para cada paso, el código es muy similar. El LED apropiado se enciende o apaga usando digitalWrite . Esta es una función de Arduino que se usa para configurar los pines de salida en ALTO (para encendido) o BAJO (para apagado).

Después de habilitar o deshabilitar los LED requeridos, el retraso hace que el Arduino espere una cantidad de tiempo determinada. Tres segundos en este caso.

Yendo más profundo: paso de peatones Arduino

Ahora que conoce los conceptos básicos, mejorémoslo. Agregue un botón para que los peatones cambien la luz cuando lo deseen:

Diagrama de circuito para cruce peatonal Arduino

Observe cómo el semáforo es exactamente el mismo que el ejemplo anterior. Conecte el botón al pin digital 12. Notará que el interruptor tiene una resistencia de alta impedancia de 10k-ohmios conectada, y puede que se pregunte por qué. Esta es una resistencia desplegable.

Un interruptor deja que la corriente fluya o no. Esto parece bastante simple, pero en un circuito lógico, la corriente siempre debe fluir en un estado alto o bajo (recuerde, 1 o 0, ALTO o BAJO). Puede suponer que un interruptor de botón que no se presiona realmente estaría en un estado BAJO, pero de hecho, se dice que está 'flotando', porque no se consume corriente.

En este estado flotante, es posible que ocurra una lectura falsa ya que fluctúa con interferencia eléctrica. En otras palabras, un interruptor flotante no proporciona una lectura ALTA ni BAJA confiable. Una resistencia desplegable mantiene una pequeña cantidad de corriente que fluye cuando se cierra el interruptor, lo que garantiza una lectura precisa de bajo estado.

En otros circuitos lógicos, puede encontrar una resistencia pull-up en su lugar, y esto funciona según el mismo principio, pero a la inversa, asegurándose de que esa puerta lógica particular esté predeterminada en alto.

Ahora, en la parte del bucle del código, en lugar de cambiar las luces cada 15 segundos, leerá el estado del interruptor de botón y solo cambiará las luces cuando esté activado.

Código para el paso de peatones Arduino

Comience agregando una nueva variable para almacenar el pin de su botón:

 int button = 12; // switch is on pin 12 

Ahora, en la función de configuración, agregue una nueva línea para declarar el interruptor como entrada. Agregue una línea para configurar los semáforos en el escenario verde. Sin esta configuración inicial, se apagarían hasta la primera vez que se ejecute changeLights .

 pinMode(button, INPUT); digitalWrite(green, HIGH); 

En su lugar, cambie la función de bucle completa a la siguiente:

 void loop() { if (digitalRead(button) == HIGH){ delay(15); // software debounce if (digitalRead(button) == HIGH) { // if the switch is HIGH, ie. pushed down - change the lights! changeLights(); delay(15000); // wait for 15 seconds } } } 

Deberias hacer eso. Tal vez se pregunte por qué la verificación del botón ocurre dos veces ( digitalRead (botón) ), separada por un pequeño retraso. Esto es un rebote. Al igual que la resistencia desplegable para el botón, esta simple comprobación detiene el código que detecta una interferencia menor al presionar un botón.

Al esperar dentro de la declaración if durante 15 segundos, los semáforos no pueden cambiar durante al menos esa duración. Una vez que hayan transcurrido 15 segundos, el bucle se reinicia. Cada reinicio del bucle, lee el estado del botón nuevamente, pero si no se presiona, la instrucción if nunca se activa, las luces nunca cambian y el programa se reinicia nuevamente.

Así es como se ve (acelerado):

Cruce peatonal Arduino en acción

Semáforo Arduino con cruce

Probemos con un modelo más avanzado. En lugar de un cruce de peatones, cambie su circuito para tener dos semáforos:

Diagrama de Cricuit para semáforos Arduino con cruce

Conecte el segundo semáforo a los pines digitales 11, 12 y 13.

Código para el semáforo de Arduino con cruce

Primero, asigne sus nuevos pines de semáforo a variables y configúrelos como salidas, como en el primer ejemplo:

 // light one int red1 = 10; int yellow1 = 9; int green1 = 8; // light two int red2 = 13; int yellow2 = 12; int green2 = 11; void setup(){ // light one pinMode(red1, OUTPUT); pinMode(yellow1, OUTPUT); pinMode(green1, OUTPUT); // light two pinMode(red2, OUTPUT); pinMode(yellow2, OUTPUT); pinMode(green2, OUTPUT); } 

Ahora, actualice su bucle para usar el código del primer ejemplo (en lugar del cruce de peatones):

 void loop(){ changeLights(); delay(15000); } 

Una vez más, todo el trabajo se lleva a cabo en la función changeLights . En lugar de ir rojo > rojo y amarillo > verde, este código alternará los semáforos. Cuando uno está en verde, el otro está en rojo. Aquí está el código:

 void changeLights(){ // turn both yellows on digitalWrite(green1, LOW); digitalWrite(yellow1, HIGH); digitalWrite(yellow2, HIGH); delay(5000); // turn both yellows off, and opposite green and red digitalWrite(yellow1, LOW); digitalWrite(red1, HIGH); digitalWrite(yellow2, LOW); digitalWrite(red2, LOW); digitalWrite(green2, HIGH); delay(5000); // both yellows on again digitalWrite(yellow1, HIGH); digitalWrite(yellow2, HIGH); digitalWrite(green2, LOW); delay(3000); // turn both yellows off, and opposite green and red digitalWrite(green1, HIGH); digitalWrite(yellow1, LOW); digitalWrite(red1, LOW); digitalWrite(yellow2, LOW); digitalWrite(red2, HIGH); delay(5000); } 

Así es como se ve (acelerado):

Semáforo Arduino con cruce en acción

Semáforo de Arduino Próximos pasos

Eso es todo por hoy. Su nueva comprensión de los LED y botones de Arduino se aplica a todo tipo de proyectos diferentes. Si desea expandir estos semáforos, ¿por qué no construir un cruce de cuatro vías (o más), completo con muchos cruces peatonales y semáforos peatonales?

¿O por qué no ampliar sus nuevas habilidades con un proyecto más grande como este controlador MIDI DIY o el robot Arduino con Xod? También puede echar un vistazo a la codificación Arduino con VS Code y PlatformIO Mejor codificación Arduino con VS Code y PlatformIO Mejor codificación Arduino con VS Code y PlatformIO ¿Desea una manera fácil de comenzar a codificar Arduino? Con PlatformIO y VS Code, puede simplificar los proyectos de Arduino y aprender más rápido. Lee mas .

Haber de imagen: androsvector / Shutterstock

Explore más sobre: ​​Arduino, Tutoriales de proyectos de bricolaje, Programación.