名刺サイズの超小型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!")
blinkatest.py
保存したら以下のコマンドを実行します。
$ 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)
ccs811test.py
記述して保存したら、以下のコマンドでプログラムを走らせます。
$ 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を基準として設定されています。それよりも上昇していたら空気が汚染されていると考えてよいでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.
名刺サイズの超小型PC「ラズパイ」で遊ぶ
今やスマートフォンアプリで何でも完結できてしまう時代。しかし、一から自分の手でデバイスを作り上げ、試行錯誤しながらアイデアを具現化する楽しさは格別です。この連載では、テーマや用途にあわせてマイクロコンピュータ(マイコン)と呼ばれる名刺サイズの超小型PC「Raspberry Pi」(通称ラズパイ)の活用方法から具体的な工作手順までを紹介します。
この記事の著者
関連記事
こんなメディアも見られています
ITmedia NEWSに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
SpecialPR
本日の新着記事
アクセスランキング
-
1
メルカリ、梨の転売疑惑に「盗品の出品は確認されず」 誹謗中傷には利用制限も
-
2
Anthropic、「Claude Opus 5」公開 Fable 5に迫る性能を半額で――サイバー安全策は緩和、拒否時は自動フォールバックも
-
3
「iPhone高騰」はこれからも続く? 中国CXMTに近づくApple、メモリ競合へのけん制が不発に終わりそうなワケ【後編】
-
4
「ニューロマンサー」実写ドラマ、Apple TV+で2027年1月配信開始へ
-
5
「こんなのに追われたら……」急斜面もやすやす爆走、中国製の車輪付き四足ロボのデモ動画が話題 最高時速20km超
-
6
検索結果に「詐欺ではありません」と表示させる詐欺手口、警視庁が注意喚起 AI要約も餌食に
-
7
海外の新作バカゲー「電車アタック」にマンガ家が感心した理由 ブッ飛んだ内容と完成度の高さ、そして“日本”
-
8
「めっちゃカメレオン」公式Discord乗っ取り 担当者PCがマルウェア感染、管理者が全員BANに 現在は復旧
-
9
暑さ対策が熱い! 「猛暑対策展」で感じた、転んでもただでは起き上がらない日本人のエネルギー
-
10
スーパーに並んだ「ごちゃごちゃ生成AIポップ」が物議 “看板王”こと、きぬた歯科院長「これはアリ」
ITmedia NEWS SNS
インフォメーション
注目情報をチェック
ITmediaNEWSをフォロー
あなたにおすすめの記事PR