ArduinoにBluetoothモジュール、温度センサを繋げて、読み取った温度をAndroidスマホに送信するというものを作ってみた。
Arduino + 温度センサで温度センサの値をPCに取り込む方法
まずは肩慣らしにArduinoにつなげた温度センサの値をPCに取り込むということをやってみる。
必要な部品はリストのとおり。
<部品リスト>
・Arduino
・温度センサLM35DZ
・ジャンプワイヤ
次に揃えた部品を以下のように配線する。
<配線図>
Arduinoのスケッチは以下のとおり。
<Arduinoのスケッチ>
スケッチについてtemp = (a*5/1024*100)のところの考え方だけ説明しておく。
まず、5/1023について。Arduinoのデフォルト状態では、アナログ入力に入った電圧(単位は[V])、0~5[V]を0~1023の整数に読み替える動作をしている。
つまり、0Vなら0、5[V]なら1023という値となる。
なので、a*5/1023というのは、アナログ入力に入った電圧の値そのものを指すことになる。
次に*100の部分だが、これはLM35DZのデータシートから計算した値になる。データシートには10mVが1℃を表すとある。つまり1Vの入力値がある場合、温度は100℃ということになる。
これらを合わせて考えると最終的な式temp = (a*5/1024*100)が出てくることになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//はじめに初期設定 float a; //Arduino,A0ピンからの入力 float temp = 0; //温度 void setup(){ Serial.begin(1200); // シリアル通信速度 } //これ以降がA0ピンから取得した電圧を温度に換算して出力するためのコード void loop(){ a = analogRead(0); //A0ピンからの入力値をAに代入 temp = (a*5/1023*100); //温度を計算。計算式はArduinoの特性と温度センサのデータシートを基に決める Serial.println(temp);//温度を出力する delay(1000);//1秒=1,000m秒待つ } |
動作のさせ方
ここまでできれば後は動作させるだけ。
まずはスケッチの左上にある矢印をクリックし、スケッチをArduinoに書き込む。
(Arduinoは一度書き込んだスケッチ内容は上書きされるまで保持しておけるので、次回以降はわざわざPCに接続してスケッチ書き込みしなくてもArduinoをonすればこのスケッチ内容が実行される。)
これでArduinoによる温度読み取りはスタートしている。以降の動作で読み取った値を確認することができる。
スケッチの「ツール」→「シリアルモニタ」の順でクリックしていくと温度モニタが立ち上がる。
スケッチに1秒ごと(1,000m秒ごと)と記述したので、1秒ごとに温度の読み値が表示される。
上手く数字が出ず、□□□□□□□□等に文字化けしているときは、モニタ右下の通信レートを確認する。
この値はスケッチに書き込んだシリアル通信速度の値と同じでなければならない。
温度の正確性について
動作させてみると、温度表示は30℃ほどと出た。しかし4月の朝方の室内でそんなに高温な訳がない。
理由として考えられるのは、温度センサの精度が低いかその他の電気的な理由か・・・
温度センサはバルク品なので精度が低いことは十分考えられる。電気的な理由はググってみると電源が不安定な場合にこのようなことが起こると言っている人がいる。部品追加で改善する場合もあるようだが、今回は値を読めているのでこれで良しとしよう。
広告
ArduinoとBluetoothモジュールで温度センサの値をスマホに送信する
温度モニターに加えてBluetooth通信をするためのモジュールとAndroidスマホを用意する。
<部品リスト>
・Arduino
・温度センサLM35DZ
・ジャンプワイヤ
・Bluetoothモジュール HC-06
・Androidスマホ
次に揃えた部品を以下のように配線する。
<配線図>
配線はこちらの方のものを参考にした。
http://iot.keicode.com/arduino/bluetooth-temperature.php
配線のポイントを記載しておく。
・BluetoothモジュールのVCC電源にはArduinoの3.3V入力を配線すること
・BluetoothモジュールのTXをArduinoの10ピンに配線すること
・BluetoothモジュールのRXをArduinoの11ピンに配線すること
・参考サイトではBluetoothモジュールのRXをGNDと繋いでいたが、ここを繋ぐと上手くいかなかったため、GNDなしで配線した。(自分の繋ぎ方が間違っていただけかも。)
Arduinoのスケッチは以下のとおり。
<Arduinoのスケッチ>
ただ温度センサの値をAndroidスマホに垂れ流しでは面白くないので、スマホから「G」のテキストを送信したときに、温度センサの値を返してくれるという内容にした。
垂れ流しにしたければ、if(c == 'G'){}を削除し、delay(1000)等を追加すれば良い。
記述内容についていくつか説明しておく。
・SoftwareSerial btport(10,11) Arduinoの10,11ポートをシリアル通信用のポートとして使用することの宣言。
・btport.begin(9600) BluetoothモジュールとAndroidのボーレート設定。Androidは基本9600で通信する(らしい)ので、ここは9600とするしかない。
・c = btport.read()、if(c == 'G') 前者はAndroidスマホから送られてきたテキストをcに代入するコマンド。後者はそのcがもし「G」だった場合、{}の中を実行するというコマンド。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <SoftwareSerial.h> SoftwareSerial btport(10,11); float a; //Arduino,A0ピンからの入力 float temp = 0; //温度 void setup(){ Serial.begin(9600); btport.begin(9600); Serial.println("Conneted"); } void loop() { char c; if(btport.available()){ c = btport.read(); //以下の「G」の部分は文字数を多くしない方が良さそう。複数文字にすると動作不安定になる。 if(c == 'G'){ a = analogRead(0); temp = ((5 * a) / 1023) * 100; btport.println( temp ); Serial.println( temp ); } } } |
以上で、Arduino、PC側の準備は完了。Android側でもBluetoothと通信できる準備が必要。
Bluetooth通信するためのAndroidアプリ
アプリ制作の知識がないため、フリーのアプリを使用した。テキスト通信ができれば良いので何でも構わないが、Bluetooth Terminal HC-05というHC-05の使用に特化したようなアプリがあったため、こちらをダウンロードして使用。
完成
スマホから大文字の「G」を入力すると(下図左)、温度センサの値が返ってくる。(下図右)
電子部品ごとの制御を学べる! Raspberry Pi 電子工作実践講座