Avant de s’engager dans l’écriture des nombreuses lignes en langage C++ qui vont aboutir au programme d’exploitation d’un projet quel qu’il soit, il faut absolument consacrer du temps pour déterminer relativement finement ce que l’on désire exactement. En particulier bien réfléchir à l’interface Homme/Machine. De cette étude primordiale va dépendre immédiatement la liste du matériel indispensable et surtout commencer à s’assurer de la faisabilité. Dans ce didacticiel le matériel a été décrit et vérifié, mais au départ j’avais effectué l’étude initiale. Du reste plusieurs options sont possibles sans remettre en cause ce qui précède. Par exemple on peut envisager en Fig.26 deux variantes qui vont influencer l’esthétique de la façade du petit boitier ainsi que l’agrément d’utilisation de l’appareil. Sur celle repérée A la colonne concernée par l’affichage est repérée par une petite LED. Chaque colonne en est pourvue et sera facilement identifiable. En B c’est la LED triple qui par sa couleur précisera la colonne pour lire les valeurs. Personnellement je crois que la variante A est plus conviviale. Esthétiquement j’aime assez la représentation en « thermomètre ». La proposition B est légèrement plus compacte. On peut varier à l’infini. Par exemple rien n’interdit pour la version A de remplacer les LEDs blanches par des colorées etc. Bref, il faut prendre une décision. Comme sur la platine d’essai est présente une LED triple, je vais m’en tenir à la version B. Ceci étant précisé, si l’on préfère la variante A, le logiciel reste inchangé, c’est uniquement le circuit imprimé et la réalisation pratique qui seront différente.
REMARQUE : On constate immédiatement sur les deux variantes que les plages de valeurs commencent à des seuils pas forcément nuls. C’est un choix « arbitraire » dans le but d’étaler au maximum les plages utiles. Par exemple il sera rare que le taux d’humidité descende en dessous de 30%. Quand aux températures négatives, il est peu probable que l’on sorte l’appareil à l’extérieur quand il fait froid. Aussi, pour avoir des déviations « notables » sur la rampe lumineuse, les butées logicielles ont été choisies « arbitrairement » comme précisées sur la Fig.26 ce qui du reste ne facilite pas forcément l’écriture du programme d’exploitation de cet appareil de mesure.
Le dialogue Homme/Machine.
Élémentaire dans notre cas car le seul élément de maitrise du dispositif se résume à un bouton poussoir. Sur un RESET, c’est la visualisation du CO2 qui sera affichée par défaut. Chaque clic sur le B.P. changera la nature de la valeur affichée en permutation circulaire. Le bruiteur génèrera un son relativement grave durant son activation. Si le taux de CO2 arrive à 600 un BIP plus aigüe d’une demi-seconde sera générée toutes les secondes dans le bruiteur. Enfin, à partir du seuil 1000 un son plus désagréable est produit à la même cadence, et les trois LEDs blanches clignotent. Si c’est la LED triple, le fait d’allumer simultanément les trois composantes donnent l’impression d’une couleur blanche. Noter que si un seuil critique en CO2 est détecté, c’est ce thème qui devient prioritaire à l’affichage sur la rampe de LEDs jusqu’au retour à « la normale ». Le scénario est écrit, il ne reste plus qu’à le traduire en instructions C++ pour concrétiser notre « cahier des charges ».
Écriture et vérification du programme d’exploitation.
Écrire le programme est une chose, le vérifier en est une autre. En effet, pour s’assurer que l’illumination de la rampe de LEDs est conforme aux valeurs affichées, il faut que les capteurs mesurent toutes les valeurs possibles des trois fourchettes envisagées. Si ça se trouve la combinatoire ne se présentera jamais de toute votre vie … et je vous le souhaite car une valeur de CO2 de 1500 rendra certainement la calibration du dispositif secondaire, il vaudra mieux chercher rapidement un lieu de survie ! Parmi les techniques de développement logiciel, la simulation des phénomènes que l’on désire mesurer relève de la banalité. La technique consiste à imposer par un moyen quelconque la valeur qui serait issue des capteurs par celle que désire le programmeur. Par exemple on peut utiliser une entrée analogique
branchée sur un potentiomètre et générer la plage de valeurs souhaitées. C’est facile et rapide, mais tester des valeurs de seuil avec précision n’est pas aisé. On peut alors communiquer de telle données numériques en dialogue série ce qui consomme des Octets. (Ce n’est pas grave car provisoire) C’est fastidieux, par contre on peut ainsi tester des valeurs très précises. Naturellement, nous allons expérimenter ces deux techniques. Commençons par la première en téléversant P05_Demonstrateur_A_pour_V1.ino qui impose comme représenté sur la Fig.27 de brancher un potentiomètre de 10kΩ sur la seule entré analogique A7 qui reste disponible. En principe la valeur mesurée quand la tension varie entre GND et +5V devrait varier entre zéro et 1023. Dans la pratique c’est rarement vrai. Aussi la première étape de la simulation consiste à déterminer la plage exacte de valeurs retournées par le CAN quand on balaye l’intégralité de l’angle de rotation du potentiomètre. C’est la raison pour laquelle dans la boucle de base on sollicite le Moniteur de l’IDE. Sur le montage de la Fig.27 les valeurs varient entre 2 et 1022. C’est donc cette plage qui sera prise en compte dans les explications qui vont suivre et dans le démonstrateur P05.

La translation des données de simulation.
Compte tenu de la plage de variation des données retournées par la mesure de Conversion Analogique Numérique de l’entrée A7, pour transposer les diverses échelles à afficher il faut respecter les correspondances résumées dans le tableau de la Fig.26 proposé ci-dessous. Pour effectuer ces conversions, la première idée qui titille l’esprit consiste à coder des « produits en croix », car ce n’est pas bien compliqué. Toutefois, le langage C++ met à notre disposition la fonction map spécifiquement prévue à cet effet et son écriture est particulièrement « visuelle ». Cette fonction retourne une valeur qui sera soit un int, soit un long ce qui nous arrange bien car nos échelles de représentation sont par « usage » des entiers. L’instruction sera de la forme Transposée = map (CAN_sur_An, Plage d’entrée, Plage de sortie) avec la variable entière Transposée qui reçoit la valeur. Pour la conversion du CO2 par exemple la ligne de transposition des valeurs sera codée :

Translation des données à gogo.
Cette fonction map est tellement commode, que nous allons nous en servir à outrance. Pour explorer cette piste, on commence par téléverser P05_Demonstrateur_A_pour_V1.ino, et surtout, avant on commence par tourner le bouton du potentiomètre pour qu’il délivre une tension proche de zéro, c’est à dire GND. (Pour éviter que le bruiteur hurle de rage dès le RESET.) Puis, on active le moniteur en vérifiant le 115200 baud en 4 et le Défilement automatique en 5. On obtient une copie d’écran analogue à celle de la Fig.29 dans laquelle en 1 est indiqué le Theme qui est l’identificateur dans le programme du type de donnée affichée :
Theme = 1 : CO2.
Theme = 2 : Température.
Theme = 3 : Hygrométrie.
Chaque fois que le B.P. sera activé on entendra une tonalité grave et la nature des données sera permutée. Pour commencer, imposez la température à l’affichage : La LED triple éclaire alors en rouge. Dans tous les cas, c’est la plage de valeurs retournée par le CAN qui sera indiquée en 2 et en 3 la valeur qui en résulte en fonction du thème imposé et de la transposition par map. Tournez le potentiomètre sur toute sa plage de rotation et notez les deux « bornes » minimale et maximale.
Compte tenu des valeurs extrêmes obtenues en 2 il faut modifier les paramètres concernés dans les deux procédures repérées par des remarques //@@@@@@@@@@@@@. Sur la Fig.30 en A on retrouve directement le tableau de la Fig.28 et durant la rotation la rampe lumineuse varie entre la LED bleue du bas et la rouge du haut. Il peut arriver que cette dernière clignote rapidement. La température TMP affichée en 3 de la Fig.29 varie entre 0 et 35 comme prévu. Cliquer une fois de plus sur le B.P. pour que la LED tricolore s’illumine en vert. Puis faire varier la valeur simulée. Le pourcentage sur HYD

varie bien entre 0 et 100%, mais cette fois la LED bleue du bas ne commence à s’illuminer que pour HYD dépassant 30%. Cette valeur définie en D correspond à un seuil de CAN de 309. C’est l’artifice employé pour « étaler » l’échelle d’humidité sachant qu’un taux inférieur à 30% reste peu probable. Pour la température en C l’échelle de la Transposition est inchangée, puisque la LED du bas correspondra à zéro. Notez que pour allumer les LEDs de la rampe d’affichage, on passe à la procédure Allumer_la_rampe_lumineuse(byte Nb_LEDs) le nombre de diodes électroluminescentes à activer en paramètre. Si le paramètre Nb_LEDs vaut zéro, la rampe sera entièrement éteinte. Enfin en B de la Fig.30 on observe que la butée basse n’est pas zéro mais 100. C’est pour s’assurer que la LED bleue du bas de la rampe ne s’illumine qu’à partir d’un seuil de cette valeur, toujours pour étaler la plage affichée, sachant qu’un seuil inférieur reste très peu envisageable.

Durant toutes ces manipulations, vérifier que le nombre de LEDs allumées sur la rampe lumineuse correspond exactement aux divers seuils définis sur les dessins de la Fig.26 donnée en P15 y compris pour l’expérimentation du chapitre suivant affichant le taux de CO2.
Les alertes sonores et visuelles.
Commencer par ramener la valeur HYD vers zéro puis un petit clic sur le BP pour faire afficher le taux de gaz carbonique, la LED triple s’illuminant alors en bleu. Pour CO2 = 0 la rampe lumineuse est entièrement éteinte. La LED bleue du bas ne commence à éclairer que lorsque la valeur arrive à 100 comme prévu dans le « cahier des charges ». Sa voisine du dessus n’éclaire qu’à partir de 300 conformément aux précisions. Augmenter lentement la tension potentiométrique. À partir de 600 le bruiteur s’active par des BIPs très « présents ». Tenter de changer de fonction affichée avec le B.P. reste sans effet, car le dépassement du seuil rend l’affichage du CO2 prioritaire et la LED reste bleue. La pollution augmente, pousser lentement jusqu’à 1000 la valeur à partir de laquelle on commence à ressentir une somnolence générale, avoir mal de tête et percevoir des odeurs désagréables. La LED triple s’illumine en « blanc », les BIPs sonores sont franchement désagréables et le B.P. reste inerte. Remarquez qu’à partir du moment où une alerte se déclenche, le bouton poussoir n’est pris en compte qu’avec un délai d’environ une seconde correspondant à la durée des BIPs. Ce n’est que lorsque le taux de CO2 redescend en dessous de 600 que le B.P. redevient actif.
La suite est ici.