Help us understand the problem. What is going on with this article?

Raspberry Pi でCO2センサを使う

More than 1 year has passed since last update.

概要

Raspberry Pi でSIM経由で通信する顔認証システムを作成し、認証結果を kintone で管理するシステムを構築します。
今回は、顔認証した時のオフィス環境データを取得するため Raspberry Pi でCO2センサの値を読み込むまでを行います。!
IMG_2016.jpg

顔認証システム構築シリーズ

Raspberry Pi で顔を認識しファイルに保存する
https://qiita.com/yukataoka/items/7510217f4b6efdefff06

Amazon Rekognition で顔が同じか比較判定し、感情などの情報を取得する
https://qiita.com/yukataoka/items/3fde5d6b22255ff1aed9

Raspberry Pi でCO2センサを使う
https://qiita.com/yukataoka/items/a3b4065e8210b8f372ff

Raspberry Pi で温湿度気圧センサを使う
https://qiita.com/yukataoka/items/8f9046587c978e91f689

利用するCO2センサについて

CO2センサは、以下の過去の記事で SENSEAIR の K30 を使ってきましたが、1個購入するにも送料込みで1万円をオーバーします。

4.センサの設定とプログラミング
https://yukataoka.wordpress.com/2015/06/20/raspi04/

今回は安価にAliExpess等で20ドル弱で購入できるCO2センサ MH-Z19 を用います。

1PCS module MH-Z19 infrared co2 sensor for co2 monitor
https://www.aliexpress.com/item/1PCS-module-MH-Z19-infrared-co2-sensor-for-co2-monitor-Free-shipping/32371956420.html

配線について

MH-Z19 は UART シリアル通信で測定値を取得します。
Raspberry Pi の配線は、以下の配線図を参考に行います。
MH-Z19
( https://pypi.org/project/mh-z19/ より引用 )

環境の設定

先の作業で、Pyton3 と pip3 の設定までは完了しています。

  • UART シリアル通信の設定

sudo raspi-config で UART のシリアル通信を設定します。
手順は以下です。
"5 Interfacing Option" を選択。
"P6 Serial" を選択。
"Yes" を選択し、raspi-config 完了後に再起動します。
Would you like a login shell to be accessible over serial? で "No" を選択。
Would you like the serial port hardware to be enabled? で "Yes" を選択。
raspi-config 完了後に再起動します。

<注記1>
上記で Would you like a login shell to be accessible over serial? で"Yes"を選択した場合や、手動で /boot/config.txt を編集し bluetooth を無効化している場合は注意が必要です。(詳細は後述します。)

  • Python3 の設定

すでに pip3 の MH-Z19 用のライブラリィが公開されています。

mh-z19 0.3.8.5
https://pypi.org/project/mh-z19/

pip3で mh-z19 をインストールします。

$ sudo pip3 install mh-z19

_インストール後にそのままライブラリィを何回実行しても null しか返してきません。_
_配線等や本体を交換しても状況が変わらないため、ライブラリィの中身をチェックすることにしました。
<注記1>で説明した設定を行った場合、インストール後にそのままライブラリィを何回実行しても null しか返してきません。

$ sudo python3 -m mh_z19
null

$ pip3 show mh-z19
Name: mh-z19
Version: 0.3.8.5
Summary: mh-z19 CO2 concentration sensor library for All models of Raspberry Pi
Home-page: https://github.com/UedaTakeyuki/mh-z19
Author: Takeyuki UEDA
Author-email: gde00107@nifty.com
License: MIT
Location: /usr/local/lib/python3.5/dist-packages
Requires: pyserial, requests, getrpimodel, argparse

ライブラリィでは Raspberry Pi 3 Model B の シリアルデバイスは /dev/ttyS0 を参照するようになっていますが、実際は /dev/ttyAMA0 か /dev/serial0 でしか通信できませんので、以下のように修正しました。
<注記1>の設定では Raspberry Pi 3 Model B シリアルのデバイスのエリアスが変わってしまうため、以下のようにライブラリィの保管場所を pip3 の show オプションで確認し _init_.py の中身を変更して利用します。

/usr/local/lib/python3.5/dist-packages/mh_z19/__init__.py
 -*- coding: utf-8 -*-
# original: https://raw.githubusercontent.com/UedaTakeyuki/slider/master/mh_z19.py
#
# c Takeyuki UEDA 2015 -

import serial
import time
import subprocess
import traceback
import getrpimodel
import struct
import platform

# setting
version = "0.3.8"
pimodel = getrpimodel.model()

# Raspberry Pi3 Model B の serial デバイスは、記載時には ttyS0 でなくttyAMA0 に修正
#if pimodel == "3 Model B":
#  partial_serial_dev = 'ttyS0'
#elif pimodel == 'Zero':
#  partial_serial_dev = 'serial0'
#else:
#  partial_serial_dev = 'ttyAMA0'

partial_serial_dev = 'ttyAMA0'

serial_dev = '/dev/%s' % partial_serial_dev
stop_getty = 'sudo systemctl stop serial-getty@%s.service' % partial_serial_dev
start_getty = 'sudo systemctl start serial-getty@%s.service' % partial_serial_dev
後略

結果

シリアルデバイスの指定を修正後にライブラリィを実行すると、以下のようにCO2値を取得できるようになりました。

$ sudo python3 -m mh_z19
{"co2": 712}
$ sudo python3 -m mh_z19  --all
{"TT": 67, "temperature": 27, "co2": 770, "SS": 0, "UhUl": 3842}

--all オプションで CO2 以外のセンサから取得した値を表示します。
TTは華氏温度のようですが、データシートに情報がなく内部温度センサーの値かもしれないようです。

詳細は以下のサイトを参照ください。
https://revspace.nl/MHZ19
https://www.winsen-sensor.com/d/files/PDF/Infrared%20Gas%20Sensor/NDIR%20CO2%20SENSOR/MH-Z19%20CO2%20Ver1.0.pdf

参考サイト

UedaTakeyuki/mh-z19
https://github.com/UedaTakeyuki/mh-z19
https://pypi.org/project/mh-z19/

窓を開けて新鮮な空気をいれよう!Raspberry Pi でCO2 濃度を測ろう
https://qiita.com/UedaTakeyuki/items/c5226960a7328155635f

1PCS module MH-Z19 infrared co2 sensor for co2 monitor
https://www.aliexpress.com/item/1PCS-module-MH-Z19-infrared-co2-sensor-for-co2-monitor-Free-shipping/32371956420.html

PC​/RaspberryPi​/Pi3のシリアル通信
http://yueno.net/xoops/modules/xpwiki/?PC%2FRaspberryPi%2FPi3%E3%81%AE%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E9%80%9A%E4%BF%A1

yukataoka
若い頃にUターンしたIT屋で、出身は高知県仁淀川町。IoTとクラウドを活用した地域課題解決などに挑戦。 コミュニティ活動の傍ら、サイボウズ公認 kintone エバンジェリスト も務める複業者。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away