秋月電子で300円で購入できるにおいセンサTGS2450を使ってみます。
マイコンはSeeeduino XIAOを使います。
TGS2450はにおいセンサの中でも手に入りやすく
電子工作でよく使われていますが、扱い方に一癖あるセンサです。
注意点も併せて紹介していきます。
- 壊れやすい
→ センサ内にあるヒーターへの通電時間を守る - 慣らし運転に時間がかかる
→ 最初はセンサ出力が安定するまでに5時間かかりました!
ハードウェアの接続
回路図とセンサー基板


回路図は秋月電子のHPにあるリファレンス回路を参考にしています。
センサ、抵抗、トランジスタはユニバーサル基板にまとめました。
LEDは「においを検出したら光る」目的で載せましたが今回は使っていません。
抵抗の定数は手元にあるもので組んだので若干テキトーです。
3.3V, GNDはSeeeduino XIAOの電源とグラウンドに接続します。
HEAT, SENS, AOUTは任意のGPIOに接続します。
AOUTはアナログ値で読み取るのでアナログ入力可能なピンに接続してください。
(Seeeduino XIAOは全Pinアナログ入力対応しているのでどこでもOK)
回路図の解説
TGS2450はセンサ部分を加熱して使用します。
加熱のためにヒーター(抵抗Rh)に電流を流して熱を発生させますが、
ヒーター電流は138mAとなっておりGPIOから供給するのでは電流が足りません。
なので電源3.3Vからトランジスタ(TTA0088)経由で電流を引きます。
HEATピン(GPIO)でこのトランジスタをオン/オフして電流を流したり止めたりします。
抵抗R1, R2の役割については以下のサイトで分かりやすく解説されていました。
(このサイト勉強になる・・・!)
ヒーターにかかる電圧は1.6Vとされているので
RhとR4の分圧でヒーターにかかる電圧が1.6VになるようにR4の定数を調整します。
センサーに臭気分子がどのくらい付着したかによってRsの抵抗値が変わるので、
この抵抗値の変化を読み取ることでにおいレベルを判断することができます。
読み取るときにはトランジスタはオフにした状態でSENSピン(GPIO)をHighにし、
R3とRsの分圧値を読み取ることで抵抗値の変化を判断します。
Seeeduino XIAOと接続する

Seeeduino XIAOの3.3V, GND, GPIOと接続するとこんな感じになりました。
ソフトウェアをつくる
#define PIN_HEAT 1
#define PIN_SENS 2
#define PIN_AOUT 3
void setup()
{
pinMode(PIN_HEAT,OUTPUT);
pinMode(PIN_SENS,OUTPUT);
digitalWrite(PIN_HEAT,HIGH);
digitalWrite(PIN_SENS,LOW);
Serial.begin(9600);
}
void loop()
{
int val = 0;
delay(237);
digitalWrite(PIN_SENS,HIGH);
delay(3);
val = analogRead(PIN_AOUT);
delay(2);
digitalWrite(PIN_SENS,LOW);
digitalWrite(PIN_HEAT,LOW);
delay(8);
digitalWrite(PIN_HEAT,HIGH);
Serial.println(val);
}
コードは秋月電子のHPのサンプルコードほぼそのままです。
HEAT, SENS, AOUTをそれぞれGPIO1, 2, 3にしました。
ヒーターへの通電は8ms通電して242ms休む、の繰り返しにします。
通電しっ放しにするとセンサが壊れてしまうので注意してください。
実行してみる
Arduino IDEにある「シリアルプロッタ」の機能を使うと
読みだした結果がグラフで見れるのでわかりやすいです。

最初は出力が安定せず、じわじわと電圧が上がっていきます。
グラフが横ばいになるまでしばらく待ちます。
初めて使う時や久々に使う時は安定するまでに数時間かかります。

800くらいで出力が安定してきたのでアルコールを近づけてみました。
するとグッとグラフが下がり、においを検出しているようです。
このセンサが検出できる成分はメチルメルカプタンや硫化水素です。
コメント