Programación Arduino para principiantes El controlador de semáforo

Programación Arduino para principiantes El controlador de semáforo / Bricolaje

El semáforo es un proyecto pequeño y divertido, que se puede completar en menos de una hora. Aprende cómo construir el tuyo - usando un Arduino - y cómo modificar el circuito para un modelo avanzado.

No se preocupe si nunca ha usado un Arduino antes, tenemos una guía para principiantes Comenzando con Arduino: una guía para principiantes Comenzando con Arduino: una guía para principiantes Arduino es una plataforma de creación de prototipos de electrónica de código abierto basada en flexibilidad, fácil para utilizar hardware y software. Está dirigido a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos. Lee mas .

Nota: Este es el último de una serie de tutoriales para principiantes para Arduino, la plataforma de creación de prototipos de electrónica de código abierto. Aquí hay una lista de los artículos anteriores de la serie:

  • ¿Qué es Arduino y qué puedes hacer con él? ¿Qué es Arduino y qué puedes hacer con él? ¿Qué es Arduino y qué puedes hacer con él? El Arduino es un pequeño dispositivo electrónico notable, pero si nunca ha usado uno antes, ¿qué son exactamente y qué puede hacer con uno? Lee mas
  • ¿Qué es un kit de inicio Arduino y qué contiene? ¿Qué está incluido en un kit de inicio Arduino? [MakeUseOf Explica] ¿Qué se incluye en un kit de inicio Arduino? [Explica MakeUseOf] Anteriormente presenté el hardware de código abierto Arduino aquí en MakeUseOf, pero va a necesitar algo más que el Arduino real para construir algo a partir de él y comenzar realmente. Arduino "kits de inicio" son ... Leer más
  • Más componentes geniales para comprar con su kit de inicio 8 Más componentes geniales para sus proyectos Arduino 8 Componentes más geniales para sus proyectos Arduino Por lo tanto, está pensando en obtener un kit de inicio Arduino, pero se pregunta si habrá algunos LED y resistencias básicos. suficiente para mantenerte ocupado durante el fin de semana? Probablemente no. Aquí hay otros 8 ... Leer más
  • Comenzando con su Arduino Starter Kit - Instalar controladores y configurando la placa y el puerto Comenzando con su Arduino Starter Kit - Instalar los controladores y configurando la placa y el puerto Comenzando con su Arduino Starter Kit - Instalar los controladores y configurando la placa y Puerto Entonces, te has comprado un kit de inicio Arduino, y posiblemente algunos otros componentes geniales, ¿y ahora qué? ¿Cómo empezar realmente con la programación de esta cosa de Arduino? ¿Cómo se configura ... Leer más
  • Una mirada más cercana a la estructura de una aplicación Arduino y el programa Blink de ejemplo

Que necesitas

Aparte del Arduino básico, necesitarás:

  • LEDs rojos, amarillos y verdes.
  • Un tablero.
  • 6 x 220? resistencias.
  • Cables de conexion.
  • 1 x pulsador.
  • 1 x 10k? resistor

Casi cualquier Arduino será adecuado, siempre que tenga suficientes pines. Asegúrese de leer nuestra guía de compras Guía de compras de Arduino: ¿Qué tabla debería obtener? Guía de compra de Arduino: ¿Qué tabla debería obtener? Hay tantos tipos diferentes de tableros de Arduino por ahí que se te perdonará por estar confundido. ¿Qué debes comprar para tu proyecto? Déjanos ayudarte, con esta guía de compras de Arduino! Lee más si no estás seguro del modelo que necesitas. Probablemente tengas estas partes en tu kit de inicio ¿Qué hay en tu Arduino Starter Kit? [Principiantes de Arduino] ¿Qué hay en tu Arduino Starter Kit? [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ás exactamente en tu kit. Leer más ya.

Un ejemplo simple

Vamos a empezar poco a poco. Un semáforo sencillo y básico es un buen lugar para comenzar. Aquí está el circuito:

Conecte el ánodo (pata larga) de cada LED a los pines digitales de ocho, nueve y diez (a través de una resistencia de 220?). Conectar los cátodos (pierna corta) al suelo arduino..

Utilicé Fritzing para dibujar estos diagramas. No solo es fácil de usar, es gratis!

El código

Comience por definir las variables para que podamos abordar las luces por nombre en lugar de un número. Comienza un nuevo proyecto de Arduino, y comienza con estas líneas:

int rojo = 10; int amarillo = 9; int verde = 8;

A continuación, agreguemos la función de configuración, donde configuraremos los LED rojo, amarillo y verde para que sean salidas. Ya que ha creado variables para representar los números de pin, ahora puede referirse a los pines por su nombre.

configuración de nulos () pinMode (rojo, SALIDA); pinMode (amarillo, SALIDA); PinMode (verde, SALIDA); 

Eso fue fácil. Ahora para la parte difícil - la lógica real de un semáforo. Crea una función separada para cambiar las luces (verás por qué más adelante).

La primera vez que comienza a programar, el código en sí es muy rudimentario: está resolviendo los detalles lógicos minuciosos que presentan el mayor problema. La clave para ser un buen programador es poder analizar cualquier proceso y dividirlo en sus pasos fundamentales. Aquí está el resto del código:

void loop () changeLights (); retraso (15000);  void changeLights () // verde apagado, amarillo encendido durante 3 segundos digitalWrite (verde, LOW); escritura digital (amarillo, ALTO); retraso (3000); // apague el amarillo, luego encienda el rojo durante 5 segundos digitalWrite (amarillo, LOW); escritura digital (rojo, ALTO); retraso (5000); // rojo y amarillo encendido durante 2 segundos (el rojo ya está encendido) digitalWrite (amarillo, ALTO); retraso (2000); // apague el rojo y el amarillo, luego encienda verde digitalWrite (amarillo, LOW); escritura digital (rojo, bajo); escritura digital (verde, ALTA); retraso (3000); 

¡Hecho! Ahora, cargue y ejecute (asegúrese de seleccionar la placa y el puerto correctos de la Herramientas > Puerto y Herramientas > Tablero menús). Debería tener un semáforo en funcionamiento que cambia cada 15 segundos, como este (acelerado):

Un paso de peatones

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

Observe cómo el semáforo es exactamente igual al del ejemplo anterior. Conecte el botón al pin digital 12. ¿Notará que el interruptor tiene una impedancia alta de 10k? resistencia adjunta a ella, y puede que se pregunte por qué. Esto se llama una resistencia desplegable. Es un concepto difícil de entender al principio, pero tengan paciencia conmigo..

Un interruptor o deja que la corriente fluya, o no lo hace. Esto parece bastante simple, pero en un circuito lógico, la corriente siempre debe estar fluyendo en estado alto o bajo (recuerde - 1 o 0, alto o bajo). Podría suponer que un interruptor de botón pulsador que no se está presionando en realidad se definirá como en estado bajo, pero en realidad se dice que está 'flotando', porque no se está extrayendo corriente en absoluto.

En este estado flotante, es posible que ocurra una lectura falsa ya que fluctúa con la interferencia eléctrica. En otras palabras, un interruptor flotante no proporciona una lectura de estado alta ni baja confiable. Una resistencia desplegable mantiene una pequeña cantidad de corriente que fluye cuando el interruptor está cerrado, lo que garantiza una lectura precisa del estado bajo. En otros circuitos lógicos, es posible que encuentre una resistencia de pull-up: esto funciona con el mismo principio, pero a la inversa, asegurándose de que la puerta lógica en particular esté por defecto en alta..

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

El código

Comience agregando una nueva variable al inicio del programa:

botón int = 12; // el interruptor está en el pin 12 

Ahora, en la función de configuración, agregue una nueva línea para declarar el cambio como una entrada. También he añadido una sola línea para iniciar los semáforos en el escenario verde. Sin esta configuración inicial, se apagarían, hasta la primera vez que se iniciara un cambio de luces () usando una función.

pinMode (botón, ENTRADA); escritura digital (verde, ALTA);

Cambie la función de bucle completo a lo siguiente:

void loop () if (digitalRead (button) == HIGH) delay (15); // software debounce if (digitalRead (button) == HIGH) // si el interruptor es HIGH, es decir. empujado hacia abajo - cambiar las luces! changeLights (); retraso (15000); // espera 15 segundos

Deberias hacer eso. Quizás se pregunte por qué el botón se marca dos veces (digitalRead (botón)), separados por un pequeño retraso. Esto se llama debouncing. Al igual que la resistencia desplegable era necesaria para el botón, esta simple comprobación detiene el código que detecta interferencias menores al presionar un botón. No tienes que hacer esto (y probablemente funcionaría bien sin él), pero es una buena práctica.

Esperando dentro del Si Durante 15 segundos, los semáforos no pueden cambiar durante al menos esa duración. Una vez transcurridos 15 segundos, el bucle se reinicia. Cada reinicio del bucle, lea el estado del botón nuevamente, pero si no está presionado, el Si la instrucción nunca se activa, las luces nunca cambian y simplemente se reinicia nuevamente.

Así es como se ve (acelerado):

Un empalme

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

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

El código

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

// luz uno int rojo1 = 10; int yellow1 = 9; int green1 = 8; // luz dos int rojo2 = 13; int amarillo2 = 12; int green2 = 11; void setup () // light one pinMode (red1, OUTPUT); pinMode (amarillo1, SALIDA); modo de pin (verde1, SALIDA); // light two pinMode (red2, SALIDA); pinMode (amarillo2, SALIDA); modo de pin (verde2, SALIDA); 

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

void loop () changeLights (); retraso (15000); 

Una vez más, todo el trabajo se está llevando a cabo en el cambiar luces () función. En lugar de ir rojo > rojo Y amarillo > verde, Este código alternará los semáforos. Cuando uno está en verde, el otro estará en rojo. Aquí está el código:

void changeLights () // convierte ambos amarillos en digitalWrite (green1, LOW); escritura digital (amarillo1, ALTO); escritura digital (amarillo2, ALTO); retraso (5000); // apaga ambos amarillos, y opuesto verde y rojo digitalWrite (amarillo1, BAJO); escritura digital (red1, ALTA); escritura digital (amarillo2, BAJO); digitalWrite (red2, LOW); digitalWrite (green2, HIGH); retraso (5000); // ambos amarillos nuevamente en digitalWrite (yellow1, HIGH); escritura digital (amarillo2, ALTO); digitalWrite (green2, LOW); retraso (3000); // apaga ambos amarillos, y opuesto verde y rojo digitalWrite (verde1, ALTO); escritura digital (amarillo1, BAJA); digitalWrite (rojo1, BAJO); escritura digital (amarillo2, BAJO); escritura digital (red2, ALTA); retraso (5000); 

Esto es lo que parece (acelerado):

Eso es todo por ahora, así que espero que hayas aprendido mucho y te hayas divertido escribiendo desde cero. Se ensució las manos con unos pocos LED y resistencias, además de agregar un interruptor con una resistencia desplegable, espero que haya entendido por qué necesitamos uno. Juega con el código, ajústalo y, lo más importante, diviértete. Si realiza alguna adición o cambio, háganoslo saber en los comentarios.?

Y recuerde a sus compañeros de bricolaje durante las vacaciones o cuando llegue su cumpleaños con estas ideas de regalos solo para los fanáticos de Arduino. 10 ideas de regalo para Arduino Tinkerer en su vida. ¿Arduino amante en tu vida? Aquí hay algunas ideas de regalos increíbles: libros, kits, componentes de proyectos, ¡y más! Lee mas :

Crédito de la imagen: androsvector a través de Shutterstock.com

Explorar más sobre: ​​Arduino, Programación.