RaspberryPi + GrovePi + MH-16Z でCO2濃度センサをつくる

無性に眠いときありますよね
自分の場合、経験的に無性に眠くなる原因として多いのは、低気圧と換気不足(二酸化炭素濃度上昇)な気がします

前にGroveのCO2センサ買ってたんですが使い方を忘れてたので、再度セットアップしてここにメモ

センサハードウェア

MH-16Z

データシート: https://www.seeedstudio.com/Grove-Carbon-Dioxide-Sensor-MH-Z16.html

プログラム

昔作りっぱなしだったコレ がありましたが、動作環境、使い方を忘れていた

https://github.com/kefi550/mhz16-go

GrovePiを取り付ける

今回使ったのは Raspberry Pi 3B+
GrovePiをラズパイ本体に取り付けて、
今回のセンサMH-16Zは RPISER ポートに挿しました

RaspberryPiの設定

OSはRaspbianを入れます(後述しますがUbuntuではうまくいかなかった)
(余談として、OS入れたあとの諸々の初期設定をやる記事も興味があればご覧ください https://blog.kefiwild.com/posts/ansible_initial_ip_password_change/ )

/dev/serial0 を使うようです (要出典)

OS入れた直後くらいの最初はこんな状態です

$ ls -l /dev | grep serial
lrwxrwxrwx 1 root root           7 Aug 12 18:07 serial1 -> ttyAMA0

serialを有効化するための作業をします。raspi-configを使いました

sudo raspi-config

Interface Options を選択

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
シリアルポートを有効化するか?

この後rebootすると、以下のようになります

$ ls -l /dev | grep serial
lrwxrwxrwx 1 root root           5 Aug 12 18:07 serial0 -> ttyS0
lrwxrwxrwx 1 root root           7 Aug 12 18:07 serial1 -> ttyAMA0

/dev/serial0 が現れました

Ubuntuを使うとうまく動かなかった

Ubuntu 22.04 の場合、 /dev/serial0 がなにかと干渉していたりするのか、うまく動きませんでした
↑のraspi-config の手順だけではたぶん不足してるんでしょうかね

センサプログラムを動かす

https://github.com/kefi550/mhz16-go を使います

センサとのシリアル通信には上記の通り /dev/serial0 を使います

$ sudo apt install golang-go
$ git clone https://github.com/kefi550/mhz16-go
$ cd mhz16-go
$ go build
$ sudo ./co2 /dev/serial0
1187

それっぽく取得できました

2023/08/16 追記

↑までの手順ではttyS0を使いますが、結構不安定でした。
以下を /boot/config.txt に追記することで、 /dev/serial0 -> /dev/ttyAMA0 となり、安定しました (仕組みはわかってません)

dtoverlay=miniuart-bt
core_freq=250

おわりに

  • 昔作ったCO2センシングプログラムの使い方など忘れてましたが、結果的には意外とシンプルに使えました
  • 最近ラズパイにはとりあえずUbuntuをいれるというムーブだったんですが、serial使う場合はRaspbianが無難そうですね