Surveiller la qualité de l’air avec du open hardware et du logiciel libre

Surveiller la qualité de l’air avec du open hardware et du logiciel libre

J’ai commencé un petit projet de mesure de la qualité de l’air intérieur, le tout en utilisant un maximum de open hardware et de logiciel libre. Pas de préoccupation particulière par rapport à la qualité de l’air chez moi, mais une curiosité qui peut déboucher sur des comportements utiles (l’aération du logement notamment).

Inspiré par les projets :

Me suis donc procuré quelques capteurs pour commencer à jouer avec arduino, micropython ou ESP8266:

J’ai branché l’ensemble sur une Arduino UNO (toujours la même qui me permet de prototyper en réutilisant essentiellement du code d’autres personnes).

1er montage avec le DHT11 (température et humidité) et le MQ135 (CO2)

1er montage avec le DHT11 (température et humidité) et le MQ135 (CO2)

2ème montage en ayant ajouté le détecteur de particules fines (avec les pinces crocodile et les allumettes pour tester!)

2ème montage en ayant ajouté le détecteur de particules fines Sharp GP2Y1010AU0F Optical Dust Sensor (avec les pinces crocodile et les allumettes pour tester!)

J’ai alors écrit (principalement copier/coller/modifié à la marge) un bout de code C++ pour arduino (merci git.framasoft.org pour l’hébergement du code) pour sortir du CSV sur le port série. Ce port série est ensuite lu par node-red qui permet de travailler les valeurs (pour l’instant juste débugger de temps en temps et limiter à 2 messages par minute), et on balance ensuite direct dans le nœud emoncms (qui génère un POST HTTP). Le tour est joué.

Screenshot from 2016-02-29 17-15-25

La sortie CSV ressemble à clef:valeur,clef2:valeur2,etc…  ce qui donne : humidity_percent:27.00,temperature_C:22.00,temperature_F:71.60,heat_index_C:20.96,heat_index_F:69.73,dust_raw_signal:152.00,dust_voltage:0.74,dust_density_ug_m3:26.17

Une fois arrivé dans emoncms (auto-hébergé chez moi, bien évidemment), je configure ces input pour qu’ils soient loggués. On peut ensuite construire des tableaux de bord à partir de ces enregistrements, un exemple ci-dessous :

Dashboard construit sur emoncms

Tableau de bord construit avec emoncms

Un peu insatisfait des manipulations et du graphisme dans emoncms, je me suis tourné vers graphite+grafana (que j’utilise au boulot). J’ai fait un petit script (très imparfait) qui reprend les données de emoncms et qui les injecte dans carbon+graphite (si vous le voulez, mettez moi un commentaire, je le mettrais au propre pour le publier). Je peux ensuite utiliser grafana pour faire de beau tableau de bords et post-traiter les données (par exemple lisage en utilisant des moyennes sur 5 minutes, dérivées, etc.). Notez que j’utilise aussi les valeurs collecté par la téléinfo et la mesure de la chaudière (cf précedent blog).

 

Dashboard construit sur Grafana

Tableau de bord construit avec Grafana

Reste encore beaucoup de boulot pour que ce soit utilisable, mais j’apprends plein de trucs et j’y vais progressivement.

Je doit avouer que le montage est toujours sur la breadboard (platine d’experimentation) depuis 2 mois, donc il va falloir que je mette le tout dans un boîtier (avec éventuellement un ventilo pour la détection de poussière).

Comme d’habitude, une petite liste de choses à faire par la suite :

  • effectuer le calibrage de CO2 et de poussière,
  • envoyer en simultané vers carbon pour ne pas avoir à jouer le script d’import,
  • construire des écrans de consultation utilisables,
  • trouver un moyen d’afficher ces données sur mes bureaux d’ordinateur (un widget gnome qui récupère une valeur en HTTP ?),
  • mettre l’électronique dans une boite,
  • brancher l’ESP8266 dessus pour la liaison wifi et rendre autonome le trucs (remplacer l’arduino?),
  • avoir des LED de feedback où je décide de mon propre algorithme (combinaison des mesure pour déterminer la qualité de l’air), suggérant ainsi qu’il faut aérer,
  • harmoniser les capteurs en utilisant partout du  node-red,
  • etc.

À suivre.

Afficher les commentaires Masquer les commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *