Chaine d'information
Les données capturées par les capteurs vont suivre une chaine d'information au sein du système, qui a pour but de les collecter, de les analyser et de les traiter. À partir d'une information source, trois principales étapes, résumées sur la figure 1 constituent la chaine d'information :
- L'information source est d'abord acquise grâce à un capteur, qui va effectuer des mesures de la grandeur physique d'intérêt. Le capteur produit, comme résultat de ses mesures, un signal électrique de type logique, analogique ou numérique.
- Le signal produit par le capteur est ensuite traité, typiquement par un programme exécuté sur un microcontrôleur, dans le cadre de petits systèmes, voire sur un ordinateur plus puissant, doté d'un ou plusieurs microprocesseurs, pour de gros systèmes.
- Enfin, une fois le signal traité, vient une phase de communication du résultat du traitement. L'information peut, par exemple, être restituée sous forme d'une visualisation, après avoir été stockée dans une base de données. Un autre scénario possible est l'envoi d'une consigne vers un système, pour commander une action ou configurer des paramètres de ce dernier.
Acquérir des données du capteur
La première étape de la chaine de transmission consiste donc en l'acquisition de données à partir des différents capteurs choisis. Dans le cadre du système développé dans ce cours, trois capteurs ont été choisis et présentés dans le chapitre précédent. La température est mesurée à l'aide d'un LM35, l'humidité relative à l'aide d'un DHT11 et, enfin, le niveau sonore avec un module de détection sonore.
Pour choisir le capteur le plus adéquat, pour mesurer une grandeur physique donnée, plusieurs critères peuvent être pris en compte :
- Il faut évidemment d'abord vérifier que la plage de mesures du capteur couvre les valeurs qu'il faudra être capable de mesurer, dans le cadre du système développé.
- Ensuite, il faut s'intéresser aux éventuelles contraintes imposées par le projet, et s'assurer que les caractéristiques du capteur soient compatibles avec ces dernières. Il se peut, par exemple, qu'un certain niveau de précision, qu'une résolution minimale ou encore qu'un temps de réponse minimal soit imposé.
- On peut également prendre en compte les caractéristiques en lien avec la qualité du capteur, telles que sa fiabilité, sa fidélité ou encore sa gamme de températures d'utilisation. En fonction du système développé, un simple capteur pourrait suffire, ou alors il se peut qu'il faille monter en qualité.
- Enfin, il ne faut pas non plus négliger le prix du capteur, notamment par rapport au budget total prévu pour développer le système. Ce budget pourrait être plus faible dans le cadre d'un prototype et ensuite plus élevé dans le cadre d'une version plus avancée, une fois que la preuve de concept a été faite et validée.
On peut aussi s'intéresser au nombre de capteurs qui seront nécessaires pour le système à développer. Comme on l'a vu au chapitre précédent, certains capteurs peuvent mesurer plusieurs grandeurs physiques, comme le DHT11 qui mesure l'humidité relative et la température. N'avoir qu'un capteur au lieu de deux peut rendre plus faciles les traitements effectués dans la suite de la chaine d'information, pour autant que ses caractéristiques satisfont les demandes du projet, évidemment. Cette question particulière de la mesure de la température, avec le LM35 ou le DHT11 est abordée plus loin, à la section 2.3.
Enfin, il faut également s'assurer que les différents capteurs choisis sont compatibles entre eux, le plus possible en tout cas, notamment par rapport à leur type de signal de sortie et à leurs tensions d'alimentation possibles. Au plus il y aura de l'hétérogénéité, au plus la suite de la chaine d'information sera complexe à réaliser.
Traiter des données par l'Arduino
La deuxième étape de la chaine de transmission consiste donc à traiter les données qui proviennent des capteurs. Cette étape est typiquement réalisée par un programme exécuté sur une machine, que ce soit un simple microcontrôleur ou un ordinateur plus puissant composé d'un ou plusieurs microprocesseurs.
Le but de cette étape est de récupérer toutes les données provenant de plusieurs capteurs pour les traiter, et pour les analyser et prendre des décisions. Le traitement des données consiste en une interprétation des signaux électriques reçus des capteurs, selon leur type. Les données de type numérique vont souvent nécessiter plus de travail que les données logiques ou analogiques. On peut également, parfois, devoir transformer, interpréter ou vérifier les données reçues. Rappelez-vous, par exemple, du DHT11, vu à la section 1.3, qui envoie des trames de 40 bits contenant les valeurs mesurées de l'humidité relative et de la température (chacune sur 16 bits), ainsi qu'un code de 8 bits utilisé pour vérifier s'il y a eu des erreurs de transmission sur le bus 1-Wire. Le traitement des données provenant de ce capteur nécessitera beaucoup de travail.
Dans ce cours, on va travailler avec l'Arduino Uno, présentée sur la figure 2, une simple carte électronique open source sur laquelle se trouve un microcontrôleur ATmega328P d'architecture Atmel, autour duquel se trouvent toute une série d'autres composants, qui vont faciliter sa programmation et son interfaçage avec d'autres circuits extérieurs.
L'Arduino possède de nombreuses pins, lui permettant de communiquer avec d'autres circuits, notamment des capteurs. L'Arduino Uno possède précisément $14$ pins numériques et $6$ pins analogiques, toutes capables de fonctionner en entrée ou en sortie. D'autres versions de l'Arduino possèdent un plus grand nombre de pins. La tension de fonctionnement de ces $20$ pins est de 5 V, la même que celle de l'Arduino. On pourra donc aisément utiliser les trois capteurs que l'on a sélectionné pour le système de surveillance sonore développé dans ce cours.
Enfin, l'Arduino se programme très facilement grâce à l'environnement de développement intégré Arduino IDE et au langage de programmation Arduino, une version spécifique du langage C++, avec une librairie standard contenant des fonctions spécifiques à l'Arduino. Un programme Arduino, appelé sketch, est compilé puis chargé sur le microcontrôleur de l'Arduino pour y être exécuté. Un sketch se compose de trois parties, inspirées du langage de programmation Processing : (a) une partie en-tête, avec notamment des imports de librairies et des définitions de variables globales, (b) la fonction d'initialisation (setup
) exécutée une seule fois au lancement du sketch, (c) et, enfin, la fonction boucle principale (loop
) dont le contenu est exécuté en boucle, se répétant indéfiniment.
La figure 3 montre un exemple de sketch Arduino, qui fait clignoter une LED connectée à la pin numérique $7$, en produisant un signal électrique qui alterne entre un signal haut et un signal bas, en attendant une seconde entre les transitions :
- Dans l'en-tête du sketch, on définit simplement le mot
LED
comme étant équivalent à $7$, le numéro de la pin numérique sur laquelle la LED a été connectée. - Dans la fonction d'initialisation, on configure la pin~$7$ en mode sortie, à l'aide de la fonction
pinMode
, c'est-à-dire que le microcontrôleur de l'Arduino va pouvoir envoyer un signal vers le monde extérieur via cette pin, en l'occurrence alimenter ou non la LED avec une tension de 5 V. - Enfin, dans la fonction boucle principale, on va répéter indéfiniment quatre opérations : (a) envoyer un signal haut vers la pin~$7$ avec la fonction
digitalWrite
, appelée avecHIGH
comme second paramètre, (b) attendre 1000 ms, c'est-à-dire une seconde, (c) envoyer un signal bas vers la pin~$7$, de nouveau avecdigitalWrite
, mais appelée cette fois-ci avecLOW
comme second paramètre, (d) et, enfin, encore attendre 1000 ms.
Ce très simple exemple de sketch vous montre la facilité avec laquelle on peut programmer la carte électronique Arduino Uno.
Avec l'Arduino Uno, on va donc pouvoir, sans problèmes, collecter les données provenant du LM35, du DHT11 et du module de détection sonore, dans le cadre du système de surveillance du niveau sonore aux alentours d'un aéroport développé dans ce livre. On verra comment traiter les données envoyées par chacun des capteurs dans la section 2.2.
Communiquer des données vers l'extérieur
La dernière étape de la chaine de transmission est la communication des données qui ont été collectées, analysées et traitées. Elle peut prendre plusieurs formes, selon la communication qui est faite.
Une première possibilité de communication est l'envoi d'une consigne, ou d'un signal de commande, depuis la machine qui a traité les données du capteur vers une autre machine, un appareil, un moteur, etc. Par exemple, un thermostat mesure la température ambiante et la compare ensuite avec une température seuil configurée. Si la température mesurée est inférieure au seuil, le thermostat envoie un signal vers la chaudière pour la démarrer, pour chauffer la pièce.
La communication peut aussi simplement consister en l'envoi des données collectées vers une autre machine, plus puissante, qui va pouvoir faire des traitements plus avancés. Par exemple, un serveur dans le cloud peut stocker des données reçues et proposer une interface de visualisation de ces dernières, sous forme d'un dashboard. La figure 4 montre un exemple de dashboard qui présente des données d'inscriptions à un collège. Il a été généré sur le service cloud Visualize Free (disponible ici : https://www.visualizefree.com), qui permet de gratuitement réaliser des visualisations.