Faça um scanner LED Knight Rider com Arduino

Sempre desejou ter seu próprio carro da Knight Industries Two Thousand (KITT) - você sabe, da Knight Rider? Faça o seu sonho um passo mais perto da realidade, construindo um scanner de LED!

Sempre desejou ter seu próprio carro da Knight Industries Two Thousand (KITT) - você sabe, da Knight Rider?  Faça o seu sonho um passo mais perto da realidade, construindo um scanner de LED!
Propaganda

Sempre desejou ter seu próprio carro da Knight Industries Two Thousand (KITT) - você sabe, da Knight Rider? Faça o seu sonho um passo mais perto da realidade, construindo um scanner de LED! Aqui está o resultado final:

O que você precisa

Não há muitas partes necessárias para este projeto, e você pode ter muitas delas já:

  • 1 x Arduino UNO ou similar
  • 1 x tábua de pão
  • 8 x LEDs vermelhos
  • Resistores de 8 x 220 ohm
  • 1 x potenciômetro de 10k ohm
  • Macho para macho ligar os fios

Se você tem um kit inicial do Arduino O que está incluído em um kit para iniciantes do Arduino? [MakeUseOf Explains] O que está incluído em um kit inicial do Arduino? [MakeUseOf Explains] Eu introduzi anteriormente o hardware de código aberto do Arduino aqui no MakeUseOf, mas você vai precisar mais do que apenas o Arduino para construir algo a partir dele e realmente começar. Arduino "starter kits" são ... Leia mais, é provável que você tenha todas essas partes (o que você pode fazer com um kit inicial? 5 Projetos Arduino exclusivos para iniciantes que você pode fazer com apenas um kit inicial 5 Projetos Arduino exclusivos para iniciantes Pode fazer com apenas um kit inicial Leia mais).

Quase qualquer Arduino funcionará, desde que tenha oito pinos disponíveis (nunca usou um Arduino antes? Comece aqui com Arduino: um guia para iniciantes Introdução ao Arduino: um guia para iniciantes Arduino é uma plataforma de prototipagem eletrônica de código aberto baseada em flexível, fácil de usar hardware e software. É destinado a artistas, designers, amadores e qualquer pessoa interessada em criar objetos ou ambientes interativos. Você poderia usar um Shift Register Arduino Programação - Jogando com Shift Registers (aka ainda mais LEDs) Programação Arduino - Jogando com Shift Registers (aka ainda mais LEDs) Hoje vou tentar ensinar-lhe um pouco sobre Shift Registers. Estes são uma parte bastante importante da programação Arduino, basicamente porque eles expandem o número de saídas que você pode usar, em troca de ... Leia Mais para controlar os LEDs, embora isso não seja necessário para este projeto, pois o Arduino tem pinos suficientes .

Plano de construção

Arduino-cavaleiro-cavaleiro-levou-scanner-completo
Este é um projeto muito simples. Embora possa parecer complexo a partir do grande número de fios, cada parte individual é muito simples. Cada diodo emissor de luz (LED) é conectado ao seu próprio pino Arduino. Isso significa que cada LED pode ser ligado e desligado individualmente. Um potenciômetro é conectado ao análogo do Arduino em pinos, que será usado para ajustar a velocidade do scanner.

O circuito

Arduino-cavaleiro-cavaleiro-circuito
Conecte o pino esquerdo externo (olhando para a frente, com os pinos na parte inferior) do potenciômetro ao terra. Conecte o pino externo oposto a + 5v. Se não funcionar corretamente, inverta esses pinos. Conecte o pino do meio ao análogo do Arduino em 2.

Conecte o ânodo (perna longa) de cada LED aos pinos digitais de um a oito. Conecte os catodos (perna curta) ao terra do Arduino.

O código

Crie um novo esboço e salve-o como "knightRider". Aqui está o código:

const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8}; // Led pins const int totalLeds = 8; int time = 50; // Default speed void setup() { // Initialize all outputs for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } } void loop() { for(int i = 0; i 0; --i) { // Scan right to left time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); } }  const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8}; // Led pins const int totalLeds = 8; int time = 50; // Default speed void setup() { // Initialize all outputs for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } } void loop() { for(int i = 0; i 0; --i) { // Scan right to left time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); } } 

Vamos acabar com isso. Cada pino do LED é armazenado em uma matriz:

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

Um array é essencialmente uma coleção de itens relacionados. Esses elementos são definidos como constantes ("const"), o que significa que não podem ser alterados mais tarde. Você não precisa usar uma constante (o código funcionará perfeitamente se você remover “const”), embora seja recomendado.

Elementos de uma matriz são acessados ​​usando colchetes (“[]”) e um inteiro chamado índice. Índices começam em zero, então “leds [2]” retornaria o terceiro elemento no array - pin 3. Arrays tornam o código mais rápido para escrever e mais fácil de ler, eles fazem o computador fazer o trabalho duro!

Um loop for é usado para configurar cada pino como uma saída:

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

Este código está dentro da função “setup ()”, já que só precisa ser executado uma vez no início do programa. For loops são muito úteis. Eles permitem que você execute o mesmo código repetidamente, com um valor diferente a cada vez. Eles são perfeitos para trabalhar com matrizes. Um inteiro “i” é declarado e somente o código dentro do loop pode acessar essa variável (isso é conhecido como “escopo”). O valor de i começa no zero e, para cada iteração do loop, i é aumentado em um. Uma vez que o valor de i é menor ou igual à variável “totalLeds”, o loop “quebra” (pára).

O valor de i é usado para acessar o array “leds”. Esse loop acessa todos os elementos da matriz e os configura como uma saída. Você poderia digitar manualmente “pinMode (pin, OUTPUT)” oito vezes, mas por que escrever oito linhas quando você pode escrever três?

Embora algumas linguagens de programação possam dizer quantos elementos estão em uma matriz (geralmente com sintaxe como array.length), o Arduino não o torna tão simples (envolve um pouco mais de matemática). Como o número de elementos na matriz já é conhecido, não é um problema.

Arduino-cavaleiro-cavaleiro-LEDS

Dentro do loop principal ( void loop () ) são mais dois loops. O primeiro coloca os LEDs acesos e, depois, OFF de 1 a 8. O segundo loop liga e desliga os LEDs de 8 - 1. Observe como o pino atual está ligado e o pino atual mais um também. Isso garante que haja sempre dois LEDs ligados ao mesmo tempo, tornando o scanner mais realista.

No início de cada loop, o valor do pote é lido na variável "time":

 time = analogRead(2); 

Isso é feito duas vezes, uma vez dentro de cada loop. Isso precisa ser constantemente verificado e atualizado. Se isso estivesse fora dos loops, ainda assim funcionaria, no entanto, haveria um pequeno atraso - ele só seria executado assim que um loop terminasse a execução. Os potes são analógicos, daí porque “analogRead (pin)” é usado. Isso retorna valores entre zero (mínimo) e 1023 (máximo). O Arduino é capaz de converter esses valores para algo mais útil, porém eles são perfeitos para este caso de uso.

O atraso entre a mudança dos LEDs (ou a velocidade do scanner) é definido em milissegundos (1/1000 segundos), portanto, o tempo máximo é de pouco mais de 1 segundo.

Scanner Avançado

Arduino-LEDs-fora-pares

Agora que você conhece o básico, vamos ver algo mais complexo. Este scanner acenderá os LEDs em pares a partir de fora e trabalhando. Ele irá reverter isso e ir de dentro para fora de pares. Aqui está o código:

 const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8}; // Led pins const int totalLeds = 8; const int halfLeds = 4; int time = 50; // Default speed void setup() { // Initialize all outputs for(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) { // Scan inside pairs out 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); } } 

Este código é um pouco mais complexo. Observe como os dois loops vão de zero a “halfLeds - 1” (3). Isso faz um scanner melhor. Se ambos os loops fossem de 4 a 0 e 0 a 4, então os mesmos LEDs piscariam duas vezes na mesma sequência - isso não pareceria muito bom.

Agora você deve possuir um scanner LED Knight Rider em funcionamento! Seria fácil modificar isso para usar LEDs maiores ou maiores ou implementar seu próprio padrão. Este circuito é muito fácil de porta para um Raspberry Pi (novo para Pi? Comece aqui Raspberry Pi: O Tutorial não oficial Raspberry Pi: O Tutorial não oficial Se você é um proprietário atual Pi que quer aprender mais ou um potencial proprietário deste crédito Leia mais) ou ESP8266 Conheça o Arduino Killer: ESP8266 Conheça o Arduino Killer: ESP8266 E se eu dissesse que há uma placa de desenvolvimento compatível com Arduino com built-in Wi-Fi por menos de US $ 10? Bem, existe. Consulte Mais informação .

Você está construindo uma réplica KITT? Eu adoraria ver todas as coisas Knight Rider nos comentários.

In this article