Spis treści:
Problem złej jakości powietrza pojawia się sezonowo jak katar i kaszel, szczególnie w okresie grzewczym. Sprawa jest zatem istotna, i być może warto rozważyć zainteresowanie składem mieszanki gazów, które bezustannie wypełnia nasze płuca.
W dzisiejszym poradniku przedstawimy jak uzyskać pomiar czujnikiem jakości powietrza CCS811 w połączeniu z platformami Raspberry Pi. Artykuł dotyczy płytek Raspberry Pi 4, 3B+, 3B, 3A+, II, B, Zero oraz Zero W. Omówimy zarówno aspekty sprzętowe jak i oprogramowanie. Zainteresowani? Zapraszamy do lektury!
Czujnik CCS811
Jeśli kwestia jakości powietrza nie jest Wam obojętna, moduł z czujnikiem CCS811 będzie czymś co z pewnością wzbudzi Wasze zainteresowanie. Umożliwia on bowiem pomiar dwutlenku węgla i jakości powietrza. Czujnik do komunikacji wykorzystuje interfejs I2C, który zapewnia wygodny przesył danych. Na płytce znajdują się specjalnie przygotowane złącza do lutowania gdzie należy zamocować wyprowadzenia sygnałowe. Jest zasilany niskimi wartościami napięcia, tożsamymi w najpopularniejszymi platformami sprzętowymi i minikomputerami.
Najważniejsze cechy czujnika SS-CCS811:
- Napięcie zasilania: od 3,3 V do 5 V
- Temperatura pracy: od -40°C do 85°C
- Zakres pomiaru CO2e: od 400 ppm do 29206 ppm
- Zakres pomiaru TVOC: od 0 ppb do 32768 ppb
- Duże złącza lutownicze: 2,54 mm
- Kompatybilność z płytkami Arduino, Raspberry Pi
Raspberry Pi: konfiguracja i wstępne przygotowanie oprogramowania
No to przechodzimy do konkretów. Poniżej znajduje się lista działań, które należy wykonać w projekcie:
A. Włącz kanał I2C 1 w Raspberry PI
a. sudo raspi-config
menu F5 => wybierz opcję włącz I2C
zapisz, wyjdź.
sudo reboot now
b. edytuj plik /boot/config.txt i dodaj/włącz następujące dyrektywy:
dtparam=i2c_arm=on
dtparam=i2c_arm_baudrate=10000
zapisz, a następnie uruchom ponownie RPI
B. Sprawdź, czy I2C jest załadowany: ls /dev/*i2c*. To polecenie powinno wyświetlić coś takiego: /dev/i2c-1
C. Sprawdź komunikację I2C czujnika [CCS811 powinien być podłączony, patrz okablowanie w następnym rozdziale]. Uruchom polecenie i2cdetect -y 1. Na wyjściu polecenia powinieneś zobaczyć wylistowany domyślny adres s-Sense CCS811 I2C 0x5A.
D. Zainstaluj wymagane pakiety Pythona
a. wpisz polecenie sudo apt-get install python-setuptools
b. następnie wpisz wget https://files.pythonhosted.org/packages/6a/06/80a6928e5cbfd40c77c08e06ae9975c2a50109586ce66435bd8166ce6bb3/smbus2-0.3.0.tar.gz *
c. Rozpakuj pobrane archiwum tar.gz. tar -xf smbus2-0.3.0.tar.gz wykona zadanie.
d. chdir smbus2-0.3.0
e. sudo python setup.py install
* pakiet python-smbus2 jest również dostępny tutaj: https://itbrainpower.net/downloadables/smbus2-0.3.0.tar.gz
Podłączenie Raspberry Pi do czujnika CCS811
Wszystkie wskazówki dotyczące okablowania są przykładami dla Raspberry Pi 4, 3B+, 3B, 3A+, II, B, Zero i Zero W. Konwencja nazewnictwa GPIO używana w opisie okablowania i w oprogramowaniu to “numer pinu GPIO” – GPIO.setmode(GPIO.BOARD). W skrócie, okablowanie należy wykonać jak poniżej:
Pady (pola lutownicze) CCS811 | numer pinu GPIO Raspberry Pi | funkcja pinu Raspberry Pi |
---|---|---|
Vin | GPIO pin nr. 01 * | RPi 3.3V * |
Vdd (3V3) | nie podłączać | nie podłączać |
SDA | GPIO pin nr. 03 | SDA |
SCL | GPIO pin nr. 05 | SCL |
GND | GPIO pin nr. 09 | GND |
Pad 6, na spodzie płytki [CCS811 !WAKE]** | GPIO pin nr. 25 / GPIO pin nr. 22 | GND / GPIO |
Pad 7, na spodzie płytki [CCS811 !RESET]*** | nie podłączony / GPIO pin no. 07 | – / GPIO |
* zasilanie czujnika –> aby oszczędzić Rpi 3V3, przeczytaj jak zasilić czujnik I2C z pinu 5V Rasberry Pi, ale mając referencję I2C na 3.3V!
Nie zasilaj czujnika napięciem 5V, dopóki nie dowiesz się, co dokładnie robisz! Uszkodzisz swoją płytkę RaspberryPI!
** sensor !WAKE — Wejście sterujące dla trybu SLEEP/RUN, czujnik jest w trybie SLEEP jeśli !WAKE jest na poziomie HIGH
- Podłączony do pinu RPI nr 25 [GND], CCS811 będzie stale w trybie RUN.
- Podłączony do pinu RPI nr 22, tryb pracy CCS811 będzie kontrolowany programowo.
*** czujnik !RESET — wejście – reset sprzętowy CCS811 – czujnik jest inicjalizowany, jeśli !RESET jest ustawiony w pozycji LOW
- Jeśli jest podłączony do pinu RPI nr 07, aplikacja Pythona użyje sprzętowego resetu – patrz “ccs811_param.py” w następnym rozdziale.
- Jeśli NIE jest podłączony, program użyje zamiast tego “polecenia resetowania programowego” – patrz “ccs811_param.py” w następnym rozdziale.
Poniżej przedstawiono podstawowe okablowanie czujnika CCS811 do Raspberry Pi z bezpiecznym zasilaniem czujnika z pinu 3.3V Raspberry Pi:
Oprogramowanie Python do czujnika CCS811
a. Pobierz bibliotekę CCS811 Raspberry Pi Python. Możesz to zrobć tutaj.
b. Rozpakuj archiwum tar.gz. Następnie przejdź do nowo utworzonego folderu.
c. Skopiuj poniższy kod, wklej go do nowego pliku i zapisz plik jako “ccs811_simple.py” w folderze z bibliotekami pythona. Pobierz go stąd (kliknij prawym przyciskiem myszy i wybierz opcję zapisz jako): CCS811 – Raspberry Pi. Odczyt danych z czujnika – Python
"""
s-Sense CCS811 by itbrainpower.net I2C sensor breakout example - v1.0/20200218.
Compatible with:
s-Sense CCS811 I2C sensor breakout [PN: SS-CCS811#I2C, SKU: ITBP-6004], info https://itbrainpower.net/sensors/CCS811-CO2-TVOC-I2C-sensor-breakout
s-Sense CCS811 + HDC2010 I2C sensor breakout [PN: SS-HDC2010+CCS811#I2C, SKU: ITBP-6006], info https://itbrainpower.net/sensors/CCS811-HDC2010-CO2-TVOC-TEMPERATURE-HUMIDITY-I2C-sensor-breakout
all Raspberry PI, using Python 2.7
Reading CO2 and tVOC values example (pulling at 2sec) - based on test software (Beerware license) written by Nathan Seidle from SparkFun Electronics.
Thank you Nathan! Great job!
We've ported Nathan's functions into python, add some variables, functions and functionalities.
Mandatory wiring [bellow for RPi B/B+/II/3B/3B+/4/Zero/Zero W]:
- sensor Vin <------> RPI pin 1 [3V3 power] *
- sensor I2C SDA <------> RPI pin 3 [i2c-1 SDA]
- sensor I2C SCL <------> RPI pin 5 [i2c-1 SCL]
- sensor GND <------> RPI pin 9 [GND]
- sensor PAD6 [!WAKE] <------> RPI pin 6 [GND] ** or RPI pin 22 [GPIO25] ***
Optional wiring:
- sensor PAD7 [!RESET] <------> RPI pin 7 [GPIO4] ****
Wiring notes:
* to spare 3V3 power - read about RPI I2C sensors 5V powering
** if connected to GND, CCS811 will be always WAKE
*** if connected to RPI pin 22, CCS811 can be switched in WAKE/SLEEP mode - handled inside library
**** if RESET is not conneted, only CCS811 software reset will be available in application.
common ==> check ccs811_param.py file for WAKE and RESET options!
WIRING WARNING:
Wrong wiring may damage your RaspberryPI or your sensor! Double check what you've done.
IMPORTANT INFO:
New CCS811 sensors requires 48 hours burn in. After that readings should be considered good after 20 minutes of running.
CCS811 definitions are placed in ccs811_param.py
Bellow, how to set-up i2c on RPi and install requiered python packages and other utilities.
Enable I2C channel 1
a. sudo raspi-config
menu F5 => enable I2C
save, exit and reboot.
b. edit /boot/config.txt and add/enable following directives:
dtparam=i2c_arm=on
dtparam=i2c_arm_baudrate=10000
save and reboot.
Check i2c is loaded:
run: ls /dev/*i2c*
should return: /dev/i2c-1
Add i2c-tools packages:
sudo apt-get install -y i2c-tools
Check sensor I2C connection:
run: i2cdetect -y 1
you should see listed the s-Sense CCS811 I2C address [0x5A]
Install additional python packages:
a. sudo apt-get install python-setuptools
b. wget https://files.pythonhosted.org/packages/6a/06/80a6928e5cbfd40c77c08e06ae9975c2a50109586ce66435bd8166ce6bb3/smbus2-0.3.0.tar.gz
c. expand archive
d. chdir smbus2-0.3.0
e. sudo python setup.py install
You are legaly entitled to use this SOFTWARE ONLY IN CONJUNCTION WITH s-Sense CCS811 I2C sensors DEVICES USAGE. Modifications, derivates and redistribution
of this software must include unmodified this COPYRIGHT NOTICE. You can redistribute this SOFTWARE and/or modify it under the terms
of this COPYRIGHT NOTICE. Any other usage may be permited only after written notice of Dragos Iosub / R&D Software Solutions srl.
This SOFTWARE is distributed is provide "AS IS" in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.
itbrainpower.net invests significant time in design phase of our IoT products and in associated software and support resources.
Support us by purchasing our environmental and air quality sensors from here https://itbrainpower.net/order#s-Sense
Dragos Iosub, Bucharest 2020.
https://itbrainpower.net
"""
from time import sleep
from ccs811 import *
ccs811Begin(CCS811_driveMode_1sec) #start CCS811, data update rate at 1sec
while(1):
ccs811SetEnvironmentalData(21.102, 57.73) #replace with temperature and humidity values from HDC2010 sensor
if ccs811CheckDataAndUpdate():
CO2 = ccs811GetCO2()
tVOC = ccs811GetTVOC()
print "CO2 : %d ppm" %CO2
print "tVOC : %d ppb" %tVOC
elif ccs811CheckForError():
ccs811PrintError()
sleep(2)
c’. Poprzedni kod jest dołączony do pakietu bibliotek CCS811 Raspberry Pi Python.
d. Sprawdź parametry CCS811 w pliku “ccs811_param.py”. Uruchom kod CCS811 za pomocą polecenia “python ccs811_simple.py“.
Wskazówki
- jeśli zaktualizujesz kod wewnątrz pliku “ccs811_param.py”, przed jego uruchomieniem uruchom narzędzie “./clean”, aby usunąć prekompilowane pliki Pythona.
- Aby przeliczyć jednostki pomiarowe i inne, użyj funkcji zawartych w bibliotece Pythona s-Sense air quality utils.
- jeśli zdecydujesz się nie podłączać sygnału CCS811 !RESET, sprawdź czy wewnątrz pliku ccs811_param.py linia zaczynająca się od CCS811_RESET_PIN jest zakomentowana.
- jeśli zdecydujesz się na okablowanie sygnału CCS811 !RESET, zweryfikuj wewnątrz ccs811_param.py, czy linia zaczynająca się od CCS811_RESET_PIN NIE jest zakomentowana (i sprawdź, czy nie ma odpowiedniego numeru pinu RPI CCS811_RESET_PIN).
- jeśli zdecydujesz się nie sterować CCS811 w trybie SLEEP/RUN – podłącz sygnał CCS811 !WAKE do masy RPI, sprawdź w ccs811_param.py, czy linia zaczynająca się od CCS811_WAKE_PIN nie jest zakomentowana.
- jeśli zdecydujesz się na podłączenie sygnału CCS811 !WAKE do RPI GPIO – CCS811 SLEEP/RUN sterowany programowo, sprawdź wewnątrz ccs811_param.py, czy linia zaczynająca się od CCS811_WAKE_PIN NIE jest zakomentowana (i sprawdź, czy nie ma odpowiedniego numeru pinu CCS811_RESET_PIN RPI).
Zaawansowana funkcjonalność czujnika CCS811 przy Raspberry Pi
Ostatnim punktem jest odczyt danych dotyczących stężenia dwutlenku węgla przy użyciu zewnętrznego źródła danych temperatury i wilgotności. Układ CCS811 ma kilka ciekawych funkcji (zachęcamy do samodzielnego przeczytania noty katalogowej) – jedną z nich jest kompensacja dryftu temperaturowego.
W skrócie, firmware CCS811 używa danych o zewnętrznej temperaturze i wilgotności jako źródła danych dla algorytmu kompensacji odczytu. Aby zaimplementować tę funkcję, wystarczy użyć w linii 99 danych dostarczanych przez zewnętrzny czujnik THS. Naszym zdaniem warto spróbować.
Artykuł opublikowany za zgodą: itbrainpower.net
Jak oceniasz ten wpis blogowy?
Kliknij gwiazdkę, aby go ocenić!
Średnia ocena: 5 / 5. Liczba głosów: 2
Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten wpis.