Bluetooth対応温度モニター:Arduino NanoとHC-06でスマホ監視
必要な部品と材料
| 部品 | 数量 |
|---|---|
| Arduino Nano R3 | 1 |
| ジャンパーワイヤー | 1式 |
| HC-06 Bluetoothモジュール | 1 |
| NTCサーミスタ | 1 |
| 抵抗 10kΩ | 1 |
| 抵抗 1kΩ | 1 |
| 抵抗 2.21kΩ | 1 |
必要な工具
- はんだごて(任意)
- 3Dプリンター(ケース製作用、任意)
使用アプリ・サービス
- MIT App Inventor 2(Androidアプリ作成)
プロジェクト概要
Arduino NanoとNTCサーミスタで温度を測定し、HC-06 Bluetoothモジュール経由でAndroidアプリにデータを送信する温度モニターシステムを構築します。
必要な材料
- Arduino Nano
- NTCサーミスタ(25°Cでの抵抗値を確認のこと。β定数計算に必要)
- 抵抗:2kΩ、1kΩ、サーミスタと同程度の抵抗値のもの1つ
- HC-06 Bluetoothモジュール
- ジャンパーワイヤー各種
1. サーミスタ用分圧回路の組み立て
図1のように、サーミスタと既知抵抗で分圧回路を作り、サーミスタの抵抗値(温度依存)をArduinoのアナログ入力で読み取ります。

図1 サーミスタ抵抗値測定用分圧回路
この回路により、未知抵抗(サーミスタ)の両端電圧降下を測定し、既知抵抗値からサーミスタ抵抗を算出します(図2のコード部分)。
raw = analogRead(analogPin);
if(raw) {
ratio = raw * Vin;
Vout = (ratio)/1024.0;
ratio = (Vin/Vout) - 1;
R2 = R1 * ratio;
}
図2 サーミスタ抵抗値算出コード
2. β定数式による温度変換
得られた抵抗値をβ定数式で温度に変換します(図3)。
注意: お使いのサーミスタのβ値と25°Cでの抵抗値(Ro)はデータシートで確認してください!
Temp = Beta / log(R2 / (Ro * exp(-Beta/To)));
Temp = Temp - 273.15; // ケルビンから摂氏へ
図3 温度変換コード
3. Bluetoothモジュールの接続
HC-06モジュールの接続は図4の通り。ArduinoのTX(5V)をモジュールのRX(3.3V許容)に接続するため、分圧回路が必要です。

図4 HC-06モジュール接続回路図
4. データ送信とアプリ側処理
シリアル通信で温度データを送信します。この例では25〜75°Cの範囲を監視し、高温(74°C以上)では約300秒カウントしてからメッセージを変更します(図5)。
void setup() { Serial.begin(9600); }
void loop(){
if(Temp >= 74) {
for (int i = 0; i <= 30; i++) {
Serial.print("Temperature >= 74 °C");
delay(10000);
}
Serial.print("Heating Complete");
delay(10000);
} else if (Temp <= 26){
Serial.print("Temperature <= 25 °C");
delay(10000);
} else {
Serial.print("Temperature: ");
Serial.println(Temp);
delay(10000);
}
}
図5 シリアル初期化と値送信コード
5. 完成デバイス
ブレッドボード上での完成品(図6)。

図6 ブレッドボード上の完成デバイス
6. Androidアプリとの連携
MIT App Inventor 2でシンプルなアプリを作成し、Bluetoothでデータを受信・表示します。図7がUI、図8がブロックプログラミングの様子です。

図7 App Inventor 2で作成したユーザーインターフェース

図8 App Inventor 2のプログラミングブロック
アプリはApp Inventorギャラリーで公開中:https://ai2.appinventor.mit.edu/#5876233188016128
ブロックプログラミングなので、目的に合わせて様々なアプリを作れます。例:25°C以下で音声通知、75°Cで5分経過後に「加熱完了」通知など。
7. オプション:はんだ付けとケース化
部品をはんだ付けし、3Dプリントしたケースに収めると携帯性が向上します(図9)。

図9 実用化したデバイス
ケース側面に穴を開けてUSBケーブルで給電。サーミスタを長いケーブルで延長し、測定対象(溶液など)から電子部品を離せるようにしています。
このシンプルなプロジェクトが、Bluetoothモジュールを使ったシリアル通信の基礎理解の一助となれば幸いです。エラーや質問があればお気軽にどうぞ。
追記: Bluetooth用分圧回路の配線図に誤りがありました。修正済みです。
追記2: コード書き込み時にエラーが出る場合は、Bluetoothモジュールを外してから書き込んでみてください。
完全なスケッチコード
// Temperature monitor with bluetooth module
int analogPin = 0;
int raw = 0;
int Vin = 5;
float Vout = 0;
float R1 = 10000; // 使用抵抗に合わせて変更
float Ro = 10000; // サーミスタの25°C抵抗値に合わせて変更
float R2 = 0;
float ratio = 0;
float Temp = 0;
float Beta = 3694; // 使用サーミスタのβ値に変更
float To = 298.15; // 25°C = 298.15K
void setup() {
Serial.begin(9600);
}
void loop() {
raw = analogRead(analogPin);
if(raw) {
ratio = raw * Vin;
Vout = (ratio)/1024.0;
ratio = (Vin/Vout) - 1;
R2 = R1 * ratio;
Temp = Beta / log(R2/(Ro*exp(-Beta/To)));
Temp = Temp - 273.15;
if(Temp >= 74) {
for (int i = 0; i <= 30; i++) {
Serial.print("Temperature >= 74 °C");
delay(10000);
}
Serial.print("Heating Complete");
delay(10000);
} else if (Temp <= 26){
Serial.print("Temperature <= 25 °C");
delay(10000);
} else {
Serial.print("Temperature: ");
Serial.println(Temp);
delay(10000);
}
}
}
回路図
抵抗R2は使用するサーミスタの抵抗値に合わせて変更してください。未知抵抗とR2の差(バイアス)が大きいほど温度読み取り誤差が増加します。

製造プロセス
- Raspberry Pi温度・湿度ネットワークモニター – DIYセットアップガイド
- Raspberry PiとBrickPiでThingSpeak温度モニターを構築
- Raspberry Piダッシュボードで家庭の温度を監視する
- スマート渇きアラート植物アラーム – 最適な水やりタイミングを知らせるDIYセンサー
- イタリア語ワードクロック自作:Arduino Nano、NeoPixel、LCD、RTCで時刻を文字で表示
- Arduino MKR Fox 1200で作る信頼性の高いSigfox kWhメーター
- 非接触ジェスチャー錠: APDS-9960とArduinoでセキュアアクセス
- Arduino Nanoコンパニオンキット – 電子工作に必須の部品とツールを搭載した多機能IC型デバイス
- Arduino Micro/Leonardo用 USB-MIDIアダプタキット – 完全パーツリストと実装ガイド
- Arduino用絶縁アナログ入力回路の設計:LM331 V-F変換+フォトカプラでノイズ耐性を確保
- Arduino UNOで作る精密反応速度テスター