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

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

執筆者:

関連記事

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

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

AndroidでUSBシリアル通信(2021/01/09版)ライブラリ最新版での動作確認

以下から始まる一連の記事でAndroidでのUSBシリアル通信について書きました。実際に開発案件につながったり、お問い合わせを頂いたりしているテーマです。 AndroidでUSBシリアル通信(その1) …

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

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

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

Androidスマートフォン、タブレットでUSBシリアル通信を行う方法についてです。AndroidでのUSBシリアル通信の方法は何通りかあると思いますが、今回はAndroidのUSBホスト機能とオープ …

感染症対策のためのIoT技術(その6)M5StickC PIR Hat(AS312搭載)人感センサー

感染症対策のためのIoT技術について書いています。今回は人感センサーを使ってみました。使ったのは M5StickC に直接接続して使うタイプで比較的簡単に使うことが出来ます。スイッチサイエンスさんの販 …