rpine lab Tech Blog

趣味のプログラミング(Web系・バックエンド)や自宅ラボ(Homelab)構築・マイコンを使った電子工作などを雑多に扱った技術ブログです。

🪟StackChanにCO2センサーを繋いで換気のタイミングを教えてもらう

StackChanにCO2センサーを繋いで換気のタイミングを教えてもらう
目次

はじめに

M5Stack版StackChan(スタックチャン)にSCD41搭載のCO2センサーを接続し、会話の中で部屋のCO2濃度・温度・湿度を確認できるようにしました。

「そろそろ換気した方がいい?」とStackChanに聞くと、組み込みMCPツールで取得したセンサー値をAIが参照し、換気の目安を答えてくれます。CO2濃度は換気状態を判断する指標のひとつで、一般的に室内環境では1000 ppm前後が換気の目安とされています。この記事ではStackChanがこの基準値を参照して換気タイミングを判断できるようにします。

この記事では、CO2L Unitの取り付けと配線、出荷時(純正)ファームウェアへのSCD41対応追加、実際の動作確認をやっていきます。

利用機材

機材 備考 販売URL
M5StackChan(M5Stack公式版 スタックチャン) メインロボット本体 スイッチサイエンス
M5Stack用 温湿度CO2センサ Unit CO2L(SCD41) CO2・温度・湿度センサー スイッチサイエンス
M5Stack用GROVE互換ケーブル 5 cm(10本セット) Port.A接続用(任意) スイッチサイエンス
LEGO テクニック 固定ペグ×2 センサー固定用(任意) 楽天市場(バラ売り)
Amazon(10個セット)
必要機材:左からM5StackChan本体、Unit CO2L(CO2センサー)、センサー付属のGroveケーブル(今回不使用)、別売りGroveケーブル(5 cm)、LEGO 固定ペグ×2(M5Stackサーボキットに付属していたもの)
必要機材:左からM5StackChan本体、Unit CO2L(CO2センサー)、センサー付属のGroveケーブル(今回不使用)、別売りGroveケーブル(5 cm)、LEGO 固定ペグ×2(M5Stackサーボキットに付属していたもの)

配線・取り付け

SCD41はSensirion製の光音響方式を採用したCO2センサーで、CO2濃度に加えて温度・湿度も取得できます。CO2L Unitはこのセンサーを搭載したM5Stack用のGroveユニットで、I2Cアドレスは0x62です。測定範囲はCO2が400〜5000ppm、温度が-10〜60℃、湿度が0〜95%RHです。

CO2センサーユニットをGroveケーブルでStackChanのPort.A(左側面の赤いコネクタ)に接続します。センサー付属のGroveケーブル(20 cm)でも問題ないのですが、利用機材に書いた5 cmのケーブルを使った方が余りが少なくてちょうど良いです。

Port.A(Grove)の各ピンの信号割り当ては以下のとおりです。

Groveピン 信号 CoreS3 GPIO
1 SCL G1
2 SDA G2
3 5 V
4 GND

StackChanとM5StackのユニットにはLEGOの穴が開いているため、固定用のペグを使うことで、きれいに取り付けできます。(私の場合は別のスタックチャンを自作する際に買ったM5Stackのサーボキットに付属していたものを流用)

取り付け前のStackChanの左側面|上部に空いているLEGOの穴に固定用ペグを差し込んでセンサーを固定
取り付け前のStackChanの左側面|上部に空いているLEGOの穴に固定用ペグを差し込んでセンサーを固定
LEGOの固定用ペグ
LEGOの固定用ペグ
完成図
完成図

カスタムファームウェア

カスタマイズの内容

M5StackChanの出荷時ファームウェアをベースにカスタマイズし、SCD41センサーへの対応を追加しました。カスタマイズについては、Codex・Claude Codeに公式資料を参考にしてもらいながら実装しました。

変更内容が多岐にわたるため、公式リポジトリをforkして変更を適用したソースコードをGitHubで公開しています。そのソースコードは pinelibg/StackChanfeature/scd41-co2-unitブランチで確認できます。このブランチでの変更内容は次のとおりです。

  • SCD41用のI2Cドライバー追加
  • Port.Aを使ったI2Cの初期化関数追加
  • センサーの初期化・バックグラウンドタスクでの定期センサー値取得
  • CO2モニターアプリの追加
  • 組み込みMCPへのCO2センサー取得ツールget_co2_data追加
  • ビルドコンフィグ(CONFIG_HAL_SCD41_ENABLED)による、これらの追加項目の有効化・無効化(デフォルトで有効)

MCPツールのdescriptionにCO2濃度の目安(1000 ppm超で換気推奨)が記載されているため、AIがデータを解釈して自然な返答を生成します。なお、ディスプレイアプリは800/1200 ppmを境界としてメーターの色を変化させますが、MCPツールのdescriptionでは単純化のため1000 ppm超を換気推奨の目安としてAIに伝えています。

センサーが未接続の場合は{"error": "SCD41 not available"}を返すため、センサーが利用できない旨がAIから返答されます。

MCPツール追加部分:

ビルドと書き込み

ビルド環境のセットアップは前回の記事(🔧M5Stack版StackChanのファームウェアビルド環境構築)を参照してください。

フォークリポジトリのfeature/scd41-co2-unitブランチをcloneしてビルドします。

git clone https://github.com/pinelibg/StackChan.git
cd StackChan/firmware
git checkout feature/scd41-co2-unit

その後は通常のビルド・フラッシュ手順と同じです。

動作確認

注意点として、バッテリー電源だけではセンサーが動作せず、USBケーブルを繋いで電源供給しないとセンサーが動作しません。バッテリーからの電源供給がGroveコネクタの方に行ってない可能性があって、ソフトウェアからCoreS3の電源制御ICを操作してGroveポートに供給することが可能だったはずですが詳細は未検証です。この動作確認ではUSBケーブルを接続した状態でテストしています。

CO2モニターアプリ

ファームウェアが書き込まれると、メニュー画面に「CO2」アプリが追加されます。

メニュー画面に追加されたCO2アプリ
メニュー画面に追加されたCO2アプリ

アプリを起動すると、リアルタイムのセンサー計測値が表示されます。(5秒ごとに更新)

CO2濃度はレベルに応じてメーターの色が変化します。

濃度 目安
800 ppm未満 良好
800〜1200 ppm やや注意
1200 ppm以上 換気推奨
センサー値の表示アプリ
センサー値の表示アプリ

AIとの会話

AIとの会話でself.robot.get_co2_dataツールが呼ばれ、センサーの現在値をもとに換気の判断とアドバイスが返ってきます。

なお、動作確認には前回の記事(🤖M5Stack版StackChanのAI.AGENTをローカルLLMで実行してみる)でセットアップしたローカルLLM(Gemma 4 E4Bモデル)を使用しています。

CO2濃度が基準値以下の場合:960 ppm

🧑
部屋の空気の状態を教えてくれる?
🤖
今の空気は

二酸化炭素濃度が960 ppmだよ、温度が摂氏26度~

過ごしやすい感じかな

CO2濃度が基準値以下の時の回答
CO2濃度が基準値以下の時の回答

CO2濃度が少し高めの場合:1023 ppm(基準値1000 ppm超)

🧑
換気したほうがいいかな?
🤖
CO2濃度が1023ppmで

少し高めだよ

換気するといいかもね

1023 ppmでの返答
1023 ppmでの返答

CO2濃度が高い場合:1446 ppm

🧑
部屋のCO2濃度を測って教えてくれる?
🤖
今度はCO2濃度が1446 ppmだね、

これはかなり高いから

しっかり換気すると良いかもね

CO2濃度が高いときの返答
CO2濃度が高いときの返答

まとめ

SCD41 CO2センサーをStackChanに接続し、組み込みMCPツールget_co2_dataとして登録することで、AIが会話の中でリアルタイムのCO2データをもとに部屋の換気のタイミングを提案できるようになりました。

外部接続センサーをAIからツールとして扱えるようになるということで、同じパターンで他のセンサーの追加もできます。(気圧センサーも買ってあるのですがまだ繋いでない…)

現状ではStackChanが自発的に換気のタイミングで声をかけてくれるわけではなく、あくまでそれについて聞けば答えてくれるだけです。毎回の会話のコンテキストにセンサー値を付加するか、定期的にセンサー値をAIに渡して会話するか判断させるなどすれば、自発的に換気のタイミングを教えてもらえるようになって面白いかもと思いました。

過去記事

🤖クラファンで手に入れたStackChan(M5Stack版)をセットアップしてみた

🤖 M5Stack版StackChanのAI.AGENTをローカルLLMで実行してみる|Xiaozhi AI互換サーバーのセルフホスト

🤖 M5StackChanのAI.AGENTに任意のMCPツールを接続する

参考サイト

この記事が役に立ったら是非ご支援をお願いします!

支援する

※Squareの決済ページに移動します