株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

Android Arduino

温度管理システム的なものを作ってみる(その2)Arduinoでの温度取得からスマホへ送信

投稿日:2014年7月6日 更新日:

0001「温度管理システム的なものを作ってみる」の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変換出来ないトラブル

接続した状態が以下です。
IMG_0914

センサーのVOUTととArduinoのAnalogを直結する場合では接続は難しくないと思います。5VとGNDをそれぞれ接続して、ここではセンサーの出力をArduinoのアナログOに接続しています。但しですが以下の画像はデータシートからの引用です。普段から見慣れている方は問題ないかもしれないですがこの赤枠のBOTTOM VIEWという表現は下から見た配置という意味でしょう。これを意識しないで上から見た配置と考えると+VSとGNDが反対になります。反対に接続するとLM35DZが触れないぐらい高熱になりました。どこかで保護が働いたのか何とか無事のようです。念のためですが気を付けて下さい。
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度単位でしか取得出来ていないですが実験ということでご了承下さい。

0007

今回はここまでです。次回は、この温度データをスマホ(Android)のアプリで読み込みます。




AdSense

AdSense

-Android, Arduino

執筆者:

関連記事

温度センサADT7410(その2)Arduinoでの利用

温度センサADT7410の2回目です。前回はI2C通信の簡単な概要とADT7410モジュールをRaspbery Piに接続してアドレスの確認まで行いました。今回はArduinoでADT7410を使って …

Arduino UnoでSPI通信(その2)温度センサADT7310

Arduino UnoでSPI通信の2回目です。前回のArduino UnoでSPI通信(その1)Arduino2台で通信ではArduino Uno2台でSPI通信を確認しました。今回は実際のデバイス …

AndroidでUSBシリアル通信(その2)ライブラリサンプルのArduinoスケッチ

AndroidでUSBシリアル通信の2回目です。前回はハードウェア構成、ソフトウェア構成等全体的な内容について書きました。今回はAndroidの通信相手となるArduinoのスケッチの動作確認を行って …

Arduino CC3000 WiFi シールドを使ってみた

前回の記事では、Arduino Ethernetシールドの旧製品版を使ってみました。今回は、CC3000 WiFi シールドを使ってみました。以下の製品です。 CC3000 WiFi シールド 以下は …

AndroidでUSBシリアル通信(その4)ライブラリサンプルの内容

AndroidでUSBシリアル通信の4回目です。今回は、前回動作確認をしたライブラリサンプルの内容、つまり設定ファイルやプログラムの構成、プログラムの仕様等を見ます。 ライブライは以下です。より詳細は …