User Tools

Site Tools

Translations of this page?:

Action disabled: register
cs:co2

Snímač koncentrace CO2

Běžné měřící metody koncentrace plynů používají převážně dva principy buď elektrolytické měření v pevném elektrolytu. Takové senzory vypadají obvykle následovně:

A nebo optické NDIR měření. Zástupci těchto senzorů vypadají následovně:

Elektrochemické senzory mají výhodu, že jsou obvykle velmi levné a odolné. Jejich nevýhodou je poměrně velká energetická spotřeba, protože elektrolyt se musí neustále vyhřívat na pracovní teplotu. Jsou také poměrně nepřesné, protože v nich s časem dochází k chemickým změnám.

Oproti tomu optické senzory těmito problémy netrpí, ale zase jsou citlivé na čistotu měřeného plynu.

MH-Z19

V MLABu jsme se rozhodli vyzkoušet optický NDIR snímač MH-Z19. Jeho výstupem je digitální hodnota vyčítaná přes UART rozhraní. Senzor měří sám v 5s intervalech a jednou za 24 hodin se „autokalibruje“. Další podrobnosti a komunikační protokol jsou popsány v datasheetu MH-Z19B

 Snímač CO2 MH-Z19 připojený do MLABu

Pro základní vyčítání snímače lze ale využít následující Python skript:

#!/usr/bin/env python
# http://eleparts.co.kr/data/design/product_file/SENSOR/gas/MH-Z19_CO2%20Manual%20V2.pdf
import serial
import time

def mh_z19():
  ser = serial.Serial('/dev/ttyUSB1',
                      baudrate=9600,
                      bytesize=serial.EIGHTBITS,
                      parity=serial.PARITY_NONE,
                      stopbits=serial.STOPBITS_ONE,
                      timeout=1.0)
  #ser.write("\xff\x01\x99\x00\x00\x00\x07\xD0\x8F") # set measurement range to 0-2000ppm 
  time.sleep(1)
  while 1:
    result=ser.write("\xff\x01\x86\x00\x00\x00\x00\x00\x79")
    s=ser.read(9)
    if s[0] == "\xff" and s[1] == "\x86":     
        return {'co2': ord(s[2])*256 + ord(s[3]), 'temp': ord(s[4])-40 }
    break

if __name__ == '__main__':
    try:
        while True:
            value = mh_z19()
            print "CO2:", value["co2"], "ppm", "Temp:", value["temp"]
            time.sleep(6)
    except KeyboardInterrupt:
	    sys.exit(0)

Výstupem tohoto skriptu je naměřená koncentrace CO2 a teplota v jednotkách ppm a stupních Celsia. Příkladem je třeba následující výstup:

CO2: 859 ppm Temp: 20
CO2: 860 ppm Temp: 20
CO2: 860 ppm Temp: 20
CO2: 860 ppm Temp: 20
CO2: 860 ppm Temp: 20
CO2: 860 ppm Temp: 20
CO2: 860 ppm Temp: 20
CO2: 862 ppm Temp: 20
CO2: 863 ppm Temp: 20
CO2: 864 ppm Temp: 20
CO2: 864 ppm Temp: 20
CO2: 864 ppm Temp: 20
CO2: 864 ppm Temp: 20

Čidlo lze také vyčítat pomocí nástroje ESPEasy, což je programový balík založený na Arduinu a mikrokontroleru ESP8266. Výsledkem pak může být například takovýto graf:

Na grafu je vidět, že čidlo je velmi citlivé na závany vzduchu. V době měření grafu bylo v místnosti společně s čističkou vzduchu, která byla zapnutá přibližně od 15:30, jak ukazují hodnoty s velkým rozptylem. Umístěním čidla do obalu, který brání přímému průtoku vzduchu a umožňuje pouze difuzi, lze tomuto jevu předejít.

Pro tento projekt je dostupná profesionální podpora od firmy Universal Scientific Technologies s.r.o.

cs/co2.txt · Last modified: 2017/02/19 16:02 (external edit)