Arduino
Initiation mains sur les touches http://recit.org/ul/phu
Version 11 mai 2016
La présente formation a pour but d’initier à l’utilisation de la carte Arduino UNO dans un contexte de robotique en classe. La programmation (traitement des entrées et des sorties) se fait avec Blockly@rduino pour débuter.
L’ouverture du système, la simplicité et la souplesse (plusieurs types de projets), les faibles coûts, la documentation disponible, sont quelques aspects en faveur de cette technologie.
Au programme | Plus ou moins au programme |
Différence de potentiel, circuit série, circuit parallèle, circuit mixte, résistance, etc. | Lire des % sur un écran. Ajuster la vitesse de rotation d’un moteur avec un curseur. |
Vitesse du son, distance, temps. V = d/t Faire calculer la distance par programmation lorsqu’on a le temps du trajet. | Lire une mesure de distance sur un écran. |
Construire et utiliser (programmer) un circuit qui permet de mesurer la quantité de courant qui passe dans un milieu électrolyte. | Lire une mesure d’humidité du sol sur un écran. |
Monter un circuit, tenant compte du sens du courant, qui permet de faire tourner un moteur dans un sens précis. Contrôler le sens par des moyens physiques (changer le circuit) ou par programmation. | Connecter un moteur à l’aide de fiche (type téléphone) et le faire tourner avec une case à cocher. |
Utiliser la science et technologie pour construire (démarche technologique), programmer (structurer sa pensée + résoudre de «vrais» problèmes), améliorer des robots. | Utiliser des robots (qui utilisent de la science et technologie) qui ont été construits par d’autres. |
Note : voir ces extraits du PFEQ pour quelques liens : Cycle 1 et cycle 2 au secondaire.
Pour pouvoir communiquer avec la carte Arduino, nous devons installer le logiciel de base sur notre ordinateur.
Si vous utilisez Firefox (version récente), vous pouvez installer l’extension CodeBender pour pouvoir téléverser directement le code de Blockly@rduino vers la carte. Ceci simplifie quelque peu la tâche de programmation de notre robot.
L’aide mémoire publié sur cette page http://recit.org/ul/pht pourra vous aider tout au long de la formation.
Défi : On allume une DEL avec bouton poussoir (interrupteur)
But : Appropriation du matériel (alimentation).
Comme première tâche à réaliser avec le matériel Arduino, nous vous proposons de réaliser ce petit circuit (garder ce montage pour le prochain défi). La résistance de 220 Ω sert ici à ne pas envoyer trop de courant dans la DEL.
[ATTENTION : la broche la plus longue de la DEL est l'anode, donc elle doit être connectée sur la borne positive de notre circuit. Voir image sur l’aide-mémoire.]
Montage
Note : On utilise ici le courant (une différence de potentiel de 5V) fourni par le port USB (on doit donc connecter le fil USB de l’ordinateur à la carte Arduino) de l’ordinateur pour alimenter notre circuit.
Schéma électrique
Défi : Lire et afficher la valeur (ON ou OFF) du bouton poussoir (montage du défi 1)
But : Appropriation des entrées et de la programmation.
Le présent défi est une suite du montage réalisé dans le défi précédent. Mais cette fois nous allons prendre une mesure dans le circuit et programmer Arduino pour afficher cette mesure.
Montage
Schéma électrique
Maintenant que le montage est fait, nous devons programmer Arduino. Comme plus haut, nous vous suggérons Blockly@rduino pour ce faire.
Le programme doit lire la valeur de la broche numérique 2 (celle connectée à la sortie de l’interrupteur) puis l’envoyer vers le moniteur série.
Note : Le moniteur série est une fenêtre vers laquelle le programme peut envoyer de l’information. Ce moniteur série se trouve tant dans Blockly@rduino (nommé Console série dans le menu de gauche) que dans l’IDE d’Arduino (la loupe en haut à droite du logiciel).
Le programme (blocs) ressemblera donc à ceci :
La vidéo suivante explique la procédure pour créer et tester le programme : http://recit.org/ul/php
Voir le montage et le programme dans le simulateur 123DCircuits.io : http://recit.org/ul/phq
Un peu de théorie à propos de la programmation Arduino
Le code Arduino d’origine est en mode texte. Voici à quoi ressemble le code (commenté) pour le présent défi :
void setup() //c'est ici qu'on initialise le programme. Cette boucle roule 1 fois
{
pinMode(2, INPUT);//On signifie que la broche 2 est en entrée
Serial.begin(9600);//On démarre la communication avec le port série
} //les parenthèses servent à ouvrir et fermer des boucles
void loop()//c'est la boucle qui roule toujours
{
Serial.print("État du bouton =");//On écrit du texte dans le moniteur série
Serial.println(digitalRead(2));//ON écrit ensuite la valeur de la broche 2. Le «println» saute de ligne.
delay(1000);//on fait attendre 1 s (1000 ms) avant la prochaine boucle(loop).
}
N’ayez pas peur d’éditer le programme en mode texte, ça peut quelquefois être plus simple que les blocs de Blockly@rduino!
Une sonde n’est qu’un circuit qui laisse passer du courant selon le capteur utilisé (son, température, champ magnétique, etc.).
Pour avoir une idée de l’humidité du sol (pot de fleur par exemple), on peut utiliser tout simplement la propriété électrolytique d’une solution (ici eau + terre). Si le sol est sec, le courant passera moins bien que si le sol est humide.
Inspiration :
Note : Ce petit projet http://recit.org/ul/phr (capteur d’humidité du sol) offre de belles possibilités pour débuter avec Arduino, car la création (compréhension) du capteur avec des clous (univers technologique) et la saisie de données font un très bon tour d’horizon de la robotique Arduino.
Voici un montage pour mesurer cette conductibilité :
À noter que nous utilisons ici 2 clous (galvaniser de préférence pour éviter une oxydation trop rapide), séparer d’environ 2 cm par un matériau isolant, sur lesquels nous avons ajouté un isolant afin d’aller prendre la mesure à une certaine profondeur dans la terre (l’humidité du sol varie en fonction de la profondeur). Voici une photo de notre sonde (au lieu du ruban, utiliser du silicone comme isolant pour une sonde plus durable) :
Le code pour lire la valeur prise à la broche A0 et l’envoyer dans le port série est le suivant :
void setup()
{
Serial.begin(9600);
pinMode(A0, INPUT);
}
void loop()
{
Serial.print("Valeur humidité : ");
Serial.println(analogRead(A0));
}
Le traitement de cette donnée (que nous aurons à «calibrer» pour trouver les valeurs «trop sec» et «adéquat») peut se faire de différente façon, mais dans l’exemple ci-dessous nous allumons une DEL de couleur différente selon le taux d’humidité du sol. On peut facilement modifier le tout pour faire démarrer une pompe à une valeur précise (voir ce défi http://recit.org/ul/phs).
Montage
Schéma électrique
Programmation
Fichier XML (à importer dans Blockly@rduino) et adresse de l’image ci-dessous (pour zoomer).
Le code Arduino :
{
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
}
void loop()
{
Serial.print("Humidité : ");
Serial.println(analogRead(A0));
delay(2000);
if (analogRead(A0) < 500) {
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
} else if (analogRead(A0) >= 500 && analogRead(A0) <= 700) {
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
} else if (analogRead(A0) > 700) {
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
}
}
Défi : Se créer un petit voltmètre avec la carte Arduino UNO.
But : Appliquer les lois des circuits.
Ce défi n’est pas vraiment relié à la robotique, mais peut être utile pour la classe de science et technologie. Il nous permettra de mesurer la différence de potentiel d’une source de courant continu, et ce tout en comprenant ce qui se passe dans le circuit (U = RI, circuit série, etc.).
En travaillant un peu, on peut trouver la relation suivante pour le circuit ci-dessous.
où Ue est la différence de potentiel à l’entrée du circuit (celle que l’on veut connaître) et Us est la différence de potentiel mesurée par la carte Arduino.
Montage
Il ne reste qu’à programmer la carte Arduino pour traiter la valeur d’entrée A0 (qui prend des valeurs entre 0 et 1023, soit de 0 à 5V) pour connaître la différence de potentiel Ue. Voici un exemple de code :
int entree;
float vIn;
float vOut;
void setup() {
// put your setup code here, to run once:
pinMode(A0,INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
entree=analogRead(A0);
vOut=(entree * 5.0)/1024.0;
vIn=vOut*5.545454;
Serial.println(vIn);
delay(2000);
}
Vous avez maintenant les bases pour poursuivre vos apprentissages de la robotique Arduino. L’autoformation Arduino sur notre campus http://campus.recitmst.qc.ca/ vous offre d’autres défis à relever pour ce faire.
Plusieurs projets peuvent être réalisés avec le matériel Arduino, nous en avons documentés quelques-uns sur ce site http://recitmst.qc.ca/arduino/ .
Bonne robotique Arduino!
Pierre Lachance
Service national du RÉCIT
Domaine de la mathématique, de la science et technologie
pierre.lachance@recitmst.qc.ca
Quelques projets
Des outils et stratégies
Outils/stratégies | Pourquoi? | Où? |
Formation «Premiers pas» offerte aux CP | Pour présenter les possibilités d’Arduino pour le secondaire ainsi que la documentation disponible. | Présent document. |
Autoformation | Séquence de formation (et documentation) pour supporter les formations dans les milieux. | http://campus.recitmst.qc.ca/course/arduino/ ou http://campus.recit.org/courses/course-v1:RECITMST+arduino101+2016/about |
Arduino en classe | Site Web de documentation d’Arduino pour présenter des projets réalisables et d’autres ressources. | |
Blockly@rduino | Outil de programmation en ligne installé sur nos serveurs pour aider à l’appropriation de la programmation. | |
Bouts de code | Des exemples de codes (blocs vs texte) pour aider à l’appropriation de la programmation en mode texte (où le but est ici de comprendre et ajuster le code, pas nécessairement de le créer de zéro). | |
123d.Circuits | Outil en ligne (Autodesk) qui permet de réaliser des montages simples avec Arduino Uno et de les simuler (programmer). | |
Aide-mémoire | Une page synthèse de quelques éléments essentiels d’Arduino. | |
Liste de matériel de formation | Pour supporter les milieux dans l’achat de matériel de base pour la formation des enseignants. | |
Utilisation de GeoGebraTube | Les données recueillies par les robots Arduino peuvent être traitées et publiées grâce à GeoGebra. | Un exemple : http://recit.org/ul/pi0 |