【Raspberry Pi Picoでシンプルに】TGS2450センサでにおいを測定

pico-tsg-topRaspberry Pi

本記事の内容

Raspberry Pi PicoとTGS2450匂いセンサを用いて、MicroPythonで空気中のメチルメルカプタンや硫化水素などの臭い分子を測定する方法を紹介します。

シンプルな配線とコードをモットーに、TGS2450においセンサの動作原理と合わせて解説を作成しました。

必要なもの

created by Rinker
Raspberry Pi
¥919(2024/04/16 11:13:37時点 Amazon調べ-詳細)

TGS2450センサは税込み300円で秋月電子にて購入しました。(秋月電子の購入サイト

当初はArduinoで使用したもの(前回の記事)を転用しようとしましたが、誤った配線で通電して故障させてしまったため、後日秋葉原まで買いに走りました。常日頃、予備をストックしておく心がけが大切です。

その他、各種抵抗とトランジスタ(TTA008B 80V2A)も必要になります。(秋月電子の購入サイト

TGS2450においセンサの動作原理について

TGS2450センサには、センサ出力用の3ピンとヒーター入力用の4ピンがあり、臭い強度を測定する際は、センサ信号の取得と感ガス素子部の加熱を250ms間隔(4Hz)で繰り返します。

  • 信号無し:237ms
    PinHeater.value(0),PinSensor.value(0)
  • センサ信号の取得:5ms
    PinHeater.value(0),PinSensor.value(1)
  • 感ガス素子部の加熱:8ms
    PinHeater.value(1),PinSensor.value(0)

センサ信号の取得(オレンジ枠)

センサ信号の取得時はPinSensor.value(1)として、3ms後にGP26のアナログ値を読み取ります(オレンジ枠)。16bitの0~65536の値で読み取られるため、3.3/65536を掛けて正しい電圧値に変換する必要があります。

センサ抵抗値は5.62kΩ~56.2kΩで臭い分子が多いほど抵抗値が小さくなるので、上記配線にて理論上は、GP26の分圧値はにおいに応じて以下のように変化します。

においGP28と挟む抵抗センサ抵抗値GP26分圧値
臭い1kΩ5.62kΩ2.80V
臭くない1kΩ56.2kΩ3.24V

よくよく考えると、2.80V~3.24Vの変化範囲では測定誤差の影響が大きくなってしまうため、私はGP28と挟む抵抗を10kΩに代えて配線を決定しました。

匂いGP28と挟む抵抗センサ抵抗値GP26分圧値
臭い10kΩ5.62kΩ1.18V
臭くない10kΩ56.2kΩ2.80V

感ガス素子部の加熱(赤枠)

続いて、感ガス素子部の加熱時はPinHeater.value(1)として、トランジスタのベースに電圧を印加します(赤枠)。そうすることで、Raspberry Pi Picoでは直接制御できない5Vの電圧をヒーターに加えることができます。

あとは237msの間隔を置いて、ひたすら繰り返すだけです。

配線図

簡素化させてはいますが、それでも写真からは配線が読み取りづらいです。

プログラムコード

プログラムコードはTanuki_Bayashin’s diary様のブログを参考に加工しています。本当は配線も真似たいところですが、トランジスタを用意できず配線スキルも不足していたため、秋月電子のサイトを参考にした簡易配線で作成しています。

import machine
import utime

# ヒーター:GP16 センサー:GP28 に割り当て
PinHeater = machine.Pin(16, machine.Pin.OUT)
PinSensor = machine.Pin(28, machine.Pin.OUT)

# A/D 変換 初期化
PinOutput = machine.ADC(26)
conversionFactor = 3.3/65535

PinHeater.value(0)    # Heater OFF
PinSensor.value(0)    # Sencor Pullup OFF

# メインルーチン
while True:
    utime.sleep(0.237)
    PinSensor.value(1)    # センサーへ給電
    utime.sleep(0.003)    # 250ms 中 3ms ON

    # センサーの電圧値を取得
    voltage = PinOutput.read_u16() *  conversionFactor

    utime.sleep(0.002)    # 2ms ON (合計 5ms ON)
    PinSensor.value(0)    # センサー OFF

    PinHeater.value(1)    # 8ms ヒーター ON
    utime.sleep(0.008)
    PinHeater.value(0)    # ヒーター OFF

    print('voltage: ', voltage) # shell へ印字

測定結果(まとめに代えて)

マーカーペンを近づけた結果、GP28の分圧値が2.1前後から1.8まで下がったことが分かります。(計算よりも変化が小さいので、もしかすると感度の悪い個体の可能性があります。)

後日追記

センサの故障を疑って、TGS2450センサをもう一つ用意して、再度測定し直してみました。臭い物質がない状態では、GP28の分圧値は2.1V付近で安定し、マーカーペンを近づけた結果、1.4~1.7V程度まで下がっていることが分かります。

以上、Raspberry Pi PicoでTGS2450センサを用いてにおいを測定する方法でした。是非ご参考にしてください。

コメント