Hacer un jinete caballero llevó escáner con arduino
¿Alguna vez ha deseado tener su propio coche Knight Industrias dos mil (KITT) - usted sabe, a partir de Knight Rider? Haga su sueño un paso más a la realidad mediante la construcción de un escáner LED! Aquí está el resultado final:
Que necesitas
No hay una gran cantidad de piezas que se necesitan para este proyecto, y usted puede tener muchos de ellos ya:
- 1 x UNO Arduino o similares
- 1 x Breadboard
- 8 x LEDs rojos
- 8 x 220 ohmios
- 1 x 10k ohm potenciómetro
- Macho a macho conectar alambres
Si usted tiene una starter kit Arduino lo más probable es que tenga todas estas partes (¿qué se puede hacer con un kit de inicio?).Qué se incluye en un kit de iniciación Arduino? [Explica MakeUseOf]Qué se incluye en un kit de iniciación Arduino? [Explica MakeUseOf]He introducido previamente el hardware libre Arduino aquí en MakeUseOf, pero vas necesitan algo más que el Arduino real para construir algo de él y de hecho empezar. Arduino "kits de iniciación" son...Lee mas
Casi cualquier Arduino funcionará, siempre que haya ocho pines disponibles (Nunca se utilizó un Arduino antes? Comience aquí). Tú podrías utilizar un registro de desplazamiento para controlar los LEDs, aunque esto no es necesario para este proyecto, ya que el Arduino tiene suficientes pines.
construir plan
Este es un proyecto muy simple. Mientras puede parecer complejo a partir de la gran cantidad de cables, cada parte individual es muy simple. Cada diodo emisor de luz (LED) está conectado a su propio pin de Arduino. Esto significa que cada LED se puede activar de forma individual y se apaga. Un potenciómetro está conectado al análogo Arduino en pasadores, que se utiliza para ajustar la velocidad del escáner.
El circuito
Conectar la clavija externa izquierda (mirando al frente, con los pasadores en la parte inferior) del potenciómetro al suelo. Conectar la clavija externa opuesta a + 5V. Si no funciona correctamente, revertir estos pines. Conecte el pin central a Arduino analógico en 2.
Conectar el ánodo (pata larga) de cada LED a los pines digitales uno a ocho. Conectar los cátodos (corta la pierna) para Arduino suelo.
El código
Crear un nuevo dibujo y guardarlo como “Knightrider”. Aquí está el código:
const int leds[] = {1,2,3,4,5,6,7,8}- // pines Ledconst int totalLeds = 8-int hora = 50- // velocidad por defectovacío preparar() {// Inicializar todas las salidaspara(int yo = 0- yo lt; = totalLeds- ++yo) {pinMode(leds[yo], SALIDA)-}}vacío lazo() {para(int yo = 0- yo lt; totalLeds - 1- ++yo) {// Scan izquierda a derechahora = analogRead(2)-digitalWrite(leds[yo], ALTO)-retrasar(hora)-digitalWrite(leds[yo + 1], ALTO)-retrasar(hora)-digitalWrite(leds[yo], BAJO)-}para(int yo = totalLeds- yo gt; 0- --yo) {// La ejecución de derecha a izquierdahora = analogRead(2)-digitalWrite(leds[yo], ALTO)-retrasar(hora)-digitalWrite(leds[yo - 1], ALTO)-retrasar(hora)-digitalWrite(leds[yo], BAJO)-}}
Vamos a romper hacia abajo. 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 constante ( “const”), lo que significa que no se pueden cambiar más adelante. Usted no tiene que utilizar una constante (el código funcione a la perfección si se quita “const”), aunque se recomienda.
Vídeo: Final Fantasy X HD Remaster - Truco Para Esquivar 200 Rayos Método 2
Elementos de una matriz se accede mediante el uso de corchetes ( “[]”) y un número entero llaman un índice. Índices comienzan en cero, por lo que “leds [2]” volverían el tercer elemento de la matriz - pin 3. Las matrices hacen código más rápido para escribir y más fácil de leer, hacen que el ordenador haga el trabajo duro!
Un bucle se utiliza para configurar cada pin como salida:
para(int yo = 0- yo lt; = totalLeds- ++yo) {pinMode(leds[yo], SALIDA)-}
Este código se encuentra dentro de la función “Configuración ()”, ya que sólo tiene que ejecutar una vez al inicio del programa. Para bucles son muy útiles. Ellos le permiten ejecutar el mismo código una y otra vez, con un valor diferente cada vez. Son perfectos para trabajar con matrices. Un número entero “i” se declara, y sólo código dentro del bucle pueden 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 que o igual a la “totalLeds” variable, el bucle “rompe” (paradas).
El valor de i se utiliza para acceder a la matriz “LED”. Este bucle accede a cada elemento de la matriz y lo configura como una salida. Se podría escribir manualmente “pinMode (pin, SALIDA)” ocho veces, pero ¿por qué escribir ocho líneas cuando se puede escribir tres?
Mientras que algunos lenguajes de programación pueden decir cuántos elementos están en una matriz (por lo general con una sintaxis como Array.length), Arduino no significa que sea tan sencillo (se trata de un poco más de matemáticas). Como el número de elementos de la matriz ya se conoce, no es un problema.
Dentro del bucle principal (void loop ()) Son dos más para los bucles. El primero establece los LEDs y luego se apaga desde 1 - 8. El segundo bucle establece los LEDs ON y luego OFF de 8 - 1. Aviso cómo el pasador de corriente se ajusta en, y el pasador actual más uno se encuentra en también. Esto asegura que siempre hay dos LED en, al mismo tiempo, por lo que el aspecto más realista escáner.
Al inicio de cada bucle, el valor de la olla se lee en la variable “tiempo”:
hora = analogRead(2)-
Esto se realiza dos veces, una vez dentro de cada bucle. Esto necesita ser constantemente revisado y actualizado. Si esto estaba fuera de los bucles, todavía sería trabajar, sin embargo habría un pequeño retraso - que sólo se ejecute una vez un bucle ha finalizado la ejecución. Pots son analógicas, por lo tanto, por qué se utiliza “analogRead (pin)”. Esto devuelve valores entre cero (mínimo) y 1023 (máximo). Arduino es capaz de convertir estos valores a algo más útil, sin embargo, son perfectos para este caso de uso.
El retraso entre LEDs 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 avanzada
Ahora que sabes lo básico, vamos a ver algo más complejo. Este escáner se encenderá el LED de dos en dos a partir de la parte exterior y trabajan en. A continuación, invertir esta tendencia y pasar de dentro hacia fuera pares. Aquí está el código:
const int leds[] = {1,2,3,4,5,6,7,8}- // pines Ledconst int totalLeds = 8-const int halfLeds = 4-int hora = 50- // velocidad por defectovacío preparar() {// Inicializar todas las salidaspara(int yo = 0- yo lt; = totalLeds- ++yo) {pinMode(leds[yo], SALIDA)-}}vacío lazo() {para(int yo = 0- yo lt; (halfLeds - 1)- ++yo) {// Analiza pares externos enhora = analogRead(2)-digitalWrite(leds[yo], ALTO)-digitalWrite(leds[(totalLeds - yo) - 1], ALTO)-retrasar(hora)-digitalWrite(leds[yo], BAJO)-digitalWrite(leds[(totalLeds - yo) - 1], BAJO)-retrasar(hora)-}para(int yo = (halfLeds - 1)- yo gt; 0- --yo) {// Análisis del interior de pares cabohora = analogRead(2)-digitalWrite(leds[yo], ALTO)-digitalWrite(leds[(totalLeds - yo) - 1], ALTO)-retrasar(hora)-digitalWrite(leds[yo], BAJO)-digitalWrite(leds[(totalLeds - yo) - 1], BAJO)-retrasar(hora)-}}
Este código es un poco más compleja. Observe cómo ambos bucles van de cero a “halfLeds - 1” (3). Esto hace que una mejor escáner. Si ambos bucles pasaron de 4 - 0 y 0 - 4, entonces los mismos LED se iluminará dos veces en la misma secuencia - esto no sería muy buena.
Ahora debe poseer un escáner LED coche fantástico trabajo! Sería fácil de modificar esto para usar mas o mayor LED, o implementar su propio patrón. Este circuito es muy fácil de portar a un Frambuesa Pi (nuevo a Pi? Empieza aqui) o ESP8266.Frambuesa Pi: El Tutorial no oficialFrambuesa Pi: El Tutorial no oficialSi usted es un propietario de Pi actual que quiere aprender más o un propietario potencial de este dispositivo del tamaño de tarjetas de crédito, esto no es una guía que desea perder.Lee mas
¿Está construyendo una réplica de KITT? Me gustaría ver todas las cosas Knight Rider en los comentarios.