La programación de arduino para principiantes: el controlador de semáforos
![](https://cdn.gocrazyx.info/pcb/arduino-programming-for-beginners-the-traffic_1.jpg)
El semáforo es un poco divertido proyecto, que puede ser completado en menos de una hora. Aprender a construir su propio - utilizando un Arduino - y cómo modificar el circuito para un modelo avanzado.
No se preocupe si usted nunca ha usado un Arduino antes, tenemos una Guía para principiantes.Primeros pasos con Arduino: una guía para principiantesPrimeros pasos con Arduino: una guía para principiantesArduino es una plataforma electrónica de prototipos de código abierto basado en flexible y fácil de usar hardware y software. Está pensado para artistas, diseñadores, aficionados y cualquier persona interesada en la creación de objetos interactivos o ambientes.Lee mas
Nota: Este es el último de una serie de tutoriales de nivel principiante para Arduino, el sistema electrónico de código abierto plataforma de creación de prototipos. He aquí una lista de los artículos anteriores de la serie:
- ¿Qué es Arduino & Qué puedes hacer con eso
- ¿Qué es un kit de arranque de Arduino & ¿Qué contiene?
- Más Cool Componentes Para comprar con su kit de inicio
- Para hacer funcionar su Arduino Starter Kit - Instalación de los controladores & Preparando la placa & Puerto
- Una mirada más atenta en la estructura de una aplicación Arduino & El programa de ejemplo Blink
Que necesitas
Aparte de la Arduino básico, se necesita:
- LEDs rojo, amarillo y verde.
- Una placa.
- 6 x 220? resistencias.
- Conexión de cables.
- 1 x interruptor de botón pulsador.
- 1 x 10k? resistor
Casi cualquier Arduino será adecuado, siempre que tenga suficientes pines. Asegúrese de leer nuestra guía de compra Si no está seguro de cuál es el modelo que necesita. Es probable que tenga estas piezas en su kit de inicio ya.Arduino Guía de compra: ¿Qué Junta debe llegar?Arduino Guía de compra: ¿Qué Junta debe llegar?Hay tantos tipos diferentes de placas Arduino por ahí, que sería perdonado por ser confundidos. ¿Qué debe usted comprar para su proyecto? Vamos a ayudarle, con esta guía de compra Arduino!Lee mas
Vídeo: Curso Arduino - #2 Semaforo
Un ejemplo sencillo
Vamos a empezar poco a poco. Un semáforo básica, solo es un buen lugar para comenzar. Aquí está el circuito:
Conectar el ánodo (pata larga) de cada LED a los pines digitales ocho, nueve, y diez (a través de un 220? Resistor). Conectar los cátodos (corta la pierna) para Arduino suelo.
Solía Fritzing para dibujar estos diagramas. No sólo es fácil de usar, es gratis!
El código
Comience por definir variables, de modo que poder tratar las luces por su nombre en lugar de un número. Iniciar un nuevo proyecto Arduino, y comenzar con estas líneas:
int roja = 10-int amarillo = 9-verde int = 8-
A continuación, vamos a añadir la función de configuración, where`ll configuramos los LEDs rojos, amarillos y verdes para ser salidas. Puesto que usted ha creado variables para representar los números de pin, ahora se puede hacer referencia a los pines por su nombre en su lugar.
vacío preparar(){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. Crear una función separada para el cambio de las luces (verá por qué más adelante).
Cuando empiece la programación, el código en sí es muy rudimentaria - es averiguar los detalles de lógica minuto que presenta el mayor problema. La clave para ser un buen programador es ser capaz de mirar a cualquier proceso y descomponerlo en sus etapas fundamentales. Aquí está el resto del código:
vacío lazo(){changeLights()-retrasar(15000)-}vacío changeLights(){// off verde, amarillo durante 3 segundosdigitalWrite(verde, BAJO)-digitalWrite(amarillo, ALTO)-retrasar(3000)-// desactivar amarillo, luego girar en rojo por 5 segundosdigitalWrite(amarillo, BAJO)-digitalWrite(rojo, ALTO)-retrasar(5000)-// rojo y amarillo en durante 2 segundos (rojo ya está en aunque)digitalWrite(amarillo, ALTO)-retrasar(2000)-// desactivar rojo y amarillo, y luego se pone en verdedigitalWrite(amarillo, BAJO)-digitalWrite(rojo, BAJO)-digitalWrite(verde, ALTO)-retrasar(3000)-}
¡Hecho! Ahora, cargar y ejecutar (asegúrese de seleccionar el tablero y el puerto correcto de la Herramientas gt; Puerto y Herramientas gt; Tablero menús). Usted debe tener una luz de tráfico de trabajo que cambia cada 15 segundos, como esto (acelerado):
Un paso de peatones
Ahora que sabes lo básico, vamos a mejorarlo. Añadir en un pulsador para peatones para cambiar la luz cuando quieran:
Observe cómo el semáforo es exactamente el mismo que el ejemplo anterior. Conecte el botón para pin digital 12. Se dará cuenta de que el interruptor de 10k tiene una alta impedancia? resistencia unida a él, y es posible que se pregunte por qué. Esto se llama una resistencia de desconexión. Es un concepto difícil de entender al principio, pero tengan paciencia conmigo.
Un interruptor o bien permite que el flujo de corriente, o no lo hace. Esto parece bastante simple, pero en un circuito lógico, la corriente debe ser siempre fluye, ya sea en un estado de alta o baja (recuerde - 1 o 0, alto o bajo). Es posible suponer que un interruptor pulsador que en realidad no está siendo empujado se definiría como estar en un estado de baja, pero de hecho se dice que es ‘flotante`, porque no hay corriente se está elaborando en absoluto.
En este estado flotante, es posible que una lectura falsa ocurrirá, ya que fluctúa con la interferencia eléctrica. En otras palabras, un interruptor flotante está dando ni una alta fiabilidad, ni bajo la lectura de estado. Una resistencia de la tracción mantiene una pequeña cantidad de corriente que fluye cuando el interruptor está cerrado, asegurando de esta manera una lectura precisa de bajo estado. En otros circuitos lógicos, es posible encontrar una resistencia pull-up en su lugar - esto funciona en el mismo principio, pero en sentido inverso, asegurándose de que determinada lógica de puertas por defecto es alta.
Ahora, en la parte de bucle del código, en lugar de cambiar las luces cada 15 segundos, vamos a leer el estado del interruptor pulsador en su lugar, y sólo cambiar las luces cuando está activado.
El código
Comience por la adición de una nueva variable al inicio del programa:
botón int = 12- // interruptor está en el pin 12
Ahora, en la función de configuración, añadir una nueva línea de declarar el interruptor como una entrada. También he añadido una sola línea para comenzar el semáforo en la fase verde. Sin este ajuste inicial, serían apagados, hasta que la primera vez que un changeLights () se inició el uso de una función.
pinMode(botón, ENTRADA)-digitalWrite(verde, ALTO)-
Cambiar toda la función de bucle para el siguiente lugar:
vacío lazo() {Si (digitalRead(botón) == ALTO){retrasar(15)- // antirrebote de softwareSi (digitalRead(botón) == ALTO) {// si el interruptor es alta, es decir. empujado hacia abajo - cambiar las luces!changeLights()-retrasar(15000)- // espere 15 segundos}}}
Deberias hacer eso. Usted puede preguntarse por qué el botón se comprueba en dos ocasiones (digitalRead (botón)), Separadas por un pequeño retraso. Esto se llama supresión de rebotes. Al igual que era necesaria la resistencia de tirar hacia abajo del botón, este sencillo de retención detiene el código de detección de interferencias de menor importancia como una pulsación de botón. Usted no tiene que hacer esto (y probablemente funcionará bien sin él), pero es una buena práctica.
Vídeo: Control de semáforo con LabVIEW y Arduino
Al esperar en el interior del Si declaración durante 15 segundos, el semáforo no puede cambiar por lo menos durante esa duración. Una vez que 15 segundos es de hasta, se reinicia el bucle. Cada reinicio del bucle para leer el estado del botón de nuevo, pero si no se presiona, el Si declaración nunca se activa, las luces nunca cambian, y simplemente se reinicia de nuevo.
Así es como esto se ve (acelerado):
Un Junction
Vamos a probar un modelo más avanzado. En lugar de un paso de peatones, modificar el circuito para tener dos semáforos:
Conectar el segundo semáforo a los pines digitales 11, 12 y 13.
El código
En primer lugar, asignar sus nuevos pasadores de semáforos a las variables, y configurarlos como salidas, al igual que en el primer ejemplo:
Vídeo: Cruce de Semáforos || Arduino & IOT
// una luzint red1 = 10-int amarillo1 = 9-int green1 = 8-// la luz de dosint red2 = 13-int amarillo2 = 12-int green2 = 11-vacío preparar(){// una luzpinMode(red1, SALIDA)-pinMode(amarillo1, SALIDA)-pinMode(green1, SALIDA)-// la luz de dospinMode(rojo 2, SALIDA)-pinMode(amarillo2, SALIDA)-pinMode(green2, SALIDA)-}
Ahora, actualizar su bucle de usar el código del primer ejemplo (en lugar del paso de peatones):
vacío lazo(){changeLights()-retrasar(15000)-}
Una vez más, todo el trabajo se está llevando a cabo en el changeLights () función. En vez de ir rojo gt; rojo & amarillo gt; verde, este código se alternará el semáforo. Cuando uno está en verde, el otro estará en rojo. Aquí está el código:
vacío changeLights(){// enciende ambos amarillos endigitalWrite(green1, BAJO)-digitalWrite(amarillo1, ALTO)-digitalWrite(amarillo2, ALTO)-retrasar(5000)-// enciende ambos amarillos fuera, y verde y rojo opuestadigitalWrite(amarillo1, BAJO)-digitalWrite(red1, ALTO)-digitalWrite(amarillo2, BAJO)-digitalWrite(rojo 2, BAJO)-digitalWrite(green2, ALTO)-retrasar(5000)-// ambos amarillos de nuevodigitalWrite(amarillo1, ALTO)-digitalWrite(amarillo2, ALTO)-digitalWrite(green2, BAJO)-retrasar(3000)-// enciende ambos amarillos fuera, y verde y rojo opuestadigitalWrite(green1, ALTO)-digitalWrite(amarillo1, BAJO)-digitalWrite(red1, BAJO)-digitalWrite(amarillo2, BAJO)-digitalWrite(rojo 2, ALTO)-retrasar(5000)-}
Esto es lo que parece (aceleró):
Eso es todo por esta vez, así que esperamos que hayan aprendido un montón y tenía escrito la diversión del rasguño. Tienes las manos sucias con unos LEDs y resistencias, así como la adición de un interruptor con una resistencia de pull down - espero que usted entiende por qué necesitamos una. Juega un poco con el código, ajustarlo, y lo más importante divertirse. Si realiza cualquier adición o cambio, por qué no informarnos sobre ello en los comentarios?