日別アーカイブ: 2021年3月18日

CO2センサーMHZ19CとPCをUSB(シリアル変換)で接続

MHZ19CとPCをUSBで接続する。多分最小構成。

少しだけしゅっとさせたハード stores(少し安め) / amazon

widdows10向けアプリ

Windows向けの閲覧アプリ EPEA-CO2-NDIR-05(USB接続CO2センサー)を指してこちらをインストールすれば使えます。(ドライバーが無い場合はこちらのドライバーも必要です。分からない場合は両方入れておけば間違いはないです。)

v0.3.0

2021/04/18公開 ダウンロード先

CSVダウンロード機能追加

新しいもの13万件分(連続稼働させている場合約1週間分)のデータをCSVとしてダウンロードします。

暖機中の500やエラー、起動待ちの-1/-9もダウンロードされます。

日時のデータにはミリ秒まで入っています。エクセルの標準だと細かいデータまでは表示されませんが必要性に応じて適宜、書式を設定してください。

v0.2.0

2021/04/17公開 ダウンロード先

このバージョンで使用されているライブラリ(※)に環境依存のものが含まれています。おおよその環境で動くものを選択したつもりですがこのバージョンにあげたら動かなくなった場合はライブラリの可能性が高いです。このバージョンから動作しない場合はご連絡ください。

※ C:\Program Files (x86)\Epea\CO2Viewer\SQLite.Interop.dll です。これで伝わる人は適宜入れ替えてください。

手動キャリブレーション機能追加

現在の濃度を400ppm(おおよそ外気平均)として補正する機能です。USBを刺したまま換気をし綺麗な外気に20分以上さらした状態で実行してください。

ログ出力追加

C:\Users\ユーザ名\AppData\Roaming\epea\co2viewer にall.logが出力されるようになりました。設定はC:\Program Files (x86)\Epea\CO2Viewer\CO2View.exe.config 内にあります。

DB出力追加

C:\Users\ユーザ名\AppData\Roaming\epea\co2viewer\co2viewerdb.sqlite に出力されるようになりました。出力機能はこれから作りますがとり急ぎDB Browser(SQlite)等で閲覧可能です。

v0.0.3

2021/04/15公開 ダウンロード先

閲覧機能

CO2センサーから読み取った値を画面上に表示します。USBを刺したポートを選んで接続を押すと値を読み込みます。なお、誤差が100ppm程度ある目安で使用してください。(それでも1万円未満で市販されているCO2センサーの中ではおそらく最高精度です。)

0は初期状態、-1は読み込み準備中、-9はエラー、その他値はセンサーが返した値です。

USBを刺してから2分ほど暖機にかかるのでその後から正確になります。

数値800未満は背景が緑、800以上1000未満は背景が黄色、1000以上は赤になります。自治体等の基準がまだ不明瞭ですがおおよその目安にしてください。

自動キャリブレーションON/OFF機能

基準値補正を自動で行うか否かを選択する機能です。24時間以内に観測された最低値を外気基準値として補正する機能です。自動キャリブレーションをONにしていると換気ができていない場合や、電圧が不安定な場合等に値が不正確になることが多いのでOFFにした利用を推奨しております。(選べるようにしておいて欲しいという声がありましたので機能を付けています。。。)

Windowsアプリの話が長くなってきましたがやっとここからMHZ19CとPCをUSBで接続する。多分最小構成の話再開。

必要なもの

USBシリアル変換モジュール

USBとシリアルを変換するやつ。MHZ19Cで200mAぐらい必要なのでPCから給電されたものがそのままピンに出てくるタイプでないといけない。CH380GというICのものなら大体ドライバーがPCに入っていると思うけどなければ自分でインストール。

参照 動作確認できたもの Amazonの購入元KKHMF 3個 CH340モジュール STC マイクロ コントローラー ダウンロード USBターンTTLシリアル

MHZ19C

定番のCO2センサーモジュール。

データシート

2021/03時点送料込み国内最安値

秋月電子(送料抜きだと最安値。他のものも一緒に買う人はこっちが安い)

しゅっとさせたやつ(EPEA-CO2-NDIR-05)

stores amazon 手数料の関係でstoresの方が安い。

PC

USBがあるもの。電源が弱いやつだと不安定になると思う。試しているOSはCentOS7

接続方法

以下のように接続(前がモジュール後ろがMHZ19)

  • 5V-VIN
  • GND-GND
  • TXD-Rx
  • RXD-Tx

プログラム

軽く探したところ使いやすそうなライブラリはまだ見つからなかった。ラズパイ想定のライブラリから抜粋して動作確認。python3.7.1でpySerialいれてある。/dev/ttyUSB0は環境によって(都度)変わるので適宜読みかえ

[yoshitake@localhost usbpy]$ pyenv version
3.7.1 (set by /home/yoshitake/develop/usbpy/.python-version)

pip install pyserial
import serial
import traceback
import time

serial_dev = '/dev/ttyUSB0'


def connect_serial():
    return serial.Serial(serial_dev,
                         baudrate=9600)


def mh_z19():
    try:
        ser = connect_serial()
        result = ser.write(b"\xff\x01\x86\x00\x00\x00\x00\x00\x79")
        s = ser.read(9)
        return {'co2': s[2]*256 + s[3]}
    except:
        traceback.print_exc()
    finally:
        ser.close()


def main():

    while 1:
        value = mh_z19()
        co2 = value["co2"]
        print('CO2:', co2)
        time.sleep(5)


if __name__ == '__main__':
    main()

出力はしたみたいな感じで、暖機が終わるまで少しかかるはず。(ただ、MHZのメーカーはちょいちょい動きをかえてくるのでだいたいの目安。)

yoshitake@localhost usbpy]$ python test2.py 
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 465
CO2: 451

アンドロイドの野良アプリ。動作確認レベルの出来だけど値は取得できる。自分でインストールできる人向け。 こちら

ラズパイでMHZ19Bが動作しない時のエラーパラーン(切り分け用)

UARTが有効になっていない。

pi@raspberrypi:~ $ sudo cat /boot/config.txt |grep uart
enable_uart=0
pi@raspberrypi:~ $ sudo python3 -m mh_z19
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/serial/serialposix.py", line 265, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
FileNotFoundError: [Errno 2] No such file or directory: '/dev/ttyAMA0'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/mh_z19/__init__.py", line 62, in mh_z19
    ser = connect_serial()
  File "/usr/local/lib/python3.7/dist-packages/mh_z19/__init__.py", line 58, in connect_serial
    timeout=1.0)
  File "/usr/local/lib/python3.7/dist-packages/serial/serialutil.py", line 240, in __init__
    self.open()
  File "/usr/local/lib/python3.7/dist-packages/serial/serialposix.py", line 268, in open
    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyAMA0: [Errno 2] No such file or directory: '/dev/ttyAMA0'
A dependency job for serial-getty@ttyAMA0.service failed. See 'journalctl -xe' for details.
null