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

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

*

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

      2014/09/23

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)のアプリで読み込みます。




 - Android, Arduino

AdSense

AdSense

  関連記事

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

前回の記事では、Arduino Ethernetシールドの旧製品版を使ってみまし …

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

温度センサADT7410の2回目です。前回はI2C通信の簡単な概要とADT741 …

無線マイコン ToCoStick(トコスティック)をAndroidで使ってみた

無線マイコンの ToCoStick(トコスティック)をAndroidスマホで使っ …

AndroidでUSBシリアル通信(その3)ライブラリサンプルの通信確認

AndroidでUSBシリアル通信の3回目です。前回は以下のライブラリのArdu …

Arduino CC3000 WiFi シールドでHTTP POST

Arduino CC3000 WiFi シールドでHTTP POST通信を試して …

AndroidでUSBシリアル通信(その1)ハードウェア・ソフトウェア構成等

Androidスマートフォン、タブレットでUSBシリアル通信を行う方法についてで …

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

Arduino UnoでSPI通信の2回目です。前回のArduino UnoでS …

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

「温度管理システム的なものを作ってみる」の1回目です。AndroidでUSBシリ …

Arduino Ethernetシールド(旧製品)を使ってみた

Arduino Ethernetシールド(旧製品)を使ってみました。Arduin …

ESP-WROOM-02でもセンサネットワーク稼働試験

ESP-WROOM-02でもセンサネットワークを稼働してみます。ESP-WROO …