Fabriquer un scanner à LED Knight Rider avec Arduino

Fabriquer un scanner à LED Knight Rider avec Arduino / DIY

Vous avez toujours souhaité avoir votre propre voiture Knight Industries Two Thousand (KITT) - vous savez, de Knight Rider? Réalisez votre rêve en réalisant un scanner à LED! Voici le résultat final:

De quoi as-tu besoin

Ce projet ne nécessite pas beaucoup d'éléments, et vous en avez peut-être déjà beaucoup:

  • 1 x Arduino UNO ou similaire
  • 1 x planche à pain
  • 8 x LED rouges
  • 8 résistances de 220 ohms
  • 1 x 10k ohm potentiomètre
  • Mâle à mâle

Si vous avez un kit de démarrage Arduino Que comprend un kit de démarrage Arduino? [MakeUseOf explique] Qu'est-ce qui est inclus dans un kit de démarrage Arduino? [MakeUseOf explique] J'ai déjà présenté le matériel open-source Arduino ici sur MakeUseOf, mais vous avez besoin de plus que de l'Arduino lui-même pour en créer quelque chose et pour commencer réellement. Les "kits de démarrage" Arduino sont… Read More il est probable que vous disposiez de toutes ces pièces (que pouvez-vous créer avec un kit de démarrage? 5 projets Arduino uniques pour les débutants que vous pouvez créer avec juste un kit de démarrage 5 projets Arduino uniques pour les débutants que vous pouvez réaliser Avec juste un kit de démarrage Lire la suite).

Presque n’importe quel Arduino fonctionnera, à condition qu’il dispose de huit broches disponibles (Jamais utilisé un Arduino auparavant? Commencez ici Démarrer avec Arduino: Guide du débutant Démarrer avec Arduino: Guide du débutant Arduino est une plate-forme de prototypage électronique à code source ouvert , des logiciels et du matériel faciles à utiliser, destinés aux artistes, concepteurs, amateurs et à tous ceux qui sont intéressés par la création d’objets ou d’environnements interactifs (en savoir plus). Vous pouvez utiliser une programmation Arduino de registre à décalage - Jouer avec des registres à décalage (a.k.a encore plus de DEL). Programmation Arduino - Jouer avec des registres à décalage (a.k.a encore plus de DEL) Aujourd'hui, je vais essayer de vous apprendre un peu plus sur les registres à décalage. C’est une partie assez importante de la programmation Arduino, principalement parce qu’ils augmentent le nombre de sorties que vous pouvez utiliser, en échange de… Lire la suite pour contrôler les voyants, bien que cela ne soit pas nécessaire pour ce projet, car l’Arduino a assez de broches.

Plan de construction


C'est un projet très simple. Bien que le nombre de fils puisse sembler complexe, chaque partie est très simple. Chaque diode électroluminescente (DEL) est connectée à sa propre broche Arduino. Cela signifie que chaque voyant peut être allumé et éteint individuellement. Un potentiomètre est connecté aux broches Arduino analog in, qui seront utilisées pour régler la vitesse du scanner..

Le circuit


Reliez la broche extérieure gauche (en regardant vers l'avant, avec les broches en bas) du potentiomètre à la terre. Connectez la broche extérieure opposée à + 5v. Si cela ne fonctionne pas correctement, inversez ces broches. Connectez la broche centrale à l’analogue Arduino dans 2.

Connectez l’anode (jambe longue) de chaque DEL aux broches numériques 1 à 8. Connectez les cathodes (jambe courte) à la terre Arduino.

Le code

Créez une nouvelle esquisse et enregistrez-la sous “chevalier”. Voici le code:

const int leds [] = 1,2,3,4,5,6,7,8; // Led pins const int totalLeds = 8; int temps = 50; // Vitesse par défaut void setup () // Initialise toutes les sorties pour (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) // Balayage de droite à gauche = analogRead (2); digitalWrite (leds [i], HIGH); temporisation); digitalWrite (leds [i - 1], HIGH); temporisation); digitalWrite (leds [i], LOW); 

Faisons le décomposer. Chaque broche de LED est stockée dans un tableau:

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

Un tableau est essentiellement une collection d'éléments liés. Ces éléments sont définis comme constants (“const”), ce qui signifie qu’ils ne peuvent pas être modifiés ultérieurement. Vous n'êtes pas obligé d'utiliser une constante (le code fonctionnera parfaitement si vous supprimez “const”), bien qu'il soit recommandé.

Les éléments d’un tableau sont accessibles à l’aide de crochets (“[]”) et un entier appelé index. Les index commencent à zéro, donc “leds [2]” renverrait le troisième élément du tableau - la broche 3. Les tableaux rendent le code plus rapide à écrire et plus facile à lire, ils permettent à l'ordinateur de faire le travail difficile!

Une boucle for est utilisée pour configurer chaque broche en tant que sortie:

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

Ce code est à l'intérieur du “installer()” fonction, car il ne doit être exécuté qu’une fois au début du programme. Les boucles sont très utiles. Ils vous permettent d'exécuter le même code encore et encore, avec une valeur différente à chaque fois. Ils sont parfaits pour travailler avec des tableaux. Un nombre entier “je” est déclaré, et seul le code à l'intérieur de la boucle peut accéder à cette variable (on parle de “portée”). La valeur de i commence à zéro et, pour chaque itération de la boucle, i est augmenté de un. Une fois que la valeur de i est inférieure ou égale à la “totalLeds” variable, la boucle “pauses” (arrête).

La valeur de i est utilisée pour accéder à la “leds” tableau. Cette boucle accède à tous les éléments du tableau et le configure comme une sortie. Vous pouvez taper manuellement “pinMode (pin, OUTPUT)” huit fois, mais pourquoi écrire huit lignes quand on peut écrire trois?

Alors que certains langages de programmation peuvent vous dire combien d'éléments se trouvent dans un tableau (généralement avec une syntaxe telle que array.length), Arduino ne le rend pas si simple (cela implique un peu plus de maths). Comme le nombre d'éléments dans le tableau est déjà connu, ce n'est pas un problème.

Dans la boucle principale (boucle vide ()) sont deux autres pour les boucles. Le premier allume puis éteint les voyants de 1 à 8. La seconde boucle allume et éteint les voyants de 8 à 1. Notez comment la broche actuelle est activée et la broche actuelle plus une est également activée. Cela garantit qu'il y a toujours deux DEL allumées en même temps, ce qui donne au scanner une apparence plus réaliste..

Au début de chaque boucle, la valeur du pot est lue dans le “temps” variable:

time = analogRead (2);

Ceci est fait deux fois, une fois à l'intérieur de chaque boucle. Cela doit être constamment vérifié et mis à jour. Si cela se trouvait en dehors des boucles, cela fonctionnerait quand même, mais il y aurait un petit délai - il ne serait exécuté qu'une fois l'exécution d'une boucle terminée. Les pots sont analogiques, alors pourquoi “analogRead (pin)” est utilisé. Cela renvoie des valeurs comprises entre zéro (minimum) et 1023 (maximum). Arduino est capable de convertir ces valeurs en quelque chose de plus utile, mais elles sont parfaites pour ce cas d'utilisation.

Le délai entre le remplacement des voyants (ou la vitesse du scanner) est défini en millisecondes (1/1000 seconde), de sorte que la durée maximale est légèrement supérieure à 1 seconde..

Scanner avancé

Maintenant que vous connaissez les bases, examinons quelque chose de plus complexe. Ce scanner allumera les LED par paires en partant de l'extérieur et en travaillant ensuite. Il inversera la situation et ira de l'intérieur vers l'extérieur. Voici le code:

const int leds [] = 1,2,3,4,5,6,7,8; // Led pins const int totalLeds = 8; const int halfLeds = 4; int temps = 50; // Vitesse par défaut void setup () // Initialise toutes les sorties pour (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) // Balayage du temps entre paires de paires = analogRead (2); digitalWrite (leds [i], HIGH); digitalWrite (leds [(totalLeds - i) - 1], HIGH); temporisation); digitalWrite (leds [i], LOW); digitalWrite (leds [(totalLeds - i) - 1], LOW); temporisation); 

Ce code est légèrement plus complexe. Remarquez comment les deux boucles vont de zéro à “halfLeds - 1” (3). Cela fait un meilleur scanner. Si les deux boucles passaient de 4 à 0 et de 0 à 4, les mêmes voyants clignotaient deux fois dans le même ordre - cela n’aurait pas une très bonne apparence.

Vous devriez maintenant posséder un scanner à DEL Knight Rider en état de marche! Il serait facile de modifier cela pour utiliser plus de LED ou des LED plus grandes, ou pour implémenter votre propre motif. Ce circuit est très facile à transférer sur un Raspberry Pi (nouveau sur Pi? Commencez ici Raspberry Pi: le tutoriel non officiel Raspberry Pi: le tutoriel non officiel. Que vous soyez un propriétaire actuel de Pi qui souhaite en savoir plus ou un propriétaire potentiel de ce crédit Ce périphérique n’est pas un guide à ne pas manquer. En savoir plus) ou ESP8266 Rencontrez le tueur Arduino: ESP8266 Rencontrez le tueur Arduino: ESP8266 Et si je vous disais qu’il existe une carte de développement compatible Arduino avec intégré Wi-Fi pour moins de 10 $? Eh bien, il y a. Lire la suite .

Vous construisez une réplique de KITT? J'aimerais voir toutes les choses Knight Rider dans les commentaires.

Explorer plus sur: Arduino, Electronics.