HA-Mesure de la qualité de l’air CO2 et PM2.5

Soucieux de la qualité de l’air que nous respirons au quotidien et de mon environnement, je me suis construit une petite centrale de mesure équipée de deux capteurs, l’un mesurant le CO2 et l’autre la concentration en particules PM2.5.

Bien évidemment, cette centrale doit communiquer avec HA. Je me suis tourné naturellement vers ESP HOME et j’ai sélectionné deux capteurs dans la catégorie Air Quality pour leur faible coup et la facilité de mise en oeuvre plus un Wemos d1-mini amplement suffisant pour interfacer le tout.

Le capteur Co2 est un MH-Z19B, il mesure la teneur de CO2 sur une échelle de à 10000 ppm et communique en UART.

Le capteur Pm2.5 est un pm1006, il mesure la concentration de particules de taille inférieure à 2,5 µm en µg/m3. c’est celui qui équipe le boitier de mesure de qualité de l’air Vindriktning commercialisé par IKEA. Pour moins de 10€ vous avez un joli petit boitier, alimenté par un connecteur USB-C (cable et chargeur non fourni), avec en face avant un jeu de led vous indiquant le taux de concentration:

  • Vert: PM2.5 inférieur à 35 µg/m3 = bonne qualité de l’air.
  • Orange: PM2.5 entre 36 et 85 µg/m3 = moyenne qualité de l’air.
  • Rouge: PM2.5 supérieur à 85 µg/m3 = mauvaise qualité de l’air.
  • Led clignotantes, démarrage en cours.

Le pm1006 communique en UART dans une plage de mesure de 0 à 1000 µg/m3.

Les deux capteurs sont connectés au Wemos D1 mini et le tout intégré dans le boitier. La connection est simple, il faut sortir le fer à souder et relier directement sur le circuit imprimé du Vindriktning, le Wemos et les capteurs suivant le mapping ci-après (utiliser du fil fin si possible et un fer 30w):

  • Sur le MH-Z19:
    • MH-Z19 <–> Wemos
    • TX RX
    • RX TX
    • GND GND
    • VCC (+5v) VCC
  • Sur le pm1006
    • carte PCB <–> Wemos
    • GND GND
    • VCC (+5v) VCC
    • REST D2

Le boitier est petit, l’intégration se fait au chausse pied:

Le capteur de co2 et le wemos sont fixés avec du double face. Il faut faire attention à perturber le moins possible le flux d’air.

Le pm1006 est équipé d’un mini ventilateur qui se déclenche lors de la lecture (soit toutes les 20 secondes) il est peu bruyant, cependant vous pouvez réduire sa vitesse et son émission sonore en branchant son fil rouge sur 3.3 v du wemos, il continuera de démarrer et s’arrêter au rythme des lectures mais sera moins bruyant, en effet selon le schéma ci-après le ventilateur est piloté par la polarité 0V via un transistor.

Programme ESP

https://esphome.io/components/sensor/pm1006.html

Tres simple, la particularité est qu’il faut déclarer deux UART, uart_a et uart_b dans mon cas et les assigner aux sensors.

Comme nous ne maîtrisons pas intervalle de lecture du pm1006 (environ une dizaine de secondes), j’ai filtré sa lecture afin de lisser ses relevés, je moyenne sur 50 relevés et expulse la valeur tous les 10 relevés, la première valeur est expulsée à la dixième mesure.

  • window_size ( Facultatif , entier): Le nombre de valeurs sur lesquelles sera effectuée une moyenne lors de la diffusion d’une valeur.
  • send_every ( Facultatif , entier) : à quelle fréquence une valeur de capteur doit être expulsée. 
  • send_first_at ( Facultatif , entier) : par défaut, la toute première valeur brute au démarrage est immédiatement publiée. Avec ce paramètre, vous pouvez spécifier quand la toute première valeur doit être envoyée. La valeur par défaut est 1.

La valeur de CO2 est lue toutes les deux minutes.

esphome:
  name: esp131-qualite-air-int
  platform: ESP8266
  board: d1_mini

  
wifi:
  networks:
    - ssid: !secret wifi
      password: !secret mdpwifi

  reboot_timeout: 5min
  fast_connect: true
    
  manual_ip:
    static_ip: 192.168.0.131
    gateway: 192.168.0.1
    subnet: 255.255.255.0

# Enable logging
logger:
  baud_rate: 0

api:

ota:

web_server:
  port: 80

uart:
- id: uart_a
  rx_pin: D2
  baud_rate: 9600
  
- id: uart_b
  rx_pin: GPIO3
  tx_pin: GPIO1
  baud_rate: 9600


#Etat de la connection
binary_sensor:
  - platform: status
    name: "esp131_Status"

switch:    
  - platform: restart
    name: "ESP131_Restart"
        
sensor:
  - platform: wifi_signal
    name: "ESP131 WiFi Signal Sensor"
    update_interval: 60s

  - platform: pm1006
    uart_id: uart_a
    pm_2_5:
      name: "Concentration Particules 2.5µm"
      accuracy_decimals: 2
      filters:
        - sliding_window_moving_average:
            window_size: 50
            send_every: 10 
            send_first_at: 10
            
  - platform: mhz19
    uart_id: uart_b
    co2:
      name: "MH-Z19 CO2 Value"
    temperature:
      name: "MH-Z19 Temperature"
    update_interval: 120s
    automatic_baseline_calibration: false    

Vous trouverez ci après un schéma créé par un membre de https://community.home-assistant.io/t/ikea-vindriktning-air-quality-sensor/324599/130, vous y trouverez bon nombre d’informations dans lesquelles j’ai pioché.

PANEL

Je visualise sous forme de courbes avec mini-graph-card (j’aime bien), un jeu de couleurs surligne les différents seuils.

type: custom:mini-graph-card
color_thresholds:
  - color: '#00FF00'
    value: 0
  - color: '#FF9900'
    value: 20
  - color: '#EA9999'
    value: 30
  - color: '#CC0000'
    value: 100
color_thresholds_transition: hard
line_width: 2
icon: mdi:molecule
show:
  extrema: true
  fill: true
  icon: true
  labels: false
  name: true
  state: true
hour24: true
points_per_hour: 4
hours_to_show: 24
group: false
entities:
  - entity: sensor.concentration_particules_2_5um
    name: µg/m3
name: Concentration PM2.5
type: custom:mini-graph-card
color_thresholds:
  - color: '#00FF00'
    value: 0
  - color: '#FF9900'
    value: 400
  - color: '#EA9999'
    value: 800
  - color: '#CC0000'
    value: 1000
color_thresholds_transition: hard
line_width: 2
icon: mdi:molecule-co2
show:
  extrema: true
  fill: true
  icon: true
  labels: false
  name: true
  state: true
hour24: true
points_per_hour: 4
hours_to_show: 24
group: false
entities:
  - entity: sensor.mh_z19_co2_value
    name: CO2
name: Qualité de l'air

Mais aussi sous forme de gauges, c’est à votre convenance.

  - type: horizontal-stack
    cards:
      - type: gauge
        entity: sensor.mh_z19_co2_value
        min: 0
        max: 5000
        name: CO2
        severity:
          green: 0
          yellow: 400
          red: 800
        needle: true
        unit: ppm
      - type: gauge
        entity: sensor.concentration_particules_2_5um
        min: 0
        max: 120
        needle: true
        severity:
          green: 0
          yellow: 30
          red: 100
        name: Conc. Parti PM2.5
      - type: gauge
        entity: sensor.mh_z19_temperature
        min: 0
        max: 40
        needle: true
        severity:
          green: 0
          yellow: 23
          red: 30

Conclusion

Deux capteurs de qualité de l’air pour quelques dizaines d’euro, avec une mise en oeuvre accessible par tous, faut quand même maitriser un minimum la soudure à l’étain.

Je laisse vivre quelques temps, et j’envisage d’asservir la VMC de mon habitation au capteur de CO2.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.