部屋の二酸化炭素濃度を測定しよう ラズパイでCO2センサーを作る:名刺サイズの超小型PC「ラズパイ」で遊ぶ(第47回)
ラズパイを使ってCO2を計測し、部屋の換気をする目安にしてみましょう。
新型コロナウイルスの影響で緊急事態宣言が発令され、在宅勤務をしている人も多いでしょう。そこで気になるのは部屋の空気品質です。空気の品質というと真っ先に思い出すのは二酸化炭素の量でしょうか。そこでラズパイを使ってCO2を計測し、部屋の換気をする目安してはいかがでしょうか。
今回使うデバイスは「CSS811」というセンサーが載っている「SEN-CCS811」(1499円)です。SEN-CCS811はI2Cを利用するので、電源とGNDの他、SDAとSCLの2本で接続できます。SDAとSCLを使って他のデバイスとデイジーチェーン接続も可能です。
SEN-CCS811は二酸化炭素相当物(eCO2)や金属酸化物(MOX)レベルを含む、総揮発性有機化合物(TVOC:Total Volatile Organic Compounds)を感知できます。TVOCはペンキ塗料、カーペットといった建設資材などやコピー機に加工機械、またはヒトの呼気やタバコからも発生します。
CircuitPythonのインストール
SEN-CCS811を使ってCO2を測定する方法はいろいろありますが、今回紹介するのは「CircuitPython」を使った測定法です。CircuitPythonはその名前の通り、Pythonをベースとして作られている言語です。ArduinoやRaspberry Piなどのデバイスを製作・販売しているAdafruitが開発を支援しているため、同社が販売しているデバイスのモジュールが数多く用意されており、扱いやすいのが特徴です。今回使うSEN-CCS811はAdafruit製のものではありませんが、きっちりと動作します。
SEN-CCS811は、基板中央にある「CCS811」というセンサーで、二酸化炭素相当物(eCO2)のほか、金属酸化物を含む総揮発性有機化合物(TVOC)を検知します。TVOCにはトルエンやキシレン、アセトアルデヒド、パラジクロロベンゼンといった物質が含まれます。二酸化炭素の測定基準として「400ppm」という数値がありますが、CCS811ではこの400ppmという値から、どれくらい部屋の二酸化炭素量が増えたのか測定できます。TVOCの基準も同じく「ppb」での測定結果を表示してくれます。
ラズパイとは以下のような形で接続します。VCCはラズパイの3.3Vに、GNDはラズパイのGNDに、SDAは3ピンに、SCLは5ピンに接続するあたりは通常のI2C接続と同じですが、これに加えてRSTをVCCに、WAKEをGNDに接続する必要があります。
接続したら「i2cdetect」コマンドで認識しているか確かめてみましょう。以下のように表示されていればOKです。なおSEN-CCS811で測定するには、測定前48時間から接続して通電している必要があるほか、接続後20分間放置したあとから測定することになっているので注意しましょう。
$ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- 5a -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
まずはラズパイのシステムを最新にします。
$ sudo apt update $ sudo apt upgrade -y
続いてCircuitPythonをインストールします。以下のコマンドを順番に入力してください。
$ cd ~ $ sudo pip3 install --upgrade adafruit-python-shell $ wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/raspi-blinka.py $ sudo python3 raspi-blinka.py
raspi-blinka.pyを実行すると、PythonのシステムをVersion3にアップデートするという警告が出ますので、「y」を押して進めます。最後に「REBOOT NOW?」と表示されたら「y」を入力してEnterキーを押し、ラズパイを再起動します。再起動したら以下のコマンドでI2CとSPIが動作しているかチェックします。
$ ls /dev/i2c* /dev/spi*
以下のように表示されればOKです。
/dev/i2c-1 /dev/spidev0.0 /dev/spidev0.1
では、CircuitPythonのライブラリが正しくインストールされたか確認します。下記のプログラムをnanoなどで記述し、「blinkatest.py」とファイル名をつけて保存しましょう。
#!/usr/bin/env python # -*- coding: utf-8 -*- import board import digitalio import busio print("Hello blinka!") # Try to great a Digital input pin = digitalio.DigitalInOut(board.D4) print("Digital IO ok!") # Try to create an I2C device i2c = busio.I2C(board.SCL, board.SDA) print("I2C ok!") # Try to create an SPI device spi = busio.SPI(board.SCLK, board.MOSI, board.MISO) print("SPI ok!") print("done!")
保存したら以下のコマンドを実行します。
$ python blinkatest.py
以下のように表示されていればOKです。
Hello blinka! Digital IO ok! I2C ok!SPI ok! done!
ではCCS811のライブラリをインストールしましょう。以下のコマンドを入力してください。
$ sudo pip3 install adafruit-circuitpython-ccs811
インストールしたら続いて「/boot/config.txt」に以下の項目を追加します。これは、SEN-CCS811とのI2C通信が、通常の速度だと上手くいかないので、スピードを下げて通信させるためです。/boot/config.txtの最後に追記する形で問題ありません。
core_freq=500 core_freq_min=500 i2c_arm_baudrate=10000
追記したら「sudo reboot」で、いったんラズパイを再起動します。再起動したら「ccs811test.py」のサンプルプログラムをnanoなどで記述します。
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import board import adafruit_ccs811 i2c = board.I2C() # uses board.SCL and board.SDA ccs811 = adafruit_ccs811.CCS811(i2c) # Wait for the sensor to be ready while not ccs811.data_ready: pass while True: print("CO2: {} PPM, TVOC: {} PPB".format(ccs811.eco2, ccs811.tvoc)) time.sleep(1)
記述して保存したら、以下のコマンドでプログラムを走らせます。
$ sudo python3 ccs811test.py
すると1秒おきに二酸化炭素とTVOCの値を測定して表示します。先ほども述べた通り、ちゃんとした結果を得るためには20分以上の時間が必要なので注意してください。以下のように最初は安定しませんが、時間が経過すると近似値を示すようになります。
CO2: 400 PPM, TVOC: 0 PPB CO2: 400 PPM, TVOC: 128 PPB CO2: 405 PPM, TVOC: 128 PPB CO2: 408 PPM, TVOC: 1 PPB CO2: 33173 PPM, TVOC: 0 PPB CO2: 405 PPM, TVOC: 0 PPB CO2: 33254 PPM, TVOC: 13 PPB CO2: 33206 PPM, TVOC: 5 PPB CO2: 425 PPM, TVOC: 33023 PPB CO2: 417 PPM, TVOC: 2 PPB CO2: 422 PPM, TVOC: 3 PPB CO2: 33216 PPM, TVOC: 7 PPB CO2: 518 PPM, TVOC: 17 PPB CO2: 33254 PPM, TVOC: 13 PPB CO2: 33224 PPM, TVOC: 8 PPB CO2: 443 PPM, TVOC: 6 PPB CO2: 438 PPM, TVOC: 130 PPB CO2: 438 PPM, TVOC: 5 PPB ……
二酸化炭素の濃度ですが、400ppmを基準として設定されています。それよりも上昇していたら空気が汚染されていると考えてよいでしょう。
関連記事
- 550円の「Raspberry Pi Pico」でIoT その1:気温と湿度、気圧を測定する
独自開発のチップ「RP2040」を搭載したマイコンボード「Raspberry Pi Pico」でセンサーデバイスをテスト。 - ラズパイで「Windows 10 on ARM64」を動かす(オーバークロック編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。今回はオーバークロックで快適動作を実現。 - ラズパイで「Windows 10 on ARM64」を動かす(インストール編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。 - ラズパイで「Windows 10 on ARM64」を動かす(事前準備編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。 - ラズパイ一体型キーボード「Raspberry Pi 400」レビュー 特例制度のWeb申請で“技適なし”を回避した
かつての“マイコン”を思わせるラズパイ一体型キーボード「Raspberry Pi 400」のレビューのファーストインプレッションをお届け。海外製品を日本国内で使うために気を付けるべきポイントも紹介。 - ラズパイ一体型キーボード「Raspberry Pi 400」の性能は? ベンチマークテストで従来モデルと比べた
かつての“マイコン”を思わせるラズパイ一体型キーボード「Raspberry Pi 400」でベンチマークテストを実施。その実力とは? - ラズパイで気温と湿度を測定、LINEで通知を受け取る 〜前編〜
今回は温湿度センサーモジュールとラズパイを組み合わせ、LINEと連携させる方法を紹介します。 - ラズパイを無線LANルーター化する 〜アクセスポイント編〜
家庭内で無線LANルータを使っている人は多いかと思います。今回はそのルーター機能をラズパイに持たせて、ラズパイを使った無線LANルーターの構築方法についてご紹介します。 - 本格的な撮影が楽しめる公式カメラモジュール「Raspberry Pi High Quality Camera」を試す
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。Raspberry Pi公式のカメラとして本格的な撮影が楽しめる「Raspberry Pi High Quality Camera」を紹介します。 - ラズパイで新型コロナウイルス解析に参加する 〜Ubuntu Serverの構築編〜
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。今回はラズパイで。 - ラズパイでスマートスピーカーを作る 「アレクサ!あしたの天気は?」 〜ソフトウェア準備編〜
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。今回は米Amazonが開発したAIアシスタント「Alexa」をラズパイで使えるようにしてみます。 - これが“らずキャン△”だ! キャンプ場で役立つ「気温・湿度・気圧センサー」の作り方
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。まずはキャンプ場で気温、湿度、気圧を測れるデバイスを作ってみます。 - ラズパイで「YouTube」と「Amazon プライムビデオ」を見る
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。音楽や動画のメディアサーバ化するために入れたOS「OSMC」で、YouTubeやAmazon プライムビデオなどを楽しんでみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.