Arduino Cours Débutant 3
Librement inspiré du “Livre de projets Arduino” sous licence Creative Commons BY NC SA par Arduino Srl.
Introduction
Maintenant que vous maîtrisez les bases de l’électricité, il est temps de passer la partie où l’on contrôle des choses avec l’Arduino.
Vous fabriquerez votre propre panneau de contrôle avec des boutons et des lumières qui s’allument quand vous pressez les boutons.
Une LED verte sera allumée, jusqu’à ce que vous pressiez un bouton.
Lorsque l’Arduino reçoit un signal du bouton, la lumière verte s’éteindra et deux autres lumières se mettront à clignoter.
Les broches numériques de l’Arduino ne connaissent que deux états : lorsqu’il y a une tension sur une entrée, et lorsqu’il n’y en a pas.
Ces états sont communément appelés HIGH (haut) et LOW (bas). HIGH équivaut à dire “il y a une tension ici !” et LOW signifie “il n’y a pas de tension sur cette broche !”.
Quand vous mettez une sortie (OUTPUT) à l’état haut (HIGH) en utilisant une commande appelée digitalWrite( ), vous l’activez.
Mesurez la tension entre la broche et la masse, vous aurez 5 Volts. Lorsque vous mettez une sortie (OUTPUT) à l’état bas (LOW), vous la désactivez.
Les broches numériques de l’Arduino peuvent se comporter en entrée ou en sortie.
Dans votre code, vous les configurerez en fonction de la manière dont vous voulez les utiliser.
Quand les broches sont configurées en sorties, vous pouvez contrôler des composants comme des LEDs. Lorsqu’elles sont en entrées, vous pouvez vérifier si l’on appuie sur un bouton ou non.
Étant donné que les broches O et 1 sont utilisées pour la communication avec l’ordinateur, il vaut mieux commencer par la broche 2.
Même si les interrupteurs et les boutons sont déjà bien utiles, dans le monde physique les interactions ne se limitent pas à du tout ou rien.
Même si l’Arduino est un outil numérique, il est capable de remonter des informations depuis des capteurs analogiques pour mesurer des choses comme la température ou la luminosité.
Pour ce faire, vous allez tirer parti du Convertisseur Analogique-Numérique (CAN) dont est doté l’Arduino.
Les entrées analogiques AO à A5 peuvent renvoyer une valeur comprise entre O et 1023, image d’une tension comprise entre OV et 5V.
Vous utiliserez un capteur de température TMP36 pour mesurer la chaleur de votre peau. Ce composant délivre une tension variant en fonction de la température qu’il capte.
Il a trois pattes : une qui se connecte à la masse, une autre qui se connecte à l’alimentation, et une troisième qui communiquera la tension variable à l’Arduino.
Dans le programme pour ce projet, vous lirez ce qui sort du capteur et vous en servirez pour allumer ou éteindre des LEDs, indiquant votre température corporelle. Il y a plusieurs modèles de capteurs de température. Ce modèle, le TMP36, est pratique parce qu’il délivre une tension directement proportionnelle à la température en degrés Celsius.
L’IDE Arduino intègre un outil appelé moniteur série qui vous permet d’afficher des résultats venant du microcontrôleur. En utilisant le moniteur série, vous pouvez afficher des informations en provenance des capteurs, et avoir une idée de ce qu’il se passe dans votre circuit et dans votre code pendant qu’il tourne.
Matériel
On aura besoin de la carte Arduino 🙂
1 Breadboard
1 Bouton poussoir
3 résistances 220 Ω
1 résistance 10 kΩ
3 LED rouge
1 LED verte
un capteur de température TMP36
Premier montage : Utiliser des leds et un bouton poussoir
Breadboard
La seule difficulté de compréhension dans ce montage est la résistance de 10 kΩ sur le bouton.
Cette résistance est appelée résistance de rappel. Elle permet de connecter la patte à la masse lorsque l’interrupteur est ouvert, de manière à ce qu’elle lise un “LOW” lorsqu’il n’y a pas de tension aux bornes de l’interrupteur.
Code
Tous les programmes Arduino ont 2 fonctions principales.
- setup()
- loop()
Tout ce qui est dans setup() ne sera exécuté que une seule fois au lancement du programme.
Contrairement à ce qui se trouve dans loop() qui sera exécuté en boucle.
Une variable est un nom donné à une case mémoire de l’Arduino, permettant de garder une trace.
Nommez toujours vos variables avec un nom intelligible. (Pas “x” par exemple :)) Elles peuvent être de différents types.
- int : pour les nombres entiers.
- float : pour les nombres à virgules.
- char : pour les caractères.
- …
Ci-dessous, vous trouverez le code, très commenté afin de comprendre les premiers concepts importants.
En langage Arduino, il suffit de précéder une ligne par « // » pour commenter ou entourer un bloc par /* blablabla */.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/* On déclare une variable pour un nombre entier "int" pour stocker l'état du bouton. Elle est persistante pour tout le programme. */ int switchstate = 0; void setup() { // On déclare les broches numériques 3,4 et 5 comme des sorties. (Pour allumer ou éteindre les leds) pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); // On déclare la broche numérique 2 comme une entrée. (Pour récupérer l'état du bouton poussoir qui sera 1 ou 0) pinMode(2, INPUT); } void loop() { // Nous allons lire la valeur du bouton poussoir, avec la fonction digitalRead(). switchstate = digitalRead(2); // SI le bouton n'est pas appuyé, nous allumons la led verte et éteignons les leds rouges. if (switchstate == LOW) { digitalWrite(3, HIGH); // Allumer la led verte branchée en 3 digitalWrite(4, LOW); // Éteindre la led rouge branchée en 4 digitalWrite(5, LOW); // Éteindre la led rouge branchée en 5 } // SINON le bouton est appuyé, nous éteignons la led verte et faisons clignoter les leds rouges alternativement. else { digitalWrite(3, LOW); // Éteindre la led verte branchée en 3 digitalWrite(4, LOW); // Éteindre la led rouge branchée en 4 digitalWrite(5, HIGH); // Allumer la led rouge branchée en 5 // Attendre 1/4 de seconde. C'est important ici pour que notre œil perçoive un vrai clignotement. delay(250); digitalWrite(4, HIGH); // Allumer la led rouge branchée en 4 digitalWrite(5, LOW); // Éteindre la led rouge branchée en 5 // Attendre 1/4 de seconde. C'est important ici pour que notre œil perçoive un vrai clignotement. delay(250); } } |
Deuxième montage : Utiliser un capteur branché en analogique
Breadboard
La seule difficulté est de brancher les composants dans le bon sens.
Code
Les constantes sont des variables qui ne changent pas.
On les déclare comme une variable mais en préfixant par “const”.
En programmation, les virgules des nombres sont remplacés par des points.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
// On nomme la broche analogique A0 qui va recevoir le capteur de température : "sensorPin". const int sensorPin = A0; // On fixe la température de base de la pièce à 20° const float baselineTemp = 20.0; void setup() { // On ouvre une connexion série pour communiquer avec l'ordinateur. (Par le câble USB) // On pourra ainsi visualiser les informations remonter par le capteur. Serial.begin(9600); /* On va déclarer les broches des leds. On utilise une boucle for pour nous économiser quelques lignes de codes. for (initialization; condition; incrementation) { instruction(s)à exécuter; } */ for (int pinNumber = 2; pinNumber < 5; pinNumber++) { pinMode(pinNumber, OUTPUT); digitalWrite(pinNumber, LOW); } } void loop() { // On lit la valeur du capteur de température et nous le stockons dans la variable. int sensorVal = analogRead(sensorPin); // On envoi la valeur vers le port série. Serial.print("Valeur du capteur: "); Serial.print(sensorVal); // On peut retrouver la tension avec un peu de math :) // Évidement, elle sera comprise entre 0 et 5V mais en décimale donc on utilise "float". float voltage = (sensorVal / 1024.0) * 5.0; // On envoi la tension vers le port série. Serial.print(", Volts: "); Serial.print(voltage); /* Pour savoir comment trouver le rapport entre la tension mesurée par le capteur et la température, il faut lire la fiche technique (datasheet) du composant. [[https://www.arduino.cc/en/uploads/Main/TemperatureSensor.pdf|Lien de la datasheet]] Donc d'après cette fiche technique, pour chaque degrés Celsius, la tension change de 10 millivolts. Ce capteur peut lire des température négative mais vu qu'il ne peut pas délivrer de tension négative, on a introduit un décalage en tension. (Offset) En résumé, on prends la tension, on y soustrait 0.5 et on multiplie par 100 pour trouver la température en degrés Celcius. */ float temperature = (voltage - .5) * 100; Serial.print(", Temperature: "); //On utilise une commande particulière pour afficher la dernière information avec "println" qui renvoi à la ligne. Serial.println(temperature); // Si la température est inférieure à la consigne +2, on éteint toutes les leds. if (temperature < baselineTemp + 2) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); } // Si la température augmente de 2 à 4 degrès, on allume une led else if (temperature >= baselineTemp + 2 && temperature < baselineTemp + 4) { digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); } // Si la température augmente de 4 à 6, on allume 2 leds else if (temperature >= baselineTemp + 4 && temperature < baselineTemp + 6) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, LOW); } // Si la température augmente de + de 6 degrès, on allume les 3 leds else if (temperature >= baselineTemp + 6) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); } // Le délais ci-dessous est important, le convertisseur analogique/numérique ne peut pas faire énormément de calculs. delay(1); } |
Les informations envoyées de l’Arduino au PC sont visualisable par le “moniteur série”