Nos machines dans nos ateliers tournent 24h sur 24 (oui on imprime à fond, on découpe à fond, et on soude à fond…) et nous nous posions la question de savoir si cela avait un impact sur la qualité de l’air que l’on respirait.
Plutôt que de le supposer, nous avons construit un petit détecteur pour le mesurer. Il tient dans un boîtier de 74 × 54 × 68 mm, s’alimente sur une prise USB et affiche en continu la concentration de particules fines.
Aujourd’hui, nous publions tout en open source : le code Arduino, les fichiers 3D du boîtier et le schéma de câblage. Si vous imprimez en 3D chez vous, vous pouvez le reproduire en un week-end, voir moins. Ah et il faudra peut-être vous munir d’une colle à pistolet à chaleur pour l’occasion.
Ce qu’il mesure, et ce qu’il ne mesure pas
Le détecteur mesure les particules en suspension dans l’air, de PM1 à PM10, en microgrammes par mètre cube (µg/m³). Le chiffre principal à l’écran est le PM2.5, celui qu’utilisent les indices de qualité de l’air.
Il repose sur le capteur Sensirion SPS30, un capteur laser de bonne qualité. Un petit ventilateur aspire l’air, et le capteur compte les particules qui traversent le faisceau.
Deux limites, pour être clair dès le départ :
- Les particules ultrafines. Une imprimante FDM émet surtout des particules de 10 à 100 nanomètres. Le SPS30 ne les voit qu’à partir d’environ 0,3 µm. Il donne donc une tendance fiable, pas une mesure complète des émissions.
- Les gaz. Les composés organiques volatils (COV) émis par les filaments ne sont pas mesurés. C’est pourtant ce que le filtre à charbon est censé capter. Nous y reviendrons dans la suite du projet.
Le matériel
Tout se trouve facilement en ligne. Le seul composant un peu spécifique est le capteur SPS30.
|
Composant |
Rôle |
À savoir |
|---|---|---|
|
Arduino Nano (ATmega328P) |
Lit le capteur et pilote l’écran |
Un clone avec puce USB CH340 convient |
|
Sensirion SPS30 |
Mesure les particules PM1 à PM10 |
Alimentation 5 V, liaison I2C |
|
Écran OLED 0,96″ SSD1306 I2C |
Affiche les mesures |
128 × 64 pixels, 4 broches |
|
Câble du SPS30 + fils Dupont femelle |
Raccordements |
Aucune soudure nécessaire |
|
Condensateur 100 µF (conseillé) mais on en a pas utilisé, donc optionnel si vous avez des soucis de lecture, cela peut aider. |
Stabilise le 5 V au démarrage du ventilateur |
Entre 5V et GND, près du capteur |
|
Câble USB + chargeur 5 V 1 A |
Alimentation permanente |
Un chargeur de téléphone suffit |
|
75 g de filament PETG au plus |
Le boîtier |
PETG conseillé pour les clips |
Le câblage
Le capteur et l’écran partagent le même bus I2C. Les deux se branchent donc sur les mêmes broches du Nano : A4 pour les données (SDA), A5 pour l’horloge (SCL).
|
Broche du Nano |
SPS30 |
Écran OLED |
|---|---|---|
|
5V |
Broche 1 (VDD) |
VCC |
|
A4 |
Broche 2 (SDA) |
SDA |
|
A5 |
Broche 3 (SCL) |
SCL |
|
GND |
Broche 4 (SEL) et broche 5 (GND) |
GND |
Trois pièges nous ont coûté du temps. Les voici pour que vous les évitiez :
- Sur le câble du SPS30, le fil noir n’est pas la masse. Il correspond souvent à la broche 1, c’est-à-dire le +5 V. Repérez toujours les broches par leur numéro, jamais par la couleur.
- La broche SEL du SPS30 doit aller à la masse. Sinon le capteur démarre en mode série (UART) et le Nano ne le trouve pas sur le bus I2C.
- L’ordre des broches de l’écran varie selon les modèles. Certains sont marqués GND · VCC · SCL · SDA, d’autres VCC · GND · SCL · SDA. Lisez le marquage. Un écran alimenté à l’envers chauffe très fort et reste noir : débranchez immédiatement.
Pour vérifier le câblage avant tout, nous fournissons un petit programme de diagnostic. Il doit trouver l’écran à l’adresse 0x3C et le SPS30 à l’adresse 0x69.
Le code Arduino
Le programme lit une mesure par seconde et l’affiche à l’écran. Il tient largement dans le Nano : 13 % de la mémoire programme.
Il s’appuie sur deux bibliothèques, à installer depuis le gestionnaire de l’IDE Arduino :
- sensirion-sps, la bibliothèque officielle de Sensirion. Attention : la recherche « SPS30 » propose plusieurs bibliothèques aux noms proches qui ne conviennent pas.
- U8g2, pour l’écran.
Deux réglages font la différence et sont déjà dans le code :
- Le bus I2C est limité à 100 kHz. La bibliothèque de l’écran monte à 400 kHz par défaut, ce que le SPS30 ne supporte pas.
- L’écran fonctionne en mode page. Il n’utilise que 128 octets de mémoire vive au lieu de 1 Ko, ce qui est indispensable sur les 2 Ko du Nano.
À l’écran, le PM2.5 s’affiche en grand avec un niveau : BON en dessous de 12 µg/m³, MOYEN jusqu’à 35, MEDIOCRE jusqu’à 55, puis MAUVAIS. Ces seuils s’inspirent de l’indice américain AQI. Les valeurs PM1, PM4 et PM10 figurent en petit dessous. Les 30 premières secondes servent à laisser le ventilateur se stabiliser.
Les mesures partent aussi sur le port série. Le traceur série de l’IDE Arduino les affiche en courbes, ce qui est pratique pour suivre une impression.
Sur Mac, si le téléversement échoue avec une erreur de vitesse du port, installez le pilote CH340 du fabricant WCH : c’est un problème courant avec les clones de Nano.
Le boîtier imprimé en 3D
Le boîtier se compose de deux pièces, une base et un couvercle, et s’imprime sans supports. Tout se monte sans vis ni colle.
- L’écran se glisse par le haut dans deux glissières, verre contre la fenêtre de la façade.
- Le SPS30 est debout au fond, ouvertures vers le bas, comme le recommande Sensirion. Il repose au-dessus d’une petite chambre fermée qui ne prend l’air que par des fentes à l’arrière et sur le côté. Il aspire ainsi l’air de la pièce, et non l’air tiède de l’intérieur du boîtier.
- Le Nano est posé sur deux poteaux et retenu par un crochet. Son port USB arrive face à une ouverture à l’arrière, pour brancher directement le câble d’alimentation.
- Le couvercle se clipse grâce à deux languettes souples sur les côtés. Une encoche à l’arrière permet de l’ouvrir avec l’ongle.
- La marque MANAORA est gravée sur 0,5 mm sous l’écran. Les lettres géométriques ont un trait de 0,6 mm, le plus fin qui reste net avec une buse de 0,4 mm.
Pour l’impression, nous utilisons des couches de 0,2 mm et 3 parois. Imprimez la base debout et le couvercle à plat, languettes vers le haut. Préférez le PETG au PLA : les languettes des clips restent souples au lieu de casser.
Le boîtier est généré par un script Python paramétrique. Toutes les cotes sont regroupées en haut du fichier : largeur de l’écran, position du Nano, épaisseur des parois, texte gravé. Vous pouvez donc l’adapter à vos propres modules, ou y graver votre nom.
Premiers résultats
Après 2 heures d’impression en PETG, imprimante en caisson dans la même pièce, le détecteur affichait 1,2 µg/m³ de PM2.5. Au tout premier allumage, avant l’impression, il indiquait 2,2 µg/m³.
C’est un air très propre. Pour comparer, la valeur guide annuelle de l’OMS est de 5 µg/m³. Le caisson retient donc bien les particules que le SPS30 peut détecter.
Ce résultat a ses limites. Le PETG émet moins qu’un ABS ou un ASA, et les particules ultrafines comme les gaz restent hors de portée du capteur.
Si vous refaites l’expérience, voici le test le plus parlant : posez le détecteur à 20 ou 30 cm du caisson et ouvrez la porte à la fin d’une impression. Si le chiffre grimpe puis redescend, l’intérieur était chargé et le caisson faisait son travail. Notez le pic et le temps de retour à la normale : vous saurez combien de temps attendre avant d’ouvrir.
Les fichiers, en libre accès
Tout le projet est disponible ici : manaora-detecteur-air
|
Fichier |
Contenu |
|---|---|
|
|
Diagnostic du câblage : liste les modules trouvés sur le bus I2C |
|
|
Le programme du détecteur |
|
|
La base du boîtier, prête à imprimer |
|
|
Le couvercle à clips |
|
|
Le script paramétrique qui génère les deux STL |
Le code est publié sous licence MIT. Les fichiers 3D sont sous licence Creative Commons CC BY-SA 4.0 : vous pouvez les modifier et les partager, en citant Manaora et en gardant la même licence.
Si vous construisez le vôtre, montrez-nous le résultat. Une amélioration, une erreur repérée, une variante du boîtier : toutes les contributions sont les bienvenues.
La suite
Prochaine étape : mesurer les gaz. Nous allons ajouter un capteur Sensirion SGP41, qui donne un indice de COV et se branche sur le même bus I2C. À plus long terme, le module Sensirion SEN55 réunira particules, COV, température et humidité en un seul boîtier.
Une idée nous tente aussi : deux détecteurs, l’un dans la pièce et l’autre qui prélève l’air du caisson. La différence entre les deux mesurerait directement l’efficacité du filtre.
Nous publierons ces évolutions ici, avec leurs fichiers.
Sources
- Sensirion/arduino-sps, bibliothèque Arduino du SPS30
- Sensirion, Mechanical Design and Assembly Guidelines for SPS30
- IQAir, les nouvelles lignes directrices de l’OMS sur la qualité de l’air (2021)


