Haz un escáner LED Knight Rider con Arduino

Haz un escáner LED Knight Rider con Arduino / Bricolaje

¿Alguna vez deseó tener su propio auto Knight Industries Two Thousand (KITT)? ¿Sabe, de Knight Rider? Haga que su sueño esté un paso más cerca de la realidad construyendo un escáner LED. Aquí está el resultado final:

Que necesitas

No se necesitan muchas partes para este proyecto, y es posible que ya tenga muchas de ellas:

  • 1 x Arduino UNO o similar
  • 1 x Breadboard
  • 8 x LEDs rojos
  • 8 x 220 ohmios de resistencia
  • 1 x potenciómetro de 10k ohmios
  • Macho a macho enganche los cables

Si tiene un kit de inicio Arduino ¿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. Los "kits de inicio" de Arduino son ... Leer más, es probable que tenga todas estas partes (¿qué puede hacer con un kit de inicio? 5 proyectos únicos de Arduino para principiantes que puede hacer con solo un kit de inicio 5 proyectos únicos de Arduino para principiantes que puede hacer Con sólo un kit de inicio Leer más).

Casi cualquier Arduino funcionará, siempre y cuando tenga ocho pines disponibles (¿Nunca ha usado un Arduino antes? Comience aquí Comenzando con Arduino: una guía para principiantes Comenzando con Arduino: una guía para principiantes Arduino es una plataforma de prototipos de electrónica de código abierto basada en flexibilidad , hardware y software fáciles de usar. Está dirigido a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos. Leer más). Puede usar un Registro de turnos Programación de Arduino - Jugar con registros de turnos (a.k.a Aún más LEDs) Programación de Arduino - Jugar con registros de turnos (a.k.a Aún más LEDs) Hoy intentaré enseñarle un poco sobre Registros de cambios. Estos son una parte bastante importante de la programación de Arduino, básicamente porque expanden la cantidad de salidas que puede usar, a cambio de ... Leer más para controlar los LED, aunque esto no es necesario para este proyecto, ya que el Arduino tiene suficientes pines..

Plan de construcción


Este es un proyecto muy simple. Si bien puede parecer complejo debido a la gran cantidad de cables, cada parte individual es muy simple. Cada diodo emisor de luz (LED) está conectado a su propio pin Arduino. Esto significa que cada LED se puede encender y apagar individualmente. Se conecta un potenciómetro al analógico Arduino en los pines, que se utilizará para ajustar la velocidad del escáner..

El circuito


Conecte la clavija exterior izquierda (mirando hacia el frente, con las clavijas en la parte inferior) del potenciómetro a tierra. Conecte el pin externo opuesto a + 5v. Si no funciona correctamente, invierta estos pines. Conecta el pin medio al Arduino analógico en 2..

Conecte el ánodo (pata larga) de cada LED a los pines digitales de uno a ocho. Conectar los cátodos (pierna corta) al suelo arduino..

El código

Crea un nuevo boceto y guárdalo como “KnightRider”. Aquí está el código:

const int leds [] = 1,2,3,4,5,6,7,8; // Led pins const int totalLeds = 8; tiempo int = 50; // Configuración de anulación de la velocidad predeterminada () // Inicializar todas las salidas para (int i = 0; i <= totalLeds; ++i)  pinMode(leds[i], OUTPUT);   void loop()  for(int i = 0; i < totalLeds - 1; ++i)  // Scan left to right time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i + 1], HIGH); delay(time); digitalWrite(leds[i], LOW);  for(int i = totalLeds; i > 0; --i) // Escanear de derecha a izquierda = analogRead (2); digitalWrite (leds [i], HIGH); tiempo de retardo); digitalWrite (leds [i - 1], HIGH); tiempo de retardo); digitalWrite (leds [i], LOW); 

Vamos a descomponerlo. Cada pin LED se almacena en una matriz:

const int leds [] = 1,2,3,4,5,6,7,8;

Una matriz es esencialmente una colección de elementos relacionados. Estos elementos se definen como constantes (“const”), lo que significa que no se pueden cambiar más adelante. No tiene que usar una constante (el código funcionará perfectamente si elimina “const”), aunque se recomienda.

Se accede a los elementos de una matriz utilizando corchetes (“[]”) y un entero llamado índice. Los índices comienzan en cero, por lo que “leds [2]” devolvería el tercer elemento de la matriz - pin 3. Las matrices hacen que el código sea más rápido de escribir y más fácil de leer, hacen que la computadora haga el trabajo duro!

Un bucle for se usa para configurar cada pin como una salida:

para (int i = 0; i <= totalLeds; ++i)  pinMode(leds[i], OUTPUT); 

Este código está dentro de la “preparar()” Función, ya que solo necesita ejecutarse una vez al inicio del programa. Para los bucles son muy útiles. Le permiten ejecutar el mismo código una y otra vez, con un valor diferente cada vez. Son perfectos para trabajar con matrices. Un entero “yo” se declara, y solo el código dentro del bucle puede acceder a esta variable (esto se conoce como “alcance”). El valor de i comienza en cero, y para cada iteración del bucle, i se incrementa en uno. Una vez que el valor de i es menor o igual a “totalLeds” variable, el bucle “descansos” (se detiene).

El valor de i se utiliza para acceder a la “leds” formación. Este bucle accede a todos los elementos de la matriz y lo configura como una salida. Usted podría escribir manualmente “pinMode (pin, SALIDA)” Ocho veces, pero ¿por qué escribir ocho líneas cuando puedes escribir tres??

Si bien algunos lenguajes de programación pueden decirle cuántos elementos hay en una matriz (generalmente con sintaxis como array.length), Arduino no lo hace tan simple (implica un poco más de matemáticas). Como ya se conoce el número de elementos en la matriz, no es un problema.

Dentro del bucle principal (bucle de vacío ()) son dos más para los bucles. El primero establece que los LED se enciendan y luego se apaguen de 1 a 8. El segundo bucle establece que los LED se enciendan y luego se apaguen de 8 a 1. Observe cómo se activa el pin actual, y el pin más uno también se enciende. Esto garantiza que siempre haya dos LEDS encendidos al mismo tiempo, lo que hace que el escáner se vea más realista.

Al comienzo de cada bucle, el valor del bote se lee en el “hora” variable:

tiempo = analógicoLeer (2);

Esto se hace dos veces, una vez dentro de cada bucle. Esto necesita ser constantemente revisado y actualizado. Si estuviera fuera de los bucles, seguiría funcionando, sin embargo, habría un pequeño retraso, solo se ejecutaría una vez que el bucle haya terminado de ejecutarse. Las ollas son analógicas, de ahí que “analógicaLeer (pin)” se utiliza Esto devuelve valores entre cero (mínimo) y 1023 (máximo). Arduino es capaz de convertir estos valores en algo más útil, sin embargo, son perfectos para este caso de uso..

El retraso entre los LED cambiantes (o la velocidad del escáner) se establece en milisegundos (1/1000 segundos), por lo que el tiempo máximo es de poco más de 1 segundo..

Escáner avanzado

Ahora que sabes lo básico, veamos algo más complejo. Este escáner encenderá los LED en pares, comenzando desde el exterior y trabajando. Invertirá esto e irá desde el interior hacia el exterior. Aquí está el código:

const int leds [] = 1,2,3,4,5,6,7,8; // Led pins const int totalLeds = 8; const int halfLeds = 4; tiempo int = 50; // Configuración de anulación de la velocidad predeterminada () // Inicializar todas las salidas para (int i = 0; i <= totalLeds; ++i)  pinMode(leds[i], OUTPUT);   void loop()  for(int i = 0; i < (halfLeds - 1); ++i)  // Scan outside pairs in time = analogRead(2); digitalWrite(leds[i], HIGH); digitalWrite(leds[(totalLeds - i) - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); digitalWrite(leds[(totalLeds - i) - 1], LOW); delay(time);  for(int i = (halfLeds - 1); i > 0; --i) // Escanear en pares fuera del tiempo = analógicoRead (2); digitalWrite (leds [i], HIGH); digitalWrite (leds [(totalLeds - i) - 1], HIGH); tiempo de retardo); digitalWrite (leds [i], LOW); digitalWrite (leds [(totalLeds - i) - 1], LOW); tiempo de retardo); 

Este código es un poco más complejo. Observe cómo ambos bucles van de cero a “HalfLeds - 1” (3). Esto hace un mejor escáner. Si ambos bucles pasaran de 4 - 0 y 0 - 4, entonces los mismos LED parpadearían dos veces en la misma secuencia, esto no se vería muy bien.

¡Ahora debería tener un escáner LED Knight Rider en funcionamiento! Sería fácil modificar esto para usar LED más o más grandes, o implementar su propio patrón. Este circuito es muy fácil de trasladar a una Raspberry Pi (nuevo en Pi? Empiece aquí Raspberry Pi: El tutorial no oficial Raspberry Pi: El tutorial no oficial Ya sea usted un propietario actual de Pi que quiera aprender más o un posible propietario de este crédito dispositivo de tamaño de tarjeta, no es una guía que no se pierda. Lea más) o ESP8266 Conozca al asesino de Arduino: ESP8266 Conozca al asesino de Arduino: ESP8266 ¿Qué pasa si le digo que hay una placa de desarrollo compatible con Arduino con una función integrada? ¿Wi-Fi por menos de $ 10? Bueno, la hay. Lee mas .

¿Estás construyendo una réplica de KITT? Me encantaría ver todas las cosas de Knight Rider en los comentarios..

Explorar más sobre: ​​Arduino, Electrónica..