スキップしてメイン コンテンツに移動

M5Stackで、においセンサー(TGS2450)を使ってみる。(LCDに表示編)

今回は、においセンサー(TGS2450)から取得したデータをM5StackのLCDにグラフ表示をしていきます。

今回主に使用したもの

  • M5Stack
  • 10Ω抵抗 5本
  • Pch MOSFET 2SJ334(スイッチとして利用)
  • M5StackSideBB(ブレッドボード)

M5Stackのピンはそのままだと配線するとき手間がかかるかと思いますので、今回はM5StackSideBBを利用しました。
ブレッドボードも付いているので、手軽に電子工作できるので個人的にオススメです。

SideBB for M5Stackwww.switch-science.com


諸注意

本ブログのプログラムはArduinoIDEまたはPlatformIOでM5Stackの開発ができる状態であること前提のものですので、各自導入をお願いします。
過去にWindowsのArduinoIDEでM5Stackの開発環境を構築する記事があるので、参考にしてください。

においセンサー(TGS2450)について

今回使用したセンサーは秋月電子通商で購入できます。

http://akizukidenshi.com/catalog/g/gP-00989/akizukidenshi.com

TGS2450には4つのピンがあり、使用するのはそのうちの3本でヒーターを温めるピン、センサー情報を得るピン、GNDがあります。
ここで注意したいのは、ヒーター電圧は1.6Vと記述されているのでM5Stackで利用するときは分圧して3.3Vを1.6V近くまでに降圧することをお勧めします。
TGS2450のセンサーは可変抵抗になっており、データシートには5.62kΩ〜56.2kΩの間を抵抗が変化し、においが強いとより低くなると記述されていました。
よって、センサーの値をM5Stackで取得するにはセンサー抵抗と外部に接続する任意の値の抵抗による分圧回路によって求めることができます。
TGS2450の動作方法は、250ms周期でセンサーに電圧を5ミリ秒on、245ミリ秒offの状態にしてヒーターは8ミリ秒on、242ミリ秒offにすることで値を取得します。


配線

においセンサーとM5Stackの配線

上の図が配線図です。
30Ωの抵抗は10Ωの抵抗を三つ直列に接続して作成しました。
また、上部の抵抗10Ω二本で3.3Vを分圧して1.65Vに降圧しています。
においセンサーのヒーターは通電時間が長いと故障してしまうようなのでMOSFETを使って通電時間を制御していきます。
GPIOで直接ヒーターを制御もできますが、ヒーター電流は138mAを必要としますのでGPIOでは電流不足になってしまいます。

* 注意:配線中は、意図しない電気がヒーターに流れてしまうかもしれないのでM5Stackの電源を落とすか、ヒーターピン(センサーの4ピン)とMOSFETの線を外しておくことを勧めます。


プログラム

M5Stackで電圧を測るときはArduino Unoと同様AnalogRead関数を用いて測定していきます。
しかし、Arduino Unoと異なる点もあるためまとめてみました。

  • 測れる電圧は3.3Vまで
  • 分解能が12bitであるため値は0-4095の間である

まずArduino Unoでは5Vまでの電圧を測ることができましたが、M5Stackでは3.3Vまでしか測れないので5Vの電圧を測定するピンにかけると故障の原因になるのでやめましょう。
また分解能がデフォルトでということは0-4095までの値がAnalogRead関数から帰ってきますが、これはArduino Unoよりも細かく分析できることを示しています。

ArduinoUnoの場合(分解能10bitで0-1023の値)

5V / 1023(最大値) = 約0.0049(約4.9mV) = 値が1だった時の電圧
M5Stackの場合(分解能12bitで0-4096の値)

3.3V / 4095(最大値) = 約0.0008(約0.8mV) = 値が1だった時の電圧

Arduino Unoでは値が1上がると約4.9mV上昇したことになり、M5Stackでは約0.8mV上昇したことになるのでより細かい電圧の変化が観測できることがわかります。
よって分解能のbit数が大きくなれば細かく電圧測定ができることがわかったかと思います。
Arduino UnoでもM5Stackのように細かく電圧を計測するためにanalogReference関数などが用意されていますが、ここではあえて触れないでいきます。

さて、本題のプログラムは下記のリポジトリからクローンまたはソースコードをコピペして利用できます。
プログラムは、PlatformIO向けで作成されていますが、ソースコードをそのままArduinoIDE環境にコピペしても動作します。

* 注意:プログラム書き込み中もヒーターに電気が流れてしまうかもしれないので、ヒーターピンとMOSFETの配線は外しておきましょう。

github.com

動作確認

それでは起動してみましょう。
初めはにおいのないところでも下の図のように値が安定しないかと思いますが、これはセンサーの準備ができていない状態なので数分から数時間まで値が安定するまで放置しましょう。

においセンサーのキャリブレーション

ある程度時間が経つと下の図のように値が安定してグラフの線が一直線になったら準備完了です。

数値が安定している

においの元として、Halakeにあった芳香剤を用意しました。

においの元

芳香剤の棒を近づけるとグラフの数値が下がっていくのが確認できるかと思います。

動作状況

プログラムの補足として、ソースコード冒頭でマクロ定義されているGRAPH_MAXGRAPH_MINの値を0-4095の間で書き換えるとグラフ上の変化の見易さを調節できます。


まとめ・学んだこと

  • 分解能のbit数が大きいと細かく電圧を分析できる。
  • M5Stackの分解能はデフォルトで12bit。
  • においセンサーには動作安定までの時間が必要。
  • 次回はデータを外部に送信してグラフに表示する。

コメント

このブログの人気の投稿

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その2

前回の記事 に引き続きPhaser3+Typescriptを使って RPG の基礎を作っていきます。 この記事は前回の記事を呼んだ前提で説明していきますので、ぜひそちらを先に読むことをお勧めします。 また、今回の記事は前回よりも難易度と内容量が上がっていますが、記事の最後に作業後の リポジトリ のリンクがありますので、そちらを先にダウンロードしてそちらと比較しながら学習することができます。 前回まで作成した状態のプログラムが以下の リポジトリ からダウンロードできますので前回まででうまくいっていない方は参考にしてみてください。 github.com 最終目標(再掲) ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・ゲームの作り方の断片を知る ・キャラの表示できるようにする ・キャラを移動できるようにする ・当たり判定をつける ・ NPC の追加してみる ・話しかけられるようにする 開発前提(再掲) ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール(再掲) ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 当ブログ仕様の画像素材の注意点 当ブログで使用する画像素材は『 ピポヤ倉庫 』より許可なしで無償再配布・改変が認められたものを改変して作成されたものです。 中には許可なく再配布・改変してはいけない素材もインターネット上には多く存在するのでそれらを使用するときは十分に規約を呼んでから使用しましょう。 1. キャラの表示 想定画面 今回は、はじめにキャラつまり操作

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その1

今回はPhaser3とTypescriptを使って簡単な RPG ゲームを作る方法を紹介していきます。 内容はPhaser3およびゲーム作りについての記事なので、Nodejsの周辺モジュールなどの説明は一部省いての説明になりますのでご了承ください。 またこの記事では Phaser2 ではなく Phaser3 を使用するので注意してください。 この記事は二部構成になりますので、この記事を読んだ際はぜひ次の記事も読むことをお勧めします。 最終目標 ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・開発環境を整える ・Phaser3の開発構成を知る ・スタート画面を作る ・マップ表示をさせる 開発前提 ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 1. 最低限の開発環境の準備 今回最低限の環境を整えるために、『Typescript + Phaser3』の開発テンプレートを github リポジトリ で公開しました。 以下からZIPをダウンロードするか、 git clone コマンドで各自環境に展開してみてください。 ここから先は リポジトリ のプログラムを元に説明していきます。 github.com 展開するとファイル構造は以下のようになっているかと思われます。 注: 他にもファイルやフォルダがあるかと思われますが、表記されているのは今回使うものになっています。 - src/ (これから書くプログラムの保存領域)