こんにちは。エンジニアの落合です。
前回はラズパイ開封からセットアップまで終わったので、今回はいよいよメインの電子工作をしようと思います!
というわけで、今回の目標はこちらです。
目次
CO₂濃度の計測&通知プログラムを作ってみよう!
普段リモートワークで勤務しているので、お昼休憩等以外では基本的に仕事部屋に籠もっています。
特に最近は暑いので換気もあまりできていません。
なので、この機会にラズパイでCO₂の濃度を測定して、一定以上の濃度を検知したら通知が飛ぶようにしたいと思います!
準備するもの
Raspberry Pi4
ラズパイOSをセットアップ済みのラズパイです。
二酸化炭素センサー
MH-Z19型を使っている人が多く、情報が多そうだったのでMH-Z19Eを選びました。
ジャンパーワイヤー(メスーメス)
ラズパイとセンサーを繋ぐために必要です。
今回は₄本使いました。
CO₂濃度を表示する
センサー取り付け
https://github.com/UedaTakeyuki/mh-z19
https://pinout.xyz/
上のサイトを参考に、ジャンパーワイヤーでラズパイとセンサーを接続します。
電源は5Vを利用するのでVinを②に、TxとRxはそれぞれRxとTxに接続する必要があるので⑩と⑧に、Gndはグラウンドと繋げるので⑨に接続しました。
(Gndは⑥でも良さそうですが、下記のファン取り付け用に開けています)
シリアル通信を有効化
センサーが接続できたので、次はシリアル通信を有効化します。
1 |
sudo raspi-config |
上のコマンドを実行して、
「Interface Options」
→「P6 Serial Port」
→「Would you like a login shell to be accessible over serial ?」 :「No」
->「Would you like the serial port hardware to be enabled ?」:「Yes」
の順で選択します。その後、再起動します。
必要なライブラリのインストール
試しに以下のコマンドを実行して、Pythonのバージョンは3.11.2になっていたことを確認しました。
1 2 |
python --version -> Python 3.11.2 |
先程も参考にさせていただいたサイトを見ながら必要なコマンドを実行していきます。
1 2 |
pip3 install mh-z19 →error: externally-managed-environment |
エラーが出てしまいました。
調べたところ、python3.11以降、OS自体に影響がありそうなパッケージのインストールをしようとすると発動するセーフガードが追加されたようです。
–break-system-packagesコマンドで無効にして、自己責任でパッケージインストールができるみたいなので、今回はこちらを使います。
1 |
pip3 install mh-z19 --break-system-packages |
無事にインストールが終わりました!
CO₂濃度を測ってみる
以下のコマンドでCO₂濃度を測ってみます!
1 |
sudo python3 -m mh_z19 |
表示されました!804ppm……。
上のサイトによると、1,000ppmまでは許容レベルのようです。それ以上になると眠気が出てしまうみたい。
LINE通知でCO2濃度を警告するプログラムを作成する
LINE Developer設定
センサーが動いていることが確認できたので、警告を通知してくれる機能を作成していきます。
今回はLINEの公式アカウントを作成して、APIを利用して機能を作成します。
月200通まで無料で使えるプランが用意されているので、こちらを使います。
引用:“LINE公式アカウント料金プラン”. LINEヤフー for business. https://www.lycbiz.com/jp/service/line-official-account/plan/, (2025/08/27)
LINE Developerにアクセスして、以下の手順で登録します。
- 「アカウントを作成」クリック
- 「LINEアカウントで登録」をクリック
※メールアドレスで登録すると、後で使うユーザーIDの取得が大変なのでLINEアカウント登録がおすすめです。 - 表示されるQRコードをLINE内のQRリーダーで読み取る
- 名前・パスワードを登録する
- 開発者名・メールアドレスを登録する
この画面になれば登録完了です!
プロバイダー作成
続いてプロバイダーを作成していきます。
「新規プロバイダー作成」をクリックすると、LINE Officail Account Managerに遷移します。
「LINE公式アカウントを作成」をクリックして、必要情報を登録します。
API情報取得
LINE Officail Account Managerに戻り、MessagingAPIメニューの「Messaging APIを利用する」をクリックし、先程作成したプロバイダーを選択します。
プロバイダー > チャネル設定に選択したプロバイダーが追加されていればOKです。
再度LINE Developerを表示して、以下の値をメモしておきます。
- チャネル基本設定タブにある「あなたのユーザーID」
- Messaging API設定タブにある「チャネルアクセストークン(長期)」
※表示されていない場合は「発行」をクリックしてください。
プログラム作成
ここまでで下準備が終わったので後はコードを書くだけです!
ラズパイに戻って左上のラズベリー > プログラミング > Thonnyの順にクリックしてエディタを開きます。
以下のコードを書いて適当な場所に保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import mh_z19 import requests import time # LINE Messaging API設定 LINE_API_URL = "https://api.line.me/v2/bot/message/push" LINE_TOKEN = "あなたのチャネルアクセストークン" USER_ID = "通知先のユーザーID" def send_line_message(message): headers = { "Content-Type": "application/json", "Authorization": f"Bearer {LINE_TOKEN}" } payload = { "to": USER_ID, "messages": [ { "type": "text", "text": message } ] } response = requests.post(LINE_API_URL, headers=headers, json=payload) print(f"LINE送信ステータス: {response.status_code}") def monitor_co2(threshold=1000, interval=60): while True: result = mh_z19.read() if result and "co2" in result: co2 = result["co2"] print(f"現在 のCO₂濃度: {co2} ppm") if co2 > threshold: alert = f"⚠️CO₂濃度が {co2} ppm を超えたよ!?\n今すぐ換気して!" send_line_message(alert) else: print("センサー読み取り失敗") time.sleep(interval) # 実行 monitor_co2() |
以下のコマンドを実行します。
そのまま実行するとmh_z19がserial0にアクセスできなかったので、念の為権限を付与してからsudoで実行しました。
1 2 3 4 5 |
chmod +x co2_line_notify.py sudo python3 co2_line_notify.py → 現在のCO₂濃度: 1034 ppm LINE送信ステータス: 200 |
LINEに通知が届きました!
おわりに
前回に続きラズパイに部品を接続して簡単なプログラムを作成することができました!
センサーを探している時に、他の電子部品にも興味を惹かれたのでまた他の機能作成にもチャレンジしてみようと思います!
ブログを書いている最中に思いましたが、文言は
「{現在のCO₂濃度}を超えたよ!」
ではなく
「1000 ppmを超えたよ!」
の方が良かったかもしれないです。まだまだ改良の余地ありですね。
自由研究は一旦ここで終わりになりますが、またラズパイで遊んだ時にはブログを書こうと思います!
ここまでお読みいただきありがとうございました!
おまけ
ヒートシンク取り付け
ラズパイセットの付属品がいくつかあったので使ってみます。
まずはヒートシンクから。
四角い金属が₃つ入っていたので調べてみたら、熱を空気中に放熱して部品の温度上昇を抑える「ヒートシンク」というものだと判明しました。
裏側に粘着シールがあるので、紙を剥がして各部品の上に貼ってみました。
手先が不器用なのでこの工程が今回1番苦戦しました。
なんとか全て貼ることができました。
本来は₄つ貼ったほうが良いみたいですが、₁つ足りなかったので一旦置いておきます。
ファン取り付け
続いてファンの取り付けです。
表面のシールによると、5Vで動くようなので以下のサイトを参考に④に赤、⑥に黒が来るようにピンを刺しました。
電源を点けるとちゃんと動いてくれました!
試しに蓋を閉めて₅分ほど稼働させた状態で温度を測って比べてみました。
ファンを付ける前
1 2 |
vcgencmd meadure_temp -> 50.8℃ |
ファンを付けた後
1 2 |
vcgencmd meadure_temp -> 41.3℃ |
₉℃くらい違いますね!
- 【夏の自由研究】Raspberry Piを使って色々試してみた② ~電子工作編~ - 2025-08-28
- 【夏の自由研究】Raspberry Piを使って色々試してみた① ~セットアップ編~ - 2025-08-12
- ECR + ECS環境を構築してみた - 2025-07-31
- CodeCommitからGithubへのソース移行 - 2024-12-18
- これからエンジニアとして頑張ろうとしている方へ - 2023-12-22
【採用情報】一緒に働く仲間を募集しています
