Fabriquer un scanner à LED Knight Rider avec Arduino

  • Joseph Goodman
  • 0
  • 3969
  • 420
Publicité

Vous avez toujours souhaité avoir votre propre voiture Knight Industries Two Thousand (KITT) - vous savez, de Knight Rider? Faites de votre rêve un pas de plus vers la réalité en construisant 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
  • Fil 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 construire quelque chose et pour commencer réellement. Les "kits de démarrage" Arduino sont… 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 uniques Arduino pour les débutants que vous pouvez réaliser avec simplement un kit de démarrage).

Presque n’importe quel Arduino fonctionnera, à condition qu’il dispose de huit broches disponibles (Vous n’avez jamais utilisé d’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 souhaitent créer des environnements ou des objets interactifs.). 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… pour contrôler les voyants, bien que cela ne soit pas nécessaire pour ce projet, car l’Arduino a suffisamment de broches..

Plan de construction


C'est un projet très simple. Bien que le grand nombre de fils puisse paraître 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 analogiques Arduino, 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 voyant 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  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 une matrice:

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 - 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 dans 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 sont dans un tableau (généralement avec une syntaxe telle que array.length), Arduino ne le rend pas si simple (il nécessite 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.

À l'intérieur de la boucle principale (boucle vide ()) sont deux autres pour les boucles. Le premier allume les voyants, puis les éteint de 1 à 8. La deuxième boucle allume les voyants, puis les éteint 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 situait en dehors des boucles, cela fonctionnerait quand même, mais il y aurait un léger retard - l'exécution ne serait exécutée 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 à l'intérieur. 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 clignoteraient deux fois dans le même ordre - cela ne serait pas très beau.

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 ne sont pas des guides que vous voudrez manquer.) ou ESP8266 Rencontrez le tueur Arduino: ESP8266 Rencontrez le tueur Arduino: ESP8266 Et si je vous disais qu’il existe un tableau de développement compatible Arduino avec Fi pour moins de 10 $? Eh bien, il y a. .

Construisez-vous une réplique de KITT? J'aimerais voir toutes les choses Knight Rider dans les commentaires.




Personne n'a encore commenté ce post.

De la technologie moderne, simple et abordable.
Votre guide dans le monde de la technologie moderne. Apprenez à utiliser les technologies et les gadgets qui nous entourent chaque jour et à découvrir des choses intéressantes sur Internet.