Cours pour débuter dans la programmation d'une carte Arduino,
Un tutoriel de Nicolas Le Boulaire
Le 2020-03-04 22:10:30, par nlbmoi, Membre éprouvé
Bonsoir
J'ai rédigé un tutoriel pour débuter dans Arduino : https://nboulaire.developpez.com/tutoriels/Arduino/cours-debuter-programmation-arduino/
Merci pour vos commentaires et bonne lecture !
J'ai rédigé un tutoriel pour débuter dans Arduino : https://nboulaire.developpez.com/tutoriels/Arduino/cours-debuter-programmation-arduino/
Merci pour vos commentaires et bonne lecture !
-
Jay MExpert confirméBonjour @cilodix
Lorsque vous faites une lecture de la sortie du convertisseur analogique vers numérique (ADC) par la fonction analogRead() vous effectuez un échantillonnage de la tension présentée sur la broche choisie, par exemple A0. Cette valeur numérique est entre 0 et 1023 car l’échantillonnage se fait sur 10 bits sur un UNO.
Ensuite on peut choisir quelle est la référence de tension pour l’ADC, c’est à dire avec quelle tension maximale il fait son échantillonnage par la fonction analogReference(). Si on ne dit rien, par défaut ce sera 5 volts sur un UNO.
Donc quand la lecture de l’ADC dit 0 c’est qu’on avait 0 Volt sur la broche et quand la lecture de l’ADC dit 1023 c’est qu’on avait 5 Volt sur la broche et entre les deux c’est une droite.
Une formule qui permet de passer donc de la valeur numérique lue vers la tension est la fonction affine Y = aX+ b passant par ces deux points (0,0) et (1023,5).
Comme on passe par l’origine b=0 et la pente c’est 5.0 / 1023.0 d’où la formuleCode : valeurCapteur * 5.0 / 1023.0;
le 23/12/2020 à 5:56 -
Jay MExpert confirméMerci pour cette contribution
Je suis partisan d’apprendre très tôt à respecter une cohérence de type et de ne pas dépendre de promotions automatiques cachées par le langage et d’éviter les valeurs magiques parsemées dans le code. Quand vous proposez de faireCode : 1
2
3{ boolean etatBouton = digitalRead(2); if (etatBouton == 1)
un booléen est vrai ou faux, la fonction digitalRead ne retourne pas vrai ou faux mais un concept d’état de la tension sur cette pin avec HIGH ou LOW représenté par un entier de type int.
Je proposeraisCode : 1
2
3const byte pinBouton = 2; int etatBouton = digitalRead(pinBouton); if (etatBouton == HIGH)
le 05/03/2020 à 7:09 -
nlbmoiMembre éprouvéBonjour Jay M,
Merci de ta remarque, très pertinente : je modifierai le type de etatBouton ainsi que le test du if.le 05/03/2020 à 7:59 -
Jay MExpert confirméMerci
et j'ai vu que vous traitez de cela dans la partie "Amélioration de la lisibilité du code d’un programme" (et la notion de const est aussi importante car elle permet au compilateur de faire des optimisations.)
j'ai repéré quelques autres améliorations:
* Quand vous parlez dela ligne 31, on convertit en fait une valeur d’une échelle (qui va de 0 à 1023) en une valeur dans une autre échelle (qui va de 0 V à 5 V). Au lieu de faire un produit en croix, on peut utiliser une instruction Arduino qui fait la même chose :Code : map(valeur, limite_inf_1, limite_sup_1, limite_inf_2, limite_sup_2)
Code : float tension = map(valeurTemp, 0, 1023, 0, 5);
* dans "Les précautions pour éviter de détruire la carte Arduino voire plus", vous ditesla résistance d’un fil est quasi nulle (mettons 0,1 W pour le calcul)La valeur minimale est de 125 W, mais il vaut mieux prévoir un peu plus et opter pour une résistance de 220 W.(peut-être le symbole ("Ω" ne s'affiche-t-il pas bien ?)
* je vous suggère aussi de prendre 115200 (voir plus) comme débit par défaut pour le port Série. il n'y a plus aucune raison d'aller à 9600 bauds comme au temps des premier arduino. en fait aller lentement risque de générer certains bugs de timing dans les programme car un appel à print devient bloquant dès que vous avez plus de 64 octets à émettre en attente.
bravo et merci encore pour ce partage !le 05/03/2020 à 12:15 -
nlbmoiMembre éprouvéAh oui, c'est juste : j'ajouterai une petite précision.
J'ai corrigé une partie des symboles qui restaient mais apparemment pas tous : j'ai effectivement un souci lors de l'exportation (que je passe par la police symbol ou par l'insertion d'un caractère spécial) qui n'affiche pas les lettres grecques.
En pratique, j'opte désormais pour 115200 mais comme j'ai repris certaines anciennes versions de mes programmes, j'avoue ne pas avoir fait la mise à jour le débit.
Mercile 05/03/2020 à 13:54 -
f-lebResponsable Arduino et Systèmes EmbarquésPlus de raison de ne pas s'y mettre, merci pour ce coursle 11/03/2020 à 22:38
-
cilodixCandidat au Clubbonsoir monsieur,
tout d'abord merci beaucoup pour votre cours qui m'a permis d'acquérir vraiment rapidement les bases d'arduino
j'ai une petite question : à quoi sert l'opération:
float valeurTension = valeurCapteur * 5.0 / 1023.0; dans le programme de mesure de lumisoté avec une photo-résistance, je me doute qu'il s'agit d'une conversion avec le binaire mais je n'arrive pas à savoir exactement quoi
merci d'avance et bonne soirée.le 23/12/2020 à 0:11