温度に比例して電圧を出力する温度センサーを用いて、Aruduino基板で温度を検出する方法を紹介します。IoTでモノから得られる情報がクラウドに保存されたりしていくわけですが、元となる情報はセンサーからの情報です。今回は温度センサーを紹介しますが、この他にも照度センサー、圧力センサー、加速度センサー等、様々なセンサーがあります。この記事を読んでいただけると、センサーの情報がどのように取得されるかのイメージが持てるようになると思いますので、是非読んでみて下さい。
Aruduinoの購入先と、開発ツールの簡単な使い方、Lチカすることを紹介している記事です。Aruduinoに触れたことが無い方は、是非こちらの記事も参考にして下さい。
使用する温度センサー TMP36
ANALOG DEVICE社製のTMP36という温度センサーを使用したいと思います。購入先の情報を載せておきます。
TMP36の電圧出力仕様
供給電圧 : 2.7V ~5.5V
温度出力特性:下図参照(bの赤線)
50℃で1V出力、100℃で約1.5V出力、のように読み取れます。この電圧をAruduinoで読み取り、電圧から逆に温度に変換することで温度が分かります。
センサーとAruduinoの接続
フレッドボードを用い、温度センサーとAruduinoを次のように接続します。この温度センサーは、丸みを左に向けた時に上から見て、上の足からGND、温度出力、5V入力となります。今回は温度出力をアナログ入力のA0チャンネルで受けます。
フレッドボードはこちらから購入出来ます。簡単に配線が出来るので、電子工作を色々テストしてみたい方は購入されていて損はないと思います。
フレッドボードの内部の配線状態を下の記事で紹介しています。
プログラム(スケッチ)の作成
では、プログラムを作成していきます。Aruduino IDEを立ち上げて、次のプログラムを作成して下さい。
const int PIN_ANALOG_INPUT = 0;
void setup() {
Serial.begin( 9600 );
}
void loop() {
int i = analogRead( PIN_ANALOG_INPUT );
float f = i * 5.0 / 1023.0;
float temp = (f*1000.0-500.0)/10.0;
Serial.print(f,4);
Serial.print(" is ");
Serial.println(temp);
delay( 1000 );
}
温度センサーの出力をA0で受けるようにしたので、PIN_ANALOG_INPUTの値は0になります。チャンネルA1で受けるのであれば、1をセットすることになります。
Serial.beginやSerial.printは、Aruduino IDE(パソコンのUSBポート)から Aruduinoとシリアル通信を行う処理です。Serial.printで引数に値をセットすると、Aruduino IDEのシリアルモニタでその値をモニタすることが出来ます。このシリアル通信でIDEに実行状態を表示するのは、よくデバッグの際に行いますので覚えておきましょう。
Aruduinoのアナログ入力は、5Vの入力で1023という数字に変換された状態で取り込まれています。Aruduinoには、ATmegaというシリーズのマイコンが搭載されていますが、マイコンはアナログ電圧をそのままアナログ値として扱うことは出来ません。アナログ値をある数字に変換しないことには、マイコンの中で処理することが出来ないのです。アナログである電圧をデジタルに変換することを、アナログーデジタル変換=AD変換と呼びます。
さて、センサーからの出力はアナログ電圧です。温度に比例した電圧がA0チャンネルに入力されていて、int i = analogRead( PIN_ANALOG_INPUT)の記述で、A0の電圧がAD変換されて変数 i に格納されています。最終的に知りたいのは温度ですので、AD変換された値を電圧相当に戻し、温度が何度の時にその温度センサーの出力電圧になるのか、という風に変換して温度値を求めることになります。
float f = i * 5.0 / 1023.0;の処理で、A0チャンネルに入力されている電圧、つまり温度センサーが出力している電圧を求めます。
次に、float temp = (f*1000.0-500.0)/10.0;の処理で、電圧を温度に逆換算しています。この式は上で紹介しているデバイスの特性から来ています。
プログラムの実行と結果の確認
プログラムが出来たら、下のようにマイコンボードに書き込むを押して下さい。コンパイル(Aruduinoのマイコンが実行出来るような形式に変換)し、プログラムが書き込まれます。
次に、下図のようにシリアルモニタを起動します。繰り返しになりますが、 シリアル通信でAruduino IDEで実行状態をモニタするのは、よくデバッグの際に行いますので覚えておきましょう。
シリアルモニタで次のように温度が表示されていれば成功です。
お疲れ様でした。
温度センサーの出力をAruduinoに取り込んで、温度のモニタが出来ました。温度センサー以外のセンサーも、物理量に対応する電圧が出力されるものは同じ用な流れでモニタすることが可能です。
最後までお読みいただきありがとうございます。