Arduino : Faites briller des LEDs
|
08-12-2012, 19h46
(Modification du message : 14-12-2012, 17h39 par Dobry.)
Message : #1
|
|
Dobry
Tueur de lamouz Messages : 206 Sujets : 25 Points: 73 Inscription : Aug 2011 |
Arduino : Faites briller des LEDs
Bonjour à tous !
Cet article s'adresse principalement (uniquement ?) aux débutants qui ont une Arduino, quelques LED qui ne savent pas trop quoi en faire. J'aborderai différents exercices, et techniques de programmation pour faire des petits chennilards assez simples avec Arduino. Si vous voyez des fautes (d'orthographe, dans le code, les termes ou autres) SIGNALEZ-les Excusez-moi pour l'article peu avenant, mais je suis relativement nul pour la mise en page, si, cependant, vous désirez améliorer quelque chose, contactez-moi ! Dans la suite de cet article le materiel que nous utiliserons est le suivant :
Premièrement, il faut savoir que vous pouvez faire transiter des informations entre Arduino et l'IDE grâce au "Serial Monitor" pour cela, rien de plus facile : Code C :
Rien de très complexe, on initialise la communication à 9600 baud ( bits par seconde ), arbitrairement, puis on écrit envoi la chaine "Hello World". Sur l'IDE, envoyez ca sur l'Arduino puis dans l'onglet "Tools" activez le "Serial Monitor", vous devriez, devant vos yeux ébahis, voir apparaitre "Hello World". Maintenant on s'attaque au potentiomètre. Fonctionnement d'un potentiomètre et lecture analogique Avant de pouvoir faire quoi que ce soit, il faut comprendre le fonctionnement du potentiomètre et ce qu'il nous retourne, vous l'aurez deviné, on va utiliser la fonction Serial pour analyser tout ça. Mon potentiomètre a 3 branches, une pour l'alimentation, une autre pour la valeur de sortie (celle du milieu) et enfin, la troisième que l'on branche à la sortie (ground), ce qui nous donne le schéma suivant : Remarque importante : Pour lire une valeur sur un PIN, il faut utiliser la fonction analogRead(int pin) c'est pour cela que la branche du milieu est connectée à un PIN de type "Analog In" (qui commence avec avec la lettre A). Le code : Code C :
En jouant un peu avec le potentiomètre, on se rend compte que la valeur lue sur A0 varie entre 1023 et 0, nous allons donc pouvoir jouer avec ça Make the LEDs rock En utilisant ce que nous avons vu au dessus, nous allons nous amuser à allumer 4 LEDs dans un ordre... incertain... En effet, le but est de lire sur une entrée analogique la valeur envoyée par le potentiomètre puis d'affiche les LEDs branchées sur les PINs 6 à 10 de l'Arduino, un bout de code valant mieux que 10 phrases (surtout les mienne), voici le code : Code C :
Ce code bien que très simple, peut paraitre obscure à quelqu'un n'ayant presque jamais programmé, voici quelques explications: value %= 4 : équivalent à la ligne l'instruction value = value%4; elle permet d'obtenir le reste de la division par 4, cette astuce est fort utile pour ramener de très grandes valeurs à l'intérieur d'un interval plus petit,en effet, le reste de la division par un nombre est toujours inférieur à ce nombre, dans notre cas, value prend donc une valeurs située entre 0 et 4 (la borne inférieure est toujours inclue, l'extérieur exclue). value+6 : Nos LEDs sont branchées sur les PIN 6 à 10, il suffit donc d'ajouter 6 à la valeur pour allumer une de ces quatre led. ancien = value cette ligne permet de se souvenir quelle LED a été allumé à la boucle précédente, pour ainsi la laisser allumé jusqu'à ce que l'on modifie le potentiomètre afin d'allumer une autre LED. digitalWrite(ancien+6, LOW); Sans cette ligne, les LEDS s'allumerai une part une sans jamais s'éteindre. En somme, rien de très complexe, l'ordre dépend du reste de la division et est donc "completement" aléatoire. Mais nous allons maintenant nous intéresser à la manipulation de LED les unes à la suite des autres dans un ordre choisi, afin de manipuler un peu tout ce monde la à l'aide des fameuses BOUCLES dont je vous parle depuis le début. Chenillards à gogo ! Premier projet : allumer 4-5 LEDs les une la suite des autres, en faisant varier la vitesse. Le materiel necessaire est le même que la liste énoncée ci dessus, voici le schema du montage : Pour ceux qui ne l'auraient pas deviné, les résistances permettent d'éviter aux leds de griller sous la tension/intensité fournies par l'Arduino ! 4 résistances, 4 leds, un potentiomètre, nous voilà pret pour la grande aventure, enfin il manque tout de même un élément relativement important : le code que voici : Code C :
Je ne pense pas qu'il y ai besoin d'expliciter plus que cela, mais dans un élan de bonté je vais tout de même m'étendre un peu : On récupère la valeur sur l'entrée Analogique 0 (celle branchée au potentiomètre) cette valeur sera utilisée dans le delay, plus la résistance est grande, plus la valeur est petite, plus le delai sera long et donc plus l'animation semblera lente. On allume, on attend puis on éteint sans attendre de nouveau, et cela car nous voulons que l'enchainement du chenillard soit fluide en rajoutant un delai, il y aurait une période pendant laquelle aucune LED n'est allumée : MOCHE ! Après plusieurs tests vous vous êtes peu-être rendu compte que la variation de la vitesse est loin d'être précise, cela s'explique par le fait que nous lisons la valeur du courant transmis à travers le potentiomètre une seule fois pour les quatres LEDs, si vous modifiez cette valeur entre la 2ième et 3ième LED, elle ne sera prise en compte qu'au tour suivant, pour combler cela transformez votre loop() comme suit : Code C :
Vous devriez sentir une nette différence entre les deux codes, comme quoi, parfois cela ne tient qu'a une ligne La fonction map Avec le code précendent, la valeur du delay peut varier entre 0 et 1023 c'est à dire en 0ms et 1,23s ce que certains peuvent trouver très restrictif, pour contourner cette contrainte, il faut utiliser la fonction map qui s'utilise comme suit si nous voulons convertir une valeur située entre 0 et 1023 en une valeur dans l'interval 0, 200 Code C :
Mais, grâce à cette fonction nous pouvons également attendre des delais largements supérieur à 1,23 secondes, par exemple : Code C :
Dans ce cas, le delai minimal sera de 1,5 seconde et le maximal de 2,5 secondes, ce qui peut s'avérer utile dans certains cas voici le code complet dans lequel le delai minimal est de 0,5 seconde et le maximal de 3 secondes! Code C :
A partir de là, nous avons tout les outils nécessaire pour nous amuser simplement avec des LEDs, et faire toute sorte de chenillard, par exemple (je n'écrirai maintenant que le void loop() le void setup() ne change pas ! Code C :
Dans ce cas, les LED vont s'allumer les unes après les autres, puis s'éteindront simultanément pour recommencer (une sorte "barre de progression") Petit détail que j'ai omis, mais que certain d'entre vous ne savent peut-être pas : quand la boucle ne comprend qu'une instruction (une ligne), on peut omettre les "{ }" ! Autres "astuces" Imaginons que les LEDs ne soient pas situées sur des PINs qui se suivent, mais sur les PIN 3, 8 et 10, dans ce cas, la boucle précédente ne fonctionnerai pas, pour pallier à ce problème, nous allons utiliser un type de variable très utile : le tableau. Code C :
Dans ce code, on déclare un tableau avec trois valeurs : 3;8 et 10 qui correspondent au PIN des LEDs, maintenant, il faut modifier la boucle : Code C :
Voilà, on accède au différentes valeurs du tableau grâce à des crochets ("[]"). Attention : comme dans beaucoup de langage, les tableaux sont numérotés à partir de 0, donc si votre tableau contient 3 éléments, le troisième élément se trouve à l'indice 2. Faites attention de bien vérifier que l'indice du tableau auquel vous voulez acceder existe, dans le cas contraire, c'est un crash assuré ! J'espère que cette petite introduction vous a fait voir quelques "astuces" et/ou exercices pour débuter avec Arduino, tout en prenant de bonnes habitudes ! http://ex0ns.me
Aestuārium Erudītiōnis
There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
|
|
10-12-2012, 22h23
Message : #2
|
|
CyberSee
Admin fondateur de N-PN Messages : 1,721 Sujets : 287 Points: 158 Inscription : Jan 2012 |
RE: Arduino : Faites briller des LEDs
Rep +1 Très beau tuto bien expliqué
Code PHP : <?php |
|
12-12-2012, 01h15
Message : #3
|
|
evolax
Open Hackware Messages : 10 Sujets : 1 Points: 0 Inscription : Nov 2012 |
RE: Arduino : Faites briller des LEDs
Manque juste une ligne pour expliquer pourquoi tu mets des résistances entre les leds et les pins, pour éviter de griller l'arduino.
Super tuto |
|
14-12-2012, 17h39
Message : #4
|
|
Dobry
Tueur de lamouz Messages : 206 Sujets : 25 Points: 73 Inscription : Aug 2011 |
RE: Arduino : Faites briller des LEDs
Rajouté !
Merci pour vos réponses !
Aestuārium Erudītiōnis
There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
|
|
« Sujet précédent | Sujet suivant »
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
Domotique en Arduino/Raspberry | badTasTe | 16 | 4,049 |
10-01-2014, 01h19 Dernier message: badTasTe |
|
[Arduino] Les bases | Swissky | 24 | 5,680 |
29-10-2013, 20h35 Dernier message: Loup |
|
ARDUINO/Raspberry : les inventions | notfound | 3 | 1,330 |
26-03-2013, 22h13 Dernier message: -Mat- |
|
Arduino : buzzer et photorésistances! | Dobry | 1 | 980 |
12-03-2013, 17h14 Dernier message: Swissky |
|
Arduino : cartes électroniques Open Source | artis | 5 | 1,562 |
24-08-2011, 03h13 Dernier message: datareaver |
Utilisateur(s) parcourant ce sujet : 3 visiteur(s)