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.
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 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.
Zaczynamy od modyfikacji czujnika – jeśli zakupiliśmy w Nettigo – zmiany domyślnego adresu poprzez zwarcie odpowiednio oznaczonych pól lutowniczych.
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:
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)
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.
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ą.
3,3V CSS811 do 3,3V RPi
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ć:
W przypadku markera wynik wygląda następująco:
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:
To wszystko!