日常生活の物理|身近で体験できる科学のブログ

日常に関すること、何でもつぶやきます。物理的な視点を加えることが多いかも。

Raspberry Pi Zeroを使ったCO2濃度モニタリング

先月まで結婚式の話題でしたが、久々にRaspberry Piを使った常時モニタリングの拡張に取り組んでみました。前回の記事から、3ヶ月以上経つのですね。

用意したものは以下の2つです。

Raspberry Pi Zero
・MH-Z19 (CO2ガスセンサ)

接続は以下のとおりです。ピン配置は、こちらのページを参考にしました。既に温湿度センサや照度センサを搭載していましたが、Raspberry Piのピン数も足りました。

[Raspberry Pi] -> [MH-Z19]
・5V Power -> Vin
・Ground -> Gnd
・GPIO 14 (TXD) -> RXD
・GPIO 15 (RXD) -> TXD

そして、UART シリアル通信の設定と、mh-z19 をインストールします。設定方法は、こちらの記事を参考にしました。

あとはコードを書くだけです。温湿度計作りの記事で、Raspberry PiのUploadのコードを書いたので、mh-z19のコードを追加するだけで実装できました。

【Web_Upload.py】

import requests
import json
import smbus
import time
import Adafruit_DHT as DHT
import csv
import mh_z19
from datetime import datetime

def uploadSensorValues(temp, hum, lux, co2):
   url = 'http://XXXXXXXXXXX.php.xdomain.jp/sql.php'
        sensorsdata = {'datetime':datetime.now().strftime("%Y/%m/%d %H:%M:%S"),'temp':temp,'hum':hum,'lux':lux, 'co2':c$
        print (json.dumps(sensorsdata))
        headers = {'content-type': 'application/json'}
        res = requests.post(url, data=json.dumps(sensorsdata), headers=headers, verify=False)
        print (res.text)
  print (res.status_code)
        pass

def main():
        #1.LUX
        bus = smbus.SMBus(1)
        addr = 0x23
        lux = bus.read_i2c_block_data(addr,0x10)
        lux_value = (lux[0]*256+lux[1])/1.2
        print("lux= {}".format(lux_value))

        #2.temp + hum
        SENSOR_TYPE = DHT.DHT22
        DHT_GPIO = 22
        h,t = DHT.read_retry(SENSOR_TYPE, DHT_GPIO)
        print("Temp= {0:0.1f} deg C" . format(t))
        print("Humidity= {0:0.1f} %" . format(h))

        #3.CO2
        co2_conc = mh_z19.read()['co2']
        print("CO2= {0:0.1f} ppm".format(co2_conc))

        #4.data trasnmit
        uploadSensorValues(t, h, lux_value, co2_conc)

if __name__ == '__main__':
        main()


受け手側も更新します。
送信データにCO2センサを追加しましたので、MySQLを更新します。

CREATE TABLE `Sensor_Values2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `temp` float NOT NULL,
  `hum` float NOT NULL,
  `lux` float NOT NULL,
  `co2` float NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

phpの表示系コードは省略させて頂きます。前回記事のコードに、CO2センサを追加しました。出力結果がこちらです↓


Raspberry Pi とMH-Z19を使ったCO2(二酸化炭素)濃度のモニタリング


緑線がCO2ガスセンサになります。それらしい出力できていますね!一般に、CO2濃度は1,000 ppm未満に保つとよいそうです。日中窓を開けていたので、この日は1,000 ppmを超えることはありませんでした。窓を全て閉めると、2時間程度で1,000 ppmを超えてしまうようです。

換気した際に、湿度や温度のデータと連動して動くのも面白いですね。

換気が必要なタイミングを把握するために、積極的に使っていきたいと思います!!(^^♪