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

システム開発エンジニアの西田五郎が運営しております。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

執筆者:

関連記事

SHARP製スマホSHL23でBLE通信を試してみた

SHARP製のスマホSHL23でBLE(Bluetooth Low Energy)通信のプログラミングを試してみました。わざわざSHARP製のスマホSHL23と書かないで普通にAndroidのスマホと …

温度管理システム的なものを作ってみる(その1)システム概要

「温度管理システム的なものを作ってみる」の1回目です。AndroidでUSBシリアル通信の記事を書きました。(1回目はこちらから。)次は、その少し応用的な内容で書きたいと思いました。そこで、温度センサ …

温度管理システム的なものを作ってみる(その5)AndroidからCloudへの送信

温度管理システム的なものを作ってみるの5回目です。前回はCloud(Microsoft Azure)での処理について書きました。そのCloudの処理の温度データ登録処理に送信するためのAndroidの …

Arduino IDEのWindows10でのインストール(2020/05/04版)

現時点でのArduino IDEのWindows10でのインストール方法についてです。 Arduinoでの開発を始めるための最初の難関というほどでもないかもしれないですが、開発環境であるArduino …

温度管理システム的なものを作ってみる(その3)Androidでの温度取得

「温度管理システム的なものを作ってみる」の3回目です。前回はArduinoで温度データを取得する内容についてでした。今回はそのArduinoから温度データを取得するスマホ(Android)のアプリにつ …