LoginSignup
0
2

More than 3 years have passed since last update.

市販のセンサで水素・一酸化炭素・酸素濃度の値を取得する

Last updated at Posted at 2021-04-26

Grove Multi Channel Gas sensor (v1)

Grove - Multichannel Gas Sensor
・Cで書かれたサンプルコードをAdruinoに流し込んだ時はうまく動くもののPythonで書かれたサンプルコードをRaspberryPi3Bで動かすと認識しない
・Cのコードを読んでPythonに書き直そうと頑張ってみるも無理
・I2Cアドレス初期値は0x04、接続に使ったGrove Base Hat for Raspberry Pi Zeroも初期値は0x04らしいことがadc.pyに書いてあった(さっき気づいた)
・いろいろ測定できるように見えてセンサはCO(とその他諸々)、NOx、NH3の3つしかない(自動車の排ガス用センサかな?)
・結局諦めて他のセンサを買った

MQシリーズとADコンバータ

・ガスセンサでぐぐると一番最初にヒットするMQシリーズを買ってみた
・ADコンバータが必要になるようなのでADS1015を買った
・ADS1015はサンプルコードがgitにあるので簡単に動いた
・MQ用のブレークアウト基盤はあった方がいい
・12bit(1024)はちょっと解像度が物足りないけどゲインを上げると壊しそうで怖い
・CO2センサーと違って校正済みではないのでガス校正が必要
・ゼロ(N2)とスパン(最大値)でいいかな…
・この辺までは先月にやったことなので詳細を忘れた(思い出したら書く)

Grove O2 sensor (MIX8410)

・センサー関係の実装を後回しにしているうちに酸素センサーも発売されていたので買ってみた
・公式のサンプルコードだとBase HatのADコンバータを介して値を取得する仕様のよう
・モジュールとしてインポートしてそのまま使えるのでは?→だめでした
・・値を取得するMix8410()が@propertyで守られていて使えないしコメントアウトしても動かない→なぜ???そもそもプログラミングの基本を習っていないので全然わからん。
・サンプルコードの中でBaseHatのADコンバータの値を取得するモジュールが使用されていたのでadc.pyの中身を読んでみるとコメント内にサンプルコードが書かれていたのでそれを参考にした
・・このときBase HutのADCのアドレスの初期設定は0x04と書かれていた(んんん???Multi Channel Gas Sensorの時に出てきた謎の0x04はこれじゃ…)
・Base HutのADCから直接値を取得できたので公式のサンプルコードを見ながら適当に数値の換算→公式サンプルコードを直接動かしたときとほぼ同じ動作を確認
・MQ用のADCのチャンネルまだ余ってるしこっちでいいよね…
・2個買ってしばらく動かして様子を見ると23とか28あたりで数値が安定しているのでこちらも自前でガス校正が必要っぽい
・ゼロ(N2)とスパン(大気)でいいかな

・プロトコルは以下
Getting Started with Raspberry Piを参考に進めた
・センサのチュートリアルにあるSetting Softwareに従ってGrove Base Hat関係のモジュールが入ったライブラリをインストール
・チュートリアルの手順に従ってサンプルコードで動作確認
・公式のサンプルコードをモジュールとして使うことができなかったので自分で書き直したコードが以下

Python
import time
from grove.adc import ADC

adc = ADC()
while True:
    value = adc.read(0)
    voltage = value*3.3/1024.0
    Mix8410Value = Voltage*0.21*100/2.0
    print(Mix8410Value)
    time.sleep(10)

とりあえずこれでしばらく動かしてセンサが公式のサンプルコードと同じように動作するか確認した。
けど値を取得するだけなら

from grove.adc import ADC
adc = ADC()
value = adc.read(0) #今回はBaseHatのA0チャンネルを読み取っている

で十分だと思う。
2つ買って値がずれていた上に20.9%前後ではないことからセンサに個体差がありかつ公式の換算式はあてにならないと考えられるためガス校正が必要

結論

・ADS1015にMQ-7, MQ-8, Mix8410を接続して値を取得する(Base Hatは使わない)
・全てのセンサーでガス校正必要
・・ゼロガス(N2)とスパンガス(1%添加or大気)で校正をすればいけるかなぁ
・アナログセンサとADCの間ははんだ付けが必要だよねやっぱり
・・ユニバーサル基盤と3Dプリンタでセンサユニット作らなきゃ…
・センサをブレークアウト基盤に刺すところは導電グリスで誤魔化せないかな…

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2