以前CO2(二酸化炭素)濃度をやってみました。今回はCO(一酸化炭素)です。
安価で反応のいいセンサーとしてMQ-7 がよく使われているようです。
やってみます。
Arduino Uno で一酸化炭素(CO)濃度を測ってみる
濃度を測定する場合、AO (Analog Out) 端子を使います。
この場合、Analog – Digital コンバーターが必要ですが、Arudino Uno ならライブラリーで対応できます。
取得したアナログデータをppmに変換します。
Arduino に接続(実際に使ったのはUno の互換機でしたが無問題でした)。
ライブラリは以下からダウンロードしておきます。
ダウンロードしたファイルは解凍後、改名
MQ7-Library-master -> MQ7
以下のフォルダーへコピー。
Windowsの場合
C:\Program Files (x86)\Arduino\libraries\MQ7
ラズパイの場合(ユーザー名がpiの場合)
/home/pi/Arduino/libraries/MQ7
新規にスケッチを作成してライブラリをインクルードします。
こんな感じです。
センサーから得たアナログ値をppmに変換するコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include "MQ7.h" const int AOUTpin=0;//the AOUT pin of the CO sensor goes into analog pin A0 of the arduino const int DOUTpin=8;//the DOUT pin of the CO sensor goes into digital pin D8 of the arduino //初期化 MQ7 mq7(A0, 5.0); void setup() { Serial.begin(115200); // シリアル通信の準備をする while (!Serial); // 準備が終わるのを待つ pinMode(DOUTpin, INPUT);//sets the pin as an input to the arduino } void loop() { Serial.print(mq7.getPPM()); Serial.println(""); delay(1000); // 1秒毎に更新 } |
転送速度を115200に合わせてシリアルモニタやシリアルプロッタで表示確認してみます。
この2つは共存できませんので、どちらか一方で表示します。
シリアルプロッタを開いてみます。
シリアルモニタで見てみます。
ラズパイZero で一酸化炭素を検知してみる
MQ-7 のDO(Digital Out) 端子を使います。
DO から得られるものは「検出できた/できない」の2値で、結果はLEDの点滅(Lチカ)で示します。
こういう結線になります。
電源電圧は3.3Vでも5Vでもどちらでもいいようです。
【co.py】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import time, sys import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) def action(pin): print ('** Carbon monoxide detected!! **') return GPIO.add_event_detect(7, GPIO.RISING) GPIO.add_event_callback(7, action) try: while True: print ('Sensor Active') time.sleep(1.0) except KeyboardInterrupt: GPIO.cleanup() sys.exit() |
Leave a Reply