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

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

更新日 : 2024年2月19日

概要

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

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

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

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

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

前準備

拡張基板

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

RPZ-CO2-Sensor拡張基板

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

SCD41 CO2センサーとラズパイで二酸化炭素濃度を測定する

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

I2C有効化

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

cgsensorのインストール

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

$ sudo python3 -m pip install -U cgsensor --break-system-packages

エラーが出る場合は最後のオプションを指定せずにお試しください。

$ 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が黄、それ以上が赤となります。(しきい値付近で色が目まぐるしく変わらないように20ppmの余裕をもたせた判定方法となっています。)これらの値は自由に変更できます。後述のパラメーター変更を参照して下さい。

以下のように、値が一定以上になって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の場合, 1020ppmを超えたら緑->青になり,
# 980ppmを下回ったら青->緑になる. リレーも同様.
CO2_MARGIN = 20

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

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

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

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

リレーをONするしきい値

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

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

測定間隔

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

まとめ

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

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

BME280センサーとラズパイで気温、湿度、気圧を測定する

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

静音モードでステッピングモーターの動作音を抑える (Raspberry Pi + RPZ-Stepper)

ステップ角単位で回転するという仕組み上、ステッピングモーターは振動や音が大きくなりやすい特徴があります。RPZ-Stepperは静音モードを搭載しており、特に低速回転時において振動と音を低減できます。静かな環境で動作させるアプリケーションに最適です。

RPZ-Stepper (Raspberry Pi用 高機能ステッピングモータードライバー)

ステッピングモーターを制御できるRaspberry Pi(ラズパイ)用拡張基板です。位置や角度、回転数などを指示すれば、自動で目標までモーターを動かしてくれます。加減速、静音モード、省電力モード、電流測定などの機能を搭載しています。ものを動かしたり回転させるシステムが実現できます。