Nous allons ici construire une station météo à l'aide d'un microcontrôleur arduino. Son utilisation nous permettra d'obtenir plusieurs
grandeurs comme la température ,la pression,... que nous pourons analyser et traîter.
La réalisation de cette station ne demande pas de notions de programmation, tout est détaillé.
Au programme:
Le document à compléter est téléchargeable ici
Installation
Installation du logiciel
Pour télécharger le logiciel, il faut se rendre sur : https://arduino.cc/en/Main/Software puis télécharger la dernière version stable en
fonction de votre système d’exploitation.
Interface du logiciel
Lançez le logiciel en double cliquant sur l’icône avec le symbole « infini » en vert. C’est l’exécutable du logiciel. Après un léger temps
de réflexion, une image s’affiche :
Cette fois, après quelques secondes, le logiciel s’ouvre. Une fenêtre se présente à vous :
-
Le cadre numéro 1 contient les options de configuration du logiciel
-
Le cadre numéro 2 contient les boutons qui vont vous servir lorsque vous allez programmer votre carte
-
Le cadre numéro 3 va contenir le programme que vous allez créer
Approche et utilisation du logiciel
Attaquons-nous plus sérieusement à l’utilisation du logiciel. La barre des menus est entourée en rouge et numérotée par le chiffre 1.
Le menu Fichier
Quelques menus intéressants :
-
Carnet de croquis : Ce menu regroupe les fichiers que vous avez pu faire jusqu’à maintenant (s’ils sont enregistrés dans le
dossier par défaut du logiciel)
-
Exemples : Dans ce menu, toute une liste se déroule pour afficher les noms d’exemples de programmes existants
; Vous pourrez vous en inspirer pour créer vos propres programmes ou tester de nouveaux composants
-
Préférences : Vous pourrez régler ici quelques paramètres du logiciel comme par exemple le mode sombre
Les boutons
-
Bouton 1 : Ce bouton permet de vérifier le programme, il actionne un module qui cherche les erreurs dans votre programme
-
Bouton 2 : Charge (téléverse) le programme dans la carte Arduino
-
Bouton 3 : Lance le débogage
-
Bouton 4 : Permet de choisir le type de carte arduino
-
Bouton 5 : Ouvre le traceur série
-
Bouton 6 : Ouvre le moniteur série
Vous êtes désormais prêt pour passer à la carte arduino
Présentation de la carte
Pour commencer la découverte de la carte Arduino, présentons la carte en elle-même: comment s’en servir et
avec quoi? Sur cette photo les points importants de la carte sont notifiés en rouge.
Constitution de la carte
Voyons quels sont ces points importants et à quoi ils servent.
-
Le microcontrôleur
C'est le cerveau de la carte (en 1). C’est lui qui va recevoir le programme que vous aurez créé et qui va le stocker dans sa mémoire
puis l’exécuter. Grâce à ce programme, il va savoir exécuter des actions, qui peuvent être : faire clignoter une LED, afficher des
caractères sur un écran, envoyer des données à un ordinateur, …
-
Alimentation
Pour fonctionner, la carte a besoin d’une alimentation. Le microcontrôleur fonctionnant sous 5V, la carte peut être alimentée en 5V
par le port USB (en 2) ou bien par une alimentation externe (en 3) qui est comprise entre 7V et 12V. Cette tension doit être continue
et peut par exemple être fournie par une pile 9V. Un régulateur se charge ensuite de réduire la tension à 5V pour le bon fonctionnement
de la carte. Pas de danger de tout griller donc ! Veillez seulement à respecter l’intervalle de 7V à 15V (même si le régulateur peut
supporter plus, pas la peine de le retrancher dans ses limites)
-
Visualisation
Les trois “points blancs” entourés en rouge (4) sont en fait des LED dont la taille est de l’ordre du millimètre. Ces LED ont
deux fonctions :
-
Celle tout en haut du cadre : elle est connectée à une broche du microcontrôleur et va servir pour tester le matériel. Nota : Quand on branche
la carte au PC, elle clignote quelques secondes.
-
Les deux LED du bas du cadre : eles servent à visualiser l’activité sur la voie série (une pour l’émission et l’autre pour la
réception). Le téléchargement du programme dans le micro¬contrôleur se faisant par cette voie, on peut les voir clignoter
lors du chargement.
-
La connectique
La carte Arduino ne possédant pas de composants qui peuvent être utilisés pour un programme, mis à par la LED connectée à la broche 13
du microcontrôleur, il est nécessaire de les rajouter. Mais pour ce faire, il faut les connecter à la carte. C’est là qu’intervient
la connectique de la carte (en 5a et 5b). Par exemple, si on veut connecter une LED sur une sortie du microcontrôleur, il suffit juste
de la connecter, avec une résistance en série, à la carte, sur les fiches de connections de la carte. Cette connectique est
importante et a un brochage qu’il faudra respecter. Nous le verrons quand nous apprendrons à faire notre premier programme. C’est
avec cette connectique que la carte est “extensible”, car l’on peut y brancher tous types de montages et modules ! Pour notre part, pour
simplifier les branchements nous utiliserons un shield « Grove ».
<
Installation de la carte
Afin d’utiliser la carte, il faut l’installer. Normalement, les drivers sont déjà installés sous GNU/Linux. Sous mac, il suffit de double cliquer sur le fichier
.mkpg inclus dans le téléchargement de l’application Arduino et l’installation des drivers s’exécute de façon automatique.
Sous Windows
Lorsque vous connectez la carte à votre ordinateur sur le port USB, un petit message en bas de l’écran apparaît. Théoriquement, la carte que
vous utilisez doit s’installer toute seule( Win 10 et supérieur). Cependant, si vous êtes sous Win 7, il se peut que ça ne fonctionne pas du premier
coup. Dans ce cas,
laissez la carte branchée puis allez dans le panneau de configuration. Une fois là, cliquez sur “système” puis dans le panneau de gauche
sélectionnez “gestionnaire de périphériques”. Une fois ce menu ouvert, vous devriez voir un composant avec un panneau “attention” jaune.
Faites un clic droit sur le composant et cliquez sur “Mettre à jour les pilotes”. Dans le nouveau menu, sélectionnez l’option
“Rechercher le pilote moi-même”. Enfin, il ne vous reste plus qu’à aller sélectionner le bon dossier contenant le driver. Il se trouve dans
le dossier d’Arduino que vous avez dû décompresser un peu plus tôt, et se nomme “drivers” (attention, ne descendez pas jusqu’au dossier
“FTDI”). Par exemple, en Win7, le chemin sera :
C:\Program Files (x86)\Arduino\drivers
Après l’installation et une suite de clignotements sur les microLED de la carte, celle-ci devrait être fonctionnelle; une petite LED verte
témoigne de la bonne alimentation de la carte :
Test de la carte
Ne commencez pas à programmer tête baissée: il faut, avant toutes choses, tester le bon fonctionnement de la carte: Car ce serait idiot
de programmer la carte et de chercher d'éventuelles erreurs dans le programme alors que le problème viendrait de la carte ! Il faut donc tester le matériel
en chargeant un programme.
1ère étape : ouvrir un programme
Nous allons choisir un exemple tout simple qui consiste à faire clignoter une LED. Son nom est Blink et vous le trouverez dans la catégorie
Basics :
Une fois que vous avez cliqué sur Blink, une nouvelle fenêtre va apparaître. Elle contient le programme Blink. Vous pouvez alors fermer l’ancienne fenêtre.
2ème étape : choix de la carte et du port
Avant d’envoyer le programme Blink vers la carte, il faut dire au logiciel quel est le nom de la carte et sur quel port elle est branchée.
Choisir la carte que l'on va programmer et son port de connexion
Ce n’est pas très compliqué, le nom de votre carte est indiqué sur elle. Pour nous, il s’agit de la carte "Uno". Cliquer sur "Sélectionner
une carte" puis "Sélectionner une autre carte et un autre port".
Dans la nouvelle fenêtre, rechercher "arduino Uno" et sélectionner le port de connexion. Ne choisissez pas COM1 car il n’est quasiment jamais connecté à la carte.
Dans le cas présenté ici, il s’agit de COM12
Je ne connais pas mon port
Pour trouver le port de connexion de la carte, vous pouvez aller dans le gestionnaire de périphérique de windows, qui se trouve dans le panneau de configuration.
Regardez à la ligne Ports (COM et LPT) et là, vous devriez avoir Arduino Uno (COMX).
Dernière étape
Maintenant, il va falloir envoyer le programme dans la carte. Pour ce faire, il suffit de cliquer sur le bouton Téléverser.
Vous verrez tout d’abord le message “Compilation du croquis en cours…” pour vous informer que le programme est en train d’être compilé
en langage machine avant d’être envoyé.
En bas dans l’image, vous voyez le texte : “Téléversement…“, cela signifie que le logiciel est en train d’envoyer le programme dans la carte.
Le message : “Téléversement fait” signale que le programme à bien été chargé dans la carte. Si votre matériel fonctionne, vous devriez avoir une
LED sur la carte qui clignote :
Si vous n’obtenez pas ce message mais plutôt un message en rouge, pas d’inquiétude, le matériel n’est pas forcément défectueux !
En effet, plusieurs erreurs sont possibles :
-
L’IDE recompile avant d’envoyer le code, vérifiez la présence d’erreur dans le programme
-
La voie série est peut-être mal choisie, vérifiez les branchements et le choix de la voie série
-
Tentez de débrancher puis rebrancher le câble USB de la carte
-
L’IDE est codé en JAVA, il peut être capricieux et bugger de temps en temps (surtout avec la voie série…) : réessayez l’envoi !
Fonctionnement global
Partons du programme
Le contenu
Le programme est ce qui va définir chaque action que va exécuter la carte Arduino. Mais ce n’est pas tout ! Dans le programme il
y a plusieurs zones, que nous verrons plus en détail tout au long de la lecture de ce cours, qui ont chacune un rôle particulier.
-
La première zone sert principalement à dire à la carte de garder en mémoire quelques informations qui peuvent être : l’emplacement
d’un élément connecté à la carte, par exemple une LED en broche 13, ou bien une valeur quelconque qui sera utile dans le programme :
-
La seconde zone est l’endroit où l’on va initialiser certains paramètres du programme. Par exemple, on pourra dire à la carte
qu’elle devra communiquer avec l’ordinateur ou simplement lui dire ce qu’elle devra faire de la LED qui est connectée sur sa
broche 13… Cette partie du programme ne s’exécutera qu’une seule fois, au démarrage de la carte.
-
La dernière zone est la zone principale où se déroulera le programme. Tout ce qui va être écrit dans cette zone sera exécuté par
la carte en boucle, ce sont les actions que la carte fera. Par exemple, c’est ici qu’on pourra lui dire de faire clignoter la LED
sur sa broche 13. On pourra également lui demander de faire une opération telle que 2+2 ou bien d’autres choses encore ! Une fois
tout le code de cette zone executé, la carte recommencera depuis le début.
En conclusion, tout (vraiment tout !) ce que va faire la carte est inscrit dans le programme. Sans programme, la carte ne fait rien !
C’est grâce au programme que la carte Arduino va savoir qu’une LED est connectée sur sa broche 13 et ce qu’elle va devoir faire avec,
allumer et éteindre la LED alternativement pour la faire clignoter.
L'envoi
Lorsque le programme est envoyé, le logiciel Arduino va alors vérifier si le programme ne contient
pas d’erreur et ensuite le compiler (le traduire) pour l’envoyer dans la carte. En effet, le microcontrôleur de la carte n’est pas capable
de « comprendre » le code que nous avons écrit. Il faut passer par l’étape de la compilation, qui est en quelque sorte une traduction de ce
code vers le langage compris par le contrôleur :
Quelques notions de programmation
Les variables
Ce sont des informations auxquelles on donne un nom. Les variables peuvent être de différents types, et leur valeur peut être amenée à changer
au cours du programme.
On déclare une variable de la manière suivante :
Ici, j’ai déclaré une variable de type int (integer, une valeur entière) que j’ai appelée « monNombreEntier », et à laquelle j’ai attribué
la valeur 12.
Certaines variables ne sont pas amenées à être modifiées. On peut alors ajouter le mot clé « const », afin que le compilateur nous avertisse
si l'on essaie de modifier la valeur (par inadvertance). On utilise souvent ce mot clé pour les variables contenant des numéros de broche.
Les noms des variables ne doivent pas contenir d’accent, d’espaces ni de caractères spéciaux sauf l’underscore « _ ».
Par convention, les noms de vos variables commenceront toujours par une minuscule.
Les commentaires
Il est utile de pouvoir ajouter des commentaires à notre programme. Ceux-ci n’auront aucune incidence sur son fonctionnement, mais amélioreront
grandement sa lisibilité et sa maintenabilité.
Tout ce qui suit « // » sur une même ligne ne sera pas pris en compte par le programme. De même pour tout ce qui se trouve entre « /* » et
« */ », y compris cette fois sur plusieurs lignes.
Les conditions
Dans un programme, on aura souvent besoin de gérer des conditions. Pour cela, on dispose de l’opérateur « if ». Il permet des conditions
de type « Si (condition) alors (action) ». Il est aussi possible d’ajouter une action pour le cas inverse (sinon) à l’aide de l’opérateur
« else ».L’utilisation est la suivante :
Voici les principaux opérateurs de comparaison pour les conditions
-
« == » renvoie vrai si les 2 opérandes sont égaux
-
« != » renvoie vrai si les 2 opérandes sont différents
-
« > » renvoie vrai si le premier opérande est supérieur au second
-
« < » renvoie vrai si le premier opérande est inférieur au second
-
« >= » renvoie vrai si le premier opérande est supérieur ou égal au second
-
« <= » renvoie vrai si le premier opérande est inférieur ou égal au second
Les boucles conditionnelles
Les boucles permettent la répétition d’une partie du programme. Il en existe plusieurs, mais nous nous concentrerons sur les deux principales.
La boucle « while »
Il s’agit de la boucle la plus simple. Elle s’exécute tant que la condition est vraie.
Dans cet exemple, la boucle tournera tant que la variable « température » n’atteindra pas la valeur de 20.
La boucle « for »
On l’utilise pour exécuter un nombre donné d’itérations (une itération = un passage dans la boucle).
Dans cet exemple, « i » est notre compteur d’itérations. On l’initialise à 0.
Ensuite, on indique notre condition : « i < nombreIterations » signifie que l’on continuera d’exécuter notre boucle tant que « i »
sera inférieur à la variable « nombreIterations ». Et pour finir, « i++ » signifie qu’à la fin de chaque itération, « i » est incrémenté.
Les librairies
Les librairies (ou bibliothèques) sont un ensemble de programmes prenant en charge certaines opérations. Elles permettent une certaine
abstraction, simplifiant alors l’écriture d’un programme.
L’utilisateur n’a donc pas à se préoccuper de ce qui est fait par la librairie, il n’a qu’à se servir des différentes fonctions fournies afin d’arriver au résultat
voulu.
La gestion d’un écran LCD serait par exemple complexe à réaliser en partant de zéro, alors qu’une fois la bonne librairie installée,
quelques lignes de code suffisent à afficher ce que l’on veut !
Les librairies se trouvent dans le dossier C:\Users\*utilisateur*\Documents\Arduino\libraries.
Afin d’installer une librairie, il suffit de copier son dossier à l'emplacement indiqué ci-dessus, ou même de l’installer directement à l’aide du gestionnaire de librairies inclus
avec le logiciel Arduino si la librairie s’y trouve.
Il existe des bibliothèques prenant en charge tout un tas de choses, parfois matérielles (pour gérer un LCD par exemple), et parfois uniquement logicielles
(pour simplifier la réalisation de calculs mathématiques complexes par exemple).
La communication série
Important : la liaison série utilise les broches 0 et 1 de l’Arduino. Si on souhaite utiliser la liaison, alors il faut veiller à ne rien
connecter à ces broches.
La liaison série est utilisée pour communiquer entre l’Arduino et un ordinateur ou un autre périphérique. Afin de l’utiliser, il faut commencer
par initialiser la liaison en spécifiant le baud rate (vitesse) voulu. La commande « Serial.begin(baudRate) » est alors utilisée
(attention au « S » majuscule). Une vitesse de 115200 est une bonne valeur par défaut.
Nous pouvons ensuite envoyer des informations à l’aide de 2 commandes principales :
Afin de pouvoir récupérer ces données sur l’ordinateur, il nous faut utiliser un émulateur de terminal série. L’IDE Arduino en contient un
que l‘on peut démarrer en cliquant sur l’icône en forme de loupe en haut à droite :
Il ne reste qu’à s’assurer que le baud rate correspond avec celui utilisé dans notre programme
Le logiciel Arduino met aussi à notre disposition un traceur série. Celui-ci permet la réalisation de graphiques de manière très simple. Il
suffit d’envoyer des nombres depuis notre programme, et le traceur s’occupe du reste !
Un écran comme celui-ci avec le moniteur série
Devient cela avec le traceur série
Mise en pratique : la station météo
Le potentiomètre
Le potentiomètre est un composant analogique. Une fois correctement connecté à notre carte, nous pourrons mesurer l’angle de ce dernier.
Nous pouvons le relier sur n’importe quelle entrée analogique de l’Arduino (de A0 à A5).
Il faudra simplement veiller à indiquer la même valeur dans notre programme. Ici, on a choisi le port A0.
Voici notre premier programme :
// On déclare une variable qui contient le numéro du port sur lequel est
// branché le potezntiomètre
const int brochePotentiometre = A0;
void setup() {
// On initialise la liaison série à une vitesse de 115200
Serial.begin(115200);
}
void loop() {
// On récupère la valeur du capteur
int valeurPotentiometre = analogRead(brochePotentiometre);
//On envoie cette valeur sur la liaison série (vers le PC)
Serial.println(valeurPotentiometre);
// On fait une pause entre chaque mesure
delay(50);
}
Après avoir téléversé ce programme, vous pouvez ouvrir le moniteur série et manipuler le potentiomètre afin de visualiser l’évolution de la valeur.
Essayez ensuite d’ouvrir le traceur série pour voir ces changements sous la forme d’un graphique.
Le capteur de luminosité
Ce capteur nous renvoie une valeur analogique sous la forme d’une tension qui va augmenter en même temps que la luminosité.
En vous basant sur le programme précédent (potentiomètre), écrire un programme qui permet de visualiser les variations de luminosité.
Vous utiliserez le port A1, et vous nomerez vos variables « portCapteurLuminosite » et « valeurCapteurLuminosite ».
Le capteur de qualité d’air
Ce capteur nous renvoie une valeur analogique sous la forme d’une tension qui va augmenter quand la qualité de l’air se dégrade.
Ce capteur donne une indication sur la teneur en monoxyde de carbone et en Composés Organique Volatiles (COV).
En vous basant sur le programme précédent, écrire un programme qui permet de visualiser les variations de qualité de l’air.
Vous utiliserez le port A2, et vous nomerez vos variables « portCapteurAir » et « valeurCapteurAir ».
Le capteur de rayonnement UV
Ce capteur nous renvoie une valeur analogique sous la forme d’une tension qui va augmenter en même temps que son exposition aux rayonnements ultraviolets (UV).
En vous basant sur le programme précédent, écrire un programme qui permet de visualiser les variations d’UV.
Vous utiliserez le port A3, et vous nomerez vos variables « portCapteurUV » et « valeurCapteurUV ».
La sonde de température
Contrairement aux 3 précédents capteurs, celui-ci ne nous renvoie pas ses mesures sous forme d’une tension variable, il utilise à la place un
protocole numérique bien précis. Il s’agit du protocole OneWire.
Mais pas d’inquiétude, il existe une librairie qui va gérer pour nous le protocole OneWire.
Nous allons aussi utiliser une seconde librairie conçue spécifiquement pour communiquer avec la sonde que nous utilisons (sonde Dallas)
Nous allons donc commencer par installer ces deux librairies à l’aide du gestionnaire de librairies :
Nous allons relier la sonde de température sur le port 2, marqué « D2 » sur le shield Grove. Remplacez les *** par les éléments appropriés et testez votre programme.
// On inclut les librairies nécessaires
#include
#include
// On crée une instance OneWire sur le port 2 afin de communiquer avec le capteur
OneWire oneWire(***);
// On crée une instance de capteur de température en utilisant le oneWire créé précedemment
DallasTemperature sensors(&oneWire);
void setup(void)
{
// On initialise la liaison série avec une vitesse de 115200
Serial.begin(***);
// On initialise le capteur de température
sensors.begin();
}
void loop(void)
{
// On effectue la mesure
sensors.requestTemperatures(); // Send the command to get temperatures
// On récupère la mesure du premier capteur, le seul dans notre cas.
// On stocke cette mesure dans une variable de type "float", c'est une valeur décimale.
float tempC = sensors.getTempCByIndex(0);
// Si la valeur récupérée est valide, on l'affiche
if(tempC != DEVICE_DISCONNECTED_C)
{
Serial.print("Temperature : ");
Serial.println(***);
}
// Sinon, on indique qu'une erreur a eu lieu lors de la mesure
else
{
Serial.println("Erreur lors de la mesure");
}
}
Le baromètre
Ce capteur utilise ce qu’on appelle un bus I2C. Ce bus se trouve sur les ports A4 et A5 sur la carte Arduino UNO.
Il faudra donc veiller à réserver ces ports à cette utilisation si vous voulez utiliser le bus.
Sur le shield Grove, on trouve des connecteurs pré câblés à ces ports, nommés « I2C ». C’est ici que nous
relieront notre capteur. Tous les connecteurs « I2C » sont reliés ensemble.
Comme pour le capteur précédent, nous allons utiliser deux librairies pour faire fonctionner ce baromètre.
La première est la librairie « Wire », qui est préinstallée dans le logiciel Arduino, et qui est dédiée à la
gestion du protocole I2C. La seconde nommée « Grove BMP280 » sera dédiée spécifiquement à la communication avec le capteur BMP280.
Installez la librairie « Grove BMP280 » et complétez le programme suivant. Les noms des variables à définir sont « temperature » et « pression »
// On inclut les librairies
#include "Seeed_BMP280.h"
#include
// On crée une instance du capteur
BMP280 bmp280;
void setup() {
// On initialise la liaison série
Serial.begin(***);
// On tente d'initialiser le capteur
// Si l'initialisation a échoué, on affiche un message d'erreur
if (!bmp280.init())
{
Serial.println("Erreur de communication avec le capteur");
}
}
void loop() {
// On récupère les mesures
float *** = bmp280.getTemperature();
float *** = bmp280.getPressure();
// On affiche les mesures
Serial.print("Temperature : ");
Serial.println(***);
Serial.print("Pression : ");
Serial.println(***);
Serial.println();
delay(100);
}
La station
Réalisez le programme permettant de gérer tous les capteurs en même temps.
Le shield carte SD
Attention : la carte SD (ou micro SD) doit avoir une capacité de 16Go maximum.
Installer la librairie nommée « SD ».
Branchez le potentiomètre an A0, recopiez et téléversez le programme ci-dessous, faites variez le potentiomètre et enfin regarder le fichier .csv créé avec Excel.
Demander le programme final
Idées
Ici vous trouverez quelques idées pour réaliser votre projet à partir de la station météo que l'on vient de construire. La liste n'est pas exhaustive, soyez créatif.
Projet 1
Mise en évidence du réchauffement climatique
Vous pouvez mesurer la température sur une longue période(1 mois) et regarder son évolution par rapport à il y a 10, 15 , 20 ans par exemple.
Pour cela il existe plusieurs sites "d'open data" où on peut trouvre les mesures réalisées à la station de Troyes/Barberey
Projet 2
Les plantes et les COV
Les plantes permettent-elles de purifier l'air ambiant?
Projet 3
Réchauffement climatique et pression
Avec le réchauffement climatique, la pression atmosphérique a-t-elle évoluée?
Projet 4
...