CO2濃度に応じてLEDの色を変化させ、リレーで外部機器をON/OFFする

Raspberry PiとRPZ-CO2-Sensorを使ってCO2(二酸化炭素)濃度を測定し、LEDの色を変化させる応用例です。LEDを見ることで、換気の必要性がひと目でわかります。濃度が一定以上になったらリレーで換気ファンなどの外部機器をONすることも可能です。

Raspberry Pi OS Version 2021-10-30対応

更新日 : 2021年11月23日

概要

現在様々な場面でCO2測定の重要性が高まっています。例えば、以下のような分野です。

  • 感染症対策のための換気の見える化
  • オフィス環境を改善し集中力、生産性の向上
  • CO2をコントロールして収穫量や品質を高めるスマート農業

本記事では、RPZ-CO2-Sensor拡張基板のCO2センサーとRGB LEDを連携させることで、CO2濃度が上がっていくとLEDの色を緑から、青、黄、赤と変化させていくプログラムを紹介します。

また、CO2濃度が一定以上の場合に基板のリレーをONすることで、換気ファンなどの外部機器をONする動作も実現します。

また、パラメーターを書き換えることで、CO2濃度値や測定間隔を自由に変更できます。

前準備

拡張基板

赤外線送受信機能、および温度測定機能が搭載されている拡張基板「RPZ-CO2-Sensor」を装着します。セットアップは製品ページをご参照下さい。

RPZ-CO2-Sensor拡張基板

SCD41 CO2センサーの使い方やキャリブレーション(校正)については以下の解説を参照して下さい。

SCD41 CO2センサーとRaspberry Piで二酸化炭素濃度を測定する

Indoor Corgiのセンサー制御ソフトウェア「cgsensor」を利用して、SCD41 CO2センサーで二酸化炭素濃度を測定したり、センサーの校正や設定を変更する方法を解説します。コマンドラインツールを使って1行もコードを書かずに測定や記録ができるほか、Pythonパッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。

I2C有効化

センサーとはI2Cで通信しますので、以下の記事を参考にI2Cを有効化して下さい。

cgsensorのインストール

センサー制御ソフトウェア「cgsensor」を利用します。ターミナルを開き、以下の$に続くコマンドを実行してインストールして下さい。

$ sudo python3 -m pip install -U cgsensor

フローチャート

今回のプログラムは以下のようなフローチャートになっています。

一定時間おきにCO2濃度を測定し、値に応じてLEDとリレーの状態を設定するシンプルなものです。

フローチャート

プログラムの実行

プログラムこちらからダウンロードして解凍して下さい。

まずは設定を変えずに実行してみましょう。ターミナルを開いてco2_monitor.pyと同じディレクトリに移動し、以下のコマンドを実行します。

$ ./co2_monitor.py

すると、以下のように約1分間隔でCO2の濃度が画面に表示されます。

時刻, CO2濃度[ppm]
2021/10/19 12:18:26, 683
2021/10/19 12:19:26, 684
2021/10/19 12:20:26, 689
2021/10/19 12:21:26, 704
2021/10/19 12:22:26, 708
2021/10/19 12:23:26, 726

また、濃度に応じてLEDの色が変わります。デフォルトでは1000ppm以下が緑、1000-1500ppmが青、1500-2000ppmが黄、それ以上が赤となります。(しきい値付近で色が目まぐるしく変わらないように50ppmの余裕をもたせた判定方法となっています。)これらの値は自由に変更できます。後述のパラメーター変更を参照して下さい。

以下のように、値が一定以上になってLEDの色が変わる場合はメッセージが表示されます。

2021/10/19 13:34:30, 1043
2021/10/19 13:35:30, 1046
2021/10/19 13:36:30, 1050
値がしきい値をまたいだため, LEDを青に変更します. 

デフォルトではリレーは制御しませんが、CO2濃度が一定以上の場合にONすることが可能です。後述のパラメーター変更を参照して下さい。

パラメーター変更

27-48行目にカスタマイズ可能なパラメーターが書かれています。これらの値は自由に変更可能です。

#----------------------------
# カスタマイズ可能なパラメーター

# LEDの色やリレーを切り替えるCO2濃度のしきい値[ppm]
LED_CO2_TH = [
    1000,  # これより低ければ緑
    1500,  # これより低ければ青
    2000,  # これより低ければ黄, これ以上なら赤
]

# リレーをON/OFFするCO2濃度のしきい値[ppm]
# 0を指定するとリレー制御は無効
RELAY_CO2_TH = 0

# しきい値付近でLEDやリレーが頻繁に変化するのを回避するためのマージン
# マージン50ppm, 緑/青のしきい値1000ppmの場合, 1050ppmを超えたら緑->青になり,
# 950ppmを下回ったら青->緑になる. リレーも同様.
CO2_MARGIN = 50

# 次の測定までの待ち時間[分]
INTERVAL = 1
#----------------------------
LEDの色を変えるしきい値

LED_CO2_THがLEDの色を変えるしきい値です。リストになっており、デフォルトでは1000ppm以下が緑、1000-1500ppmが青、1500-2000ppmが黄、それ以上が赤となります。

なお、ちょうど1000ppmで判定した場合、測定値が1000ppm前後で推移している環境でLEDの色が目まぐるしく変わってしまいます。そこで、CO2_MARGINという値(デフォルト50)を導入しています。

LEDが緑から青に変わるには、しきい値1000に50を足した1050ppmを超える必要があります。逆に青から緑に変わる際は1000から50を引いた950ppmを下回る必要があります。

リレーをONするしきい値

RELAY_CO2_THは、この値を超えるとリレーをONするCO2濃度のしきい値です。0に設定した場合、リレーの制御は行いません。デフォルトは0になっているので、リレーも連携させたい場合は値を変更して下さい。

LEDと同じく、CO2_MARGINの値を加減して動作を行います。

測定間隔

INTERVALで測定間隔を分単位で指定します。デフォルトは1分になっています。

まとめ

CO2濃度に応じてLEDの色を変化させ、リレーで外部機器をON/OFFする応用例の解説は以上です。Pythonプログラムや他のソフトウェアと連携することで、センサーを使った様々なシステムを簡単に実装することができます。

また、「RPZ-PowerMGR」拡張基板と組み合わせると、指定した時刻だけ起動して測定することもできます。モバイルバッテリーを使った電源の確保できない環境でのセンシングも可能になるので、検討してみてはいかがでしょうか?

BME280センサーとRaspberry Piで気温、湿度、気圧を測定する

Indoor Corgiのセンサー制御ソフトウェア「cgsensor」を利用して、BME280センサーで気温、湿度、気圧を測定する方法を解説します。コマンドラインツールを使って1行もコードを書かずに測定や記録ができるほか、Pythonパッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。

Raspberry Piと赤外線でエアコンの自動ON、消し忘れ機能を実現

普段、エアコンを消し忘れてしまい夜間つけっぱなしにしてしまったり、冬場に朝エアコンを入れても暖かくなるのに時間がかかったことは無いでしょうか?本記事では、Raspberry Piと拡張基板を利用して、毎晩のエアコン消し忘れ機能、および朝に温度が低い場合に自動で暖房を入れる機能を実現します。

指定時刻にRaspberry Piの電源をON/OFF (RPZ-PowerMGR)

RPZ-PowerMGRを使って、指定時刻にRaspberry Pi(ラズパイ)の電源ON/OFFする方法の解説です。決まった時間だけ起動して消費電力を抑えることが可能で、モバイルバッテリーやソーラーシステムでの運用に最適です。

RPZ-IR-Sensor (Raspberry Pi用 温度/湿度/気圧/明るさ/赤外線 ホームIoT拡張ボード)

動作をプログラミング可能な、Raspberry Pi/Zero(ラズパイ)用ホームIoT拡張ボードです。温度、湿度、気圧、明るさセンサー、赤外線送受信機能を搭載。温度が上がったらエアコンをオンにする、暗くなったら照明を点灯する、外出先から家電の操作をする、気温や日照時間を記録する、といった使い方が可能です。LEDにステータスを表示したり、スイッチを押したら特定の処理をすることもできます。