Pomiar jakości powietrza, zawartości niebezpiecznych gazów: Bosch BME680, AMS CCS811 – IAQ, TVOC, ECO2

Pomiar jakości powietrza, zawartości niebezpiecznych gazów: Bosch BME680, AMS CCS811 – IAQ, TVOC, ECO2

Mierzenie podstawowych danych środowiskowych w naszym mieszkaniu – temperatury oraz wilgotności to jedno z najpopularniejszych zastosowań powszechnie dostępnych czujników dla Raspberry Pi (RPi), Orange Pi (OPi) czy ESP8266. Kolejnym krokiem było dodanie pomiarów SMOGu, dziś zajmiemy się dwoma nowymi i bardzo ciekawymi czujnikami jakości powietrza.
20171126_232252-1380x770
UWAGA: Pamiętajmy o podstawach bezpieczeństwa pracy z substancjami niebezpiecznymi – są nie tylko trujące w odpowiednich stężeniach, ale także łatwopalne!

Czujnik Bosh BME680

Czujnik gazów – lotnych związków organicznych „volatile organic compounds” czyli na przykład (za Wikipedią):

Mimo, że czujnik nie jest nowy – w chwili pisania artykułu – oprócz Adafriut czy Nettigo – nie ma zbyt wielu implementacji dla entuzjastów DIY.

Wersję Nettigo, którą testuję, jest jednocześnie zgodnym z wyprowadzeniami popularanej wersji opartej na ESP8266 – Wemos D1 mini oraz pro. Jednocześnie jak zauważa Nettigo – instalowanie czujnika bezpośrednio nad ESP8266 może fałszować wyniki dczytu temperatury -ponieważ BME680 zawiera w sobie znane z BME280 czujniki temperatury, wilgotności i ciśnienia.

Czego będziemy potrzebować dla BME680?

Hardware:

Podłączenie

bme680_back
Zaczynamy od modyfikacji czujnika – jeśli zakupiliśmy w Nettigo – zmiany domyślnego adresu poprzez zwarcie odpowiednio oznaczonych pól lutowniczych.
i2c_bme680_solder_pads
Upewniamy się, że nasze RPi z raspbianem ma włączoną szynę I²C:

sudo raspi-config          

W sekcji Advanced, włączamy I²C i uruchamiamy ponownie RPi.
Następnie podłączamy według bardzo prostego schematu:

  • D1 BME680 do SCL RPi
  • D2 BME680 do SDA RPi
  • GND BME620 do GND RPi
  • 3,3V BME620 do 3,3V RPi

Instalujemy bibliotekę z: https://github.com/pimoroni/bme680:

mkdir -p BME680          
cd BME680          
curl https://get.pimoroni.com/bme680 | bash

Następnie przechodzimy do katalogu examples i uruchamiamy przykłady:

cd examples          
python indoor-air-quality.py          

Po około 5 minutach powinniśmy dostać informację o jakości powietrza w % – odsyłam do definicji IAQ (jęz. angielski)
BME680_izopropyl
W celu sprawdzenia można zbliżyć chusteczkę nasyconą alkoholem izopropylowym, marek (np: permanent) – który zawiera lotne związki przypominające tolouen czy też aceton i zaobserwować szybkość wykrycia oraz powrotu do stanu poprzedniego czujnika.
Odczyt możemy przerwać poprz CTRL+C, a następnie wypróbować pozostałe przykłady: read-all.py oraz temp-press-hum.py.
Pracuję obecnie nad wyświetlaczem podstawowych danych jakości powietrza w domu.

Czujnik AMS CCS811

css_tvoc_closeup
CCS811 podobnie jak Bosch BME680 posiada możliwość pomiaru VOC (całkowitej liczby VOC – TVOC) oraz równowartość obliczoną dwutlenku węgla (eCO2). Jest więc bardzo dobrym uzupełnieniem poprzedniejgo czujnika i pozwala na weryfiowanie wykrywania VOC. Pracuje na tej samej magistrali I²C i można go podłaczyć równolegle z poprzednim czujnikiem do RPi, jednak ze względu na jego zużycie około 60mW – należy wtedy doprowadzić zewnętrzne zasilanie 3,3V z odpowiednią wydajnością prądową.

Czego będziemy potrzebować dla CCS811 ?

Hardware:

  • czujnik CCS811
  • Raspberry Pi (dowolne, ze sprawną szyną I²C)

    Software:

  • Biblioteka: https://learn.adafruit.com/adafruit-ccs811-air-quality-sensor/raspberry-pi-wiring-and-test

    Podłączenie

  • SCA CSS811 do SCA RPi
  • SCL CSS811 do SCL RPi
  • GND CSS811 do GND RPi
  • WAKE CSS811 do GND RPi
  • 3,3V CSS811 do 3,3V RPi
    ccs_tvoc_1
    Teraz musimy dokonać zmiany – bardzo spowolnić szynę I²C tak aby RPi poprawnie pracowało z czujnikiem. Oznacza to, że równolegle podłączone urządzenie mogą mieć problem z działaniem:

    sudo nano /boot/config.txt

Na końcu pliku dodajemy linię:

dtparam=i2c_baudrate=10000          

Uruchmiamy ponownie RPi, po ponownym uruchomieniu należy sprawdzić czy pod adresem 5a widzimy nasz czujnik:

sudo i2cdetect -y 1

Jeśli czujnik nie został wykryty – musimy sprawdzić czy na pewno podaliśmy odpowiedni baudrate dla szyny I2C i uruchomiliśmy ponownie RPi.
Gdy już zobaczymy „5a”, możemy przystąpić do instalacji:

sudo apt update          
sudo apt install git build-essential python-pip python-dev python-smbus          
git clone https://github.com/adafruit/Adafruit_Python_GPIO.git          
cd Adafruit_Python_GPIO          
sudo python setup.py install          

Po zainstalowaniu odpowiednich bibliotek oraz obsługi GPIO dla Pythona, pobieramy i instalujemy – bibliotekę dla czujnika CSS811:

sudo pip install Adafruit_CCS811          

Pozostaje zainstalować program demonstracyjny, który odczyta dane z czujnika. Zalecane jest uruchmienie go na co najmniej 24 godziny aby dosłownie dotarł (wypalił) się, ponieważ na początku będzie pokazywał zawyżone wartości. Możemy go oczywiście delikatnie traktować gazami, przy czym nie polecam tryskania bezpośrednio w czujnik alkoholem izopropylowym – lepszy będzie wacik. Instalujemy:

cd ~/          
git clone https://github.com/adafruit/Adafruit_CCS811_python.git          
cd Adafruit_CCS811_python/examples          
sudo python CCS811_example.py    

W odpowiedzi powinniśmy otrzymać:
ccs811
W przypadku markera wynik wygląda następująco:
ccs_811_normal
Przykłady w pythonie są bardzo przyjazne i bez większego problemu możemy przekazać wyniki z czujników do np: domoticza czy InfluxDB – tak jak w poprzednim przykładzie.

A już niedługo:
25394772_10214396010315824_148065501832964396_o

To wszystko!

Previous Post Next Post