「温度管理システム的なものを作ってみる」の2回目です。前回は全体的な内容についてでした。今回はArduinoでの温度取得とスマホへの送信についてです。Arduinoは、Arduino UNOを使っています。スクリーンショットはArduino IDEで今回のスケッチを開いている状態です。
以下の温度データの流れの中で今回はスマホまでについてです。
Arduino(温度センサ LM35DZ) → USBケーブル(USBホストケーブル) → Android(スマホ) → (インターネット) → Cloud(Microsoft Azure)
温度データ取得処理
ここではArduinoにブレッドボード上の温度センサを接続して温度を取得します。温度センサはLM35DZを使いました。この記事を読んで頂いている方にはおなじみの方も多いと思いますが以下の秋月さんで買いました。
高精度IC温度センサ LM35DZ
上記のページから引用させて頂きますと主な仕様は以下です。
・測定温度範囲:0~100℃
・精度:±1℃
・温度係数:10.0mV/℃
・電源電圧:DC4V~20V
この範囲で摂氏(℃)に比例した電圧を出力します。
◎例:
0℃→0V
20℃→200mV
0℃で0Vを出力して、1℃あたりで10mV増加するという分かりやすい仕様だと思います。ただしそうすると100℃で1Vということなので、5Vまでを使って精度向上となるとオペアンプを使うことになると思います。このあたりも含め詳細は以下の関連サイト等を参照して下さい。回路となると私では難しくなってくるのでここではとりあえずVOUTをAnalog0に直結で実験します。
温度センサー使ってみる
Arduinoで温度計(LM35DZ)
AVR(Arduino)にLM35温度センサをつなげた場合に正しくA/D変換出来ないトラブル
センサーのVOUTととArduinoのAnalogを直結する場合では接続は難しくないと思います。5VとGNDをそれぞれ接続して、ここではセンサーの出力をArduinoのアナログOに接続しています。但しですが以下の画像はデータシートからの引用です。普段から見慣れている方は問題ないかもしれないですがこの赤枠のBOTTOM VIEWという表現は下から見た配置という意味でしょう。これを意識しないで上から見た配置と考えると+VSとGNDが反対になります。反対に接続するとLM35DZが触れないぐらい高熱になりました。どこかで保護が働いたのか何とか無事のようです。念のためですが気を付けて下さい。
スマホとの通信
スマホ(Android)との通信は、PC上での開発に利用するUSBケーブルをそのまま使い、Androidのホストケーブル経由でスマホへ送信します。Arduino上のプログラムとしては通常のシリアル通信です。このあたりは以下のページから詳細を書きました。
AndroidでUSBシリアル通信(その1)ハードウェア・ソフトウェア構成等
ここでは、Arduinoが、T(大文字)またはt(小文字)を受信したら、LM35DZからアナログ値を取得してシリアル通信で送信するという処理にしました。
スケッチ全体
上記の処理のためのスケッチ全体(プログラム)は以下のようにしました。
/* LM35DZを用いた温度測定(0℃~100℃) T または t を受信したらシリアルモニターに摂氏で表示させる */ int A_inPin = 0; // アナログ入力ピン番号 float A_val; // アナログ入力値(1Vまでなので、0~203) float tempC = 0; // 摂氏値( ℃ ) void setup() { // シリアル通信速度 Serial.begin(9600); } void loop() { boolean bSW = false; char c; //文字(コマンド)の受信 if (Serial.available()) { c = Serial.read(); //tまたはTを受信したらスイッチオン if(c == 't' || c == 'T'){ bSW = true; } } //スイッチオンなら Analog0からアナログ値取得 if(bSW){ A_val = analogRead( A_inPin ); //温度に換算して送信 tempC = ((5 * A_val) / 1024) * 100; Serial.println( tempC ); } //多少長め delay(1000); }
単体テスト
単体テストというほどのこともないですが、Arduino IDEのシリアルモニタからTの文字を送信して結果を確認しました。やはりAD変換の分解能の関係で0.5度単位でしか取得出来ていないですが実験ということでご了承下さい。
今回はここまでです。次回は、この温度データをスマホ(Android)のアプリで読み込みます。