Anuncio
¿Alguna vez has deseado tener tu propio automóvil Knight Industries Two Thousand (KITT)? ¿Sabes, de Knight Rider? ¡Haz que tu 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 piezas para este proyecto, y es posible que ya tenga muchas de ellas:
- 1 x Arduino UNO o similar
- 1 x placa de prueba
- 8 x LED rojos
- 8 resistencias de 220 ohmios
- 1 x potenciómetro de 10k ohmios
- Cables de conexión macho a macho
Si tienes un Kit de inicio Arduino ¿Qué se incluye en un kit de inicio Arduino? [MakeUseOf explica]Anteriormente presenté el hardware de código abierto Arduino aquí en MakeUseOf, pero necesitarás más que el Arduino real para construir algo a partir de él y comenzar realmente. Los "kits de inicio" de Arduino son ... Lee mas es probable que tenga todas estas partes (¿Qué puedes hacer con un kit de inicio? 5 proyectos únicos de Arduino para principiantes que puedes hacer con solo un kit de inicio Lee mas ).
Casi cualquier Arduino funcionará, siempre que tenga ocho pines disponibles (¿Nunca ha usado un Arduino antes?
Comience aquí Comenzando con Arduino: una guía para principiantesArduino es una plataforma de creación de prototipos de electrónica de código abierto basada en hardware y software flexible y fácil de usar. Está destinado a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos. Lee mas ). Tú podrías usar un registro de turnos Programación Arduino - Jugar con registros de desplazamiento (también conocido como más LED)Hoy intentaré enseñarte un poco sobre los registros de desplazamiento. Estas son una parte bastante importante de la programación de Arduino, básicamente porque amplían la cantidad de salidas que puede usar, a cambio de ... Lee mas 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 análogo Arduino en pines, que se utilizará para ajustar la velocidad del escáner.
El circuito
Conecte el pin externo izquierdo (mirando hacia el frente, con los pines en la parte inferior) del potenciómetro a tierra. Conecte el pin externo opuesto a + 5v. Si no funciona correctamente, invierta estos pines. Conecte el pin del medio al análogo Arduino en 2.
Conecte el ánodo (pata larga) de cada LED a los pines digitales del uno al ocho. Conecte los cátodos (pata corta) a tierra Arduino.
El código
Cree un nuevo boceto y guárdelo como "knightRider". Aquí está el código:
const int leds [] = {1,2,3,4,5,6,7,8}; // Pines led. const int totalLeds = 8; int tiempo = 50; // Configuración de vacío de velocidad predeterminada () {// Inicializa todas las salidas para (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; i 0; --i) {// Escanear tiempo de derecha a izquierda = analogRead (2); digitalWrite (leds [i], ALTO); tiempo de retardo); digitalWrite (leds [i - 1], ALTO); tiempo de retardo); digitalWrite (leds [i], LOW); } }
Vamos a desglosarlo. 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 artículos 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 número entero llamado índice. Los índices comienzan en cero, por lo que "leds [2]" devolvería el tercer elemento en 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!
Se usa un bucle for para configurar cada pin como salida:
para (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); }
Este código está dentro de la función "setup ()", 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. Se declara un número entero "i", 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 ciclo, i aumenta en uno. Una vez que el valor de i es menor o igual que la variable "totalLeds", el ciclo "se rompe" (se detiene).
El valor de i se utiliza para acceder a la matriz "leds". Este bucle accede a cada elemento de la matriz y lo configura como una salida. Puede escribir manualmente "pinMode (pin, OUTPUT)" ocho veces, pero ¿por qué escribir ocho líneas cuando puede escribir tres?
Si bien algunos lenguajes de programación pueden decirle cuántos elementos hay en una matriz (generalmente con una 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 vacío ()) son dos más para los bucles. El primero enciende y apaga los LED de 1 a 8. El segundo bucle enciende y apaga los LED de 8 a 1. Observe cómo se activa el pin actual y también se activa el pin actual más uno. Esto garantiza que siempre haya dos LED encendidos al mismo tiempo, haciendo que el escáner se vea más realista.
Al comienzo de cada ciclo, el valor del bote se lee en la variable "tiempo":
tiempo = analogRead (2);
Esto se hace dos veces, una vez dentro de cada ciclo. Esto debe ser revisado y actualizado constantemente. Si esto estuviera fuera de los bucles, todavía funcionaría, sin embargo, habría un pequeño retraso, solo se ejecutaría una vez que un bucle haya terminado de ejecutarse. Las ollas son analógicas, de ahí que se use "analogRead (pin)". 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 el cambio de los LED (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 conoce los conceptos básicos, veamos algo más complejo. Este escáner iluminará los LED en pares comenzando desde el exterior y trabajando hacia adentro. Luego revertirá esto y pasará de pares internos a externos. Aquí está el código:
const int leds [] = {1,2,3,4,5,6,7,8}; // Pines led. const int totalLeds = 8; const int halfLeds = 4; int tiempo = 50; // Configuración de vacío de velocidad predeterminada () {// Inicializa todas las salidas para (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; i 0; --i) {// Escanea el tiempo de pares internos = analogRead (2); digitalWrite (leds [i], ALTO); digitalWrite (leds [(totalLeds - i) - 1], ALTO); tiempo de retardo); digitalWrite (leds [i], LOW); digitalWrite (leds [(totalLeds - i) - 1], BAJO); 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 pasaron de 4 a 0 y de 0 a 4, 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 que funcione! 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 portar a un Raspberry Pi (¿nuevo en Pi? Empieza aqui Raspberry Pi: el tutorial no oficialSi usted es un propietario actual de Pi que desea obtener más información o un propietario potencial de este dispositivo del tamaño de una tarjeta de crédito, esta no es una guía que quiera perderse. Lee mas ) o ESP8266 Conoce al asesino de Arduino: ESP8266¿Qué pasa si te digo que hay una placa de desarrollo compatible con Arduino con Wi-Fi incorporado por menos de $ 10? Bueno, lo hay. Lee mas .
¿Estás construyendo una réplica de KITT? Me encantaría ver todas las cosas de Knight Rider en los comentarios.
Joe se graduó en Ciencias de la Computación de la Universidad de Lincoln, Reino Unido. Es un desarrollador de software profesional, y cuando no está volando drones o escribiendo música, a menudo se lo puede encontrar tomando fotos o produciendo videos.