L'Ensemble des fichiers :
Dans le zip ci-joint, sont rangés tous les fichiers qui m'ont servi pour réaliser l'Ananlyseur d'air, sous 3 répertoires : Electronique, Programme et Pièces plastiques .
Air analyzer (616.85 Ko)
Le Schéma :

En commençant par l'alimentation, en bas à droite, un module de charge régulé (TP4056) nous fournis les 3,7 volts qui peuvent venir d'une prise USB ou de la batterie connectée aux bornes J1-1 et J1-2 ... Ce petit circuit régulateur présente l'avantage de gérer la protection de l'accus en charge/décharge . Un interrupteur ferme le circuit pour mettre en service le montage.
Le microcontrôleur qui s'occupe de tout est un ATMega328 P, qui est cadencé par un quartz extérieur à 16 MHz (Q1) et tiré par deux condensateurs d'environ 18pF (C1-C2). Une résistance de 15K (R3) assure le maintient du "reset" (PC5) au niveau logique haut pour ne pas bloquer le process . Sur les entrées/sorties, deux sont utilisées en tout ou rien : la (PC3), bien qu'elle puisse être analogique, on la digitalise avec un 'Pull-Up' déclaré dans le programme pour analyser l'état du bouton. Ce poussoir permet de réveiller l'afficheur 5", pour voir les résultats de la dernière mesure, car comme dit plus haut, pour limiter la pollution visuelle et économiser la batterie, je réduis sensiblement le rétro-éclairage dont sa sortie est sur le port PD5; c'est une broche utilisable en PWM (Modulation de Largeur d'Impulsion ) qui va passer la valeur 7 / 255 au repos et 255/255 pour un éclairage total. Une résistance de 56 Ohms (R1), limite le courant dans les leds de back light et la charge sur le port de commande .
Deux bus 'série' sont émulés sur ce micro: un, en mode I2C, pour le dialogue avec le capteur SGP30 pour l'envoi de request cyclique (adresse 0x58) et un retour de datas (SDA) pour l'interprétation de la mesure, cadencé et synchronisé par la SCL (sérial clock) . L'autre émulation est en mode SPI pour causer à l'afficheur: pas de bi-directionalité, on lui dit qu'il est solicité grâce à une validation (CS) , si c'est une instruction ou un caractère avec la pin A0 et l'envoi des datas MOSI-SDA, synchronisées par SCK. Pas d'affolement pour faire tout ça, des bibliothèques toutes faites s'en chargent à merveille. Merci l'Open Source, on ne refait pas le monde tout les jours.
Le Circuit Imprimé:

Le circuit imprimé est réalisé avec les moyens habituels décrit sur mon site Du simple face, avec un seul strap, sur lequel les composants sensibles sont montés sur support tulipe ou connecteur afin de pouvoir les extraire pour la programmation (microcontrôleur) ou permettre un accès à ceux qui sont soudés dessous l'écran TFT . Du simple, facile et pas cher, pour permettre la fabrication avec les logiciels limités sans que l'amateur n'ait a payer des licences abusives pour des réalisations ocasionnelles (Grrr... Autodesk à tué Eagle cadsoft ).
Le Logiciel:
Développé avec l'IDE Arduino pour sa simplicité d'exploitation, le programme est ensuite compilé pour sortir un fichier hex, accepté par tous programmateurs d'Eprom digne de ce nom ... Pour ma part, j'utilise un Dataman 40 Pro qui n'a aucune difficulté à graver les ATMéga328. Il faut juste bien paramétrer les flags du type de l'horloge, des fusibles de configuration, de la validation SPI...
Le programme est comme d'habitude, dans le fichier zip ci-dessous. Il commence par les déclarations des bibliothèques dont la library du SGP30 élaborée par SpaekFun
#include "SparkFun_SGP30_Arduino_Library.h" // Bibliothèque du détecteur
La cartographie: le raccordement du bus SPI aux pattes du circuit
#define TFT_PIN_CS 6 // Pin Chip select CS
#define TFT_PIN_DC 9 // Pin A0
#define TFT_PIN_RST 8 // Reset-Pin
Le Setup et l'écriture de l'écran d'accueil
//Ecriture dde la page d'accueil
tft.fillScreen(ST7735_BLACK); // effacement afficheur
tft.setTextSize(1);// Réglage de la taille des caracteres
tft.setTextColor(ST7735_GREEN);// Reglage couleur de text
tft.setCursor(20,4);// Position du texte
tft.print("https://amazing-");// Ecriture du texte première ligne
tft.setCursor(20,15);// Position du nouveau texte seconde ligne
tft.print("vacuum-tubes.com");// Ecriture du texte seconde ligne
delay(2000);
}
La boucle, avec les intervalles de mesure, les mesures et leurs affichages sous différentes couleurs suivant la teneur, l'allumage de l'écran cycliquement ou si appui sur le bouton et saut au sous-programme de blocage, si une des valeurs dépasse le seuil autorisé .
// Blocage de l'afficheur allumé sur les valeurs dangereuses
if (( mySensor.CO2 > 1000) or (mySensor.TVOC > 1000)) {
analogWrite(led, 255); // Retro-eclarage
lightOn();
}
Le sous-programme de verrouillage et de mémorisation tant que le reset (Power On Reset) n'est pas effectué
void lightOn() { // Demande d'aeration jusqu'a POR
analogWrite(led, 255); // Retro-eclarage allumé
delay (5000);
lightOn(); // et on boucle jusqu'à coupure du courant
}
La Mise en Boîte :
Le boîtier, composé de 3 pièces, un fond, un cache écran, et la partie contenante, est réalisé à l'imprimante 3D . Les parallélépipèdes deviennent lassant, j'ai donc donné une forme autre pour envelopper le circuit, la batterie, le bouton poussoir, sachant que le marche/arrêt est sur la face arrière. Une grille est crée au niveau de la sonde pour laisser l'air circuler; un trou de bonne dimension, vers la prise USB pour la recharge, assure également la convection d'air vers le détecteur. L'écran s'ajuste dans deux épaulements pour le blocage de l'ensemble du circuit en translation et la réalisation de deux bossages pour recevoir des vis parker assez longues pour assembler les deux parties, avec une mousse de faible densité pour plaquer le montage dans son emplacement . Un cache misère vient entourer l'écran pour limiter la zone visible à l'affichage .

Courage, c'est bientôt fini ! Donc encore un petit outil qui va nous dire si une aération de la pièce s'impose, tant par la saturation en gaz carbonique, ou si l'air est encore respirable après le vernissage du parquet, ou encore l'abus de spray déodorant dans la salle d'eau ... Je me suis servi des recommandations de l'ANSES pour déterminer les seuils d'acceptabilité de la qualité de l'air . J'ai eu quelques surprises en utilisant un spray dépoussiérant en local fermé ... Pour conclure, l'air de la campagne, même s'il sent un peu le fumier, est moins toxique que les mèches déodorantes, plongeantes dans ce beau liquide vert fluo, qui agresse le nez par une suspension de microgouttes dans l'air inspiré !