スマートホーム連携向けマルチポジション温度センサーシステム
部品と材料
| 部品名 | 数量 | 備考 |
|---|---|---|
| DS18B20 温度センサー | 8 | 1-Wire バス接続対応 |
| ネジセット | 1 | ケース固定用 |
| Arduino Nano R3 | 1 | メイン制御ボード |
| 実験用 PCB | 1 | ユニバーサル基板等 |
| 抵抗 4.7kΩ | 1 | プルアップ抵抗 |
| 2ピン スクリューターミナル | 1 | 電源・信号線接続用 |
| SparkFun RS232 シフター (SMD) | 1 | TTL→RS232 変換用 |
| 3Dプリントケース | 1 | 自作筐体 |
| 配線材 | 1式 | 適宜 |
必要な工具と機器
- 3Dプリンター (Zortrax M200 等)
- ドライバーセット
使用アプリとオンラインサービス
- Arduino IDE
プロジェクト概要
複数の地点で温度を測定し、そのデータをドモティカシステム (Crestron/AMX 等) に取り込む必要がありました。コストを抑えつつ、信頼性の高いソリューションを構築するため、広く入手可能で安価な DS18B20 センサーを採用しました。これらは 1-Wire バスシステムとして動作するため、配線もシンプルです。
センサーは Arduino Nano に接続され、そのシリアル出力 (TTL レベル) を RS232 シフターで RS232 信号に変換することで、ドモティカシステムとの互換性を確保しています。
見た目にも美しく仕上げるため、専用ケースを設計し、Zortrax M200 3Dプリンターで出力しました。



ご質問がありましたら、お気軽にお尋ねください。
ソースコード
MultiTempSensor v1.0.0 (Arduino)
/* MultiTempSensor code by WT040
センサーコードは Rik Kretzinger の例とその他のスニペットをベースに作成
履歴:
v0.1.1 27/11/2016
v0.1.5 04/12/2016 プレリリース版
v1.0.0 04/12/2017 リリース版
*/
// ライブラリインクルード
#include <OneWire.h>
#include <DallasTemperature.h>
// 定数定義
#define SENSOR_PIN 12
#define READ_TIMER 10000 // 10秒間隔
// OneWire インスタンス生成
OneWire oneWire(SENSOR_PIN);
// DallasTemperature ライブラリに参照を渡す
DallasTemperature sensors(&oneWire);
// センサーアドレス (各 DS18B20 固有の 64-bit ROM コード)
DeviceAddress Sensor1 = { 0x28, 0xFF, 0x89, 0x0F, 0x61, 0x16, 0x03, 0x40 };
DeviceAddress Sensor2 = { 0x28, 0xFF, 0xE2, 0x0F, 0x61, 0x16, 0x03, 0x21 };
DeviceAddress Sensor3 = { 0x28, 0xFF, 0x38, 0xB3, 0x60, 0x16, 0x03, 0xEA };
DeviceAddress Sensor4 = { 0x28, 0xFF, 0xA4, 0xBE, 0x60, 0x16, 0x03, 0xE1 };
DeviceAddress Sensor5 = { 0x28, 0xFF, 0xFE, 0x13, 0x61, 0x16, 0x03, 0x56 };
DeviceAddress Sensor6 = { 0x28, 0xFF, 0x89, 0xBA, 0x60, 0x16, 0x03, 0xFB };
DeviceAddress Sensor7 = { 0x28, 0xFF, 0xFA, 0xBC, 0x60, 0x16, 0x03, 0xD1 };
DeviceAddress Sensor8 = { 0x28, 0xFF, 0x57, 0xB1, 0x60, 0x16, 0x03, 0x93 };
int amountOfSensors = 8; // バス上のセンサー数
int counterCheckBus = 0; // 定期的なバスチェック用カウンタ
void setup() {
Serial.begin(9600);
printProgramName();
Serial.print("Initializing Temperature Control Library Version ");
Serial.println(DALLASTEMPLIBVERSION);
Serial.print("Searching for ");
Serial.print(amountOfSensors);
Serial.println(" sensors...");
sensors.begin();
// 分解能を 10bit に設定 (9〜12bit 可、低いほど高速)
for (int i = 1; i <= 8; i++) {
DeviceAddress* sensor = getSensorAddress(i);
if (sensor) sensors.setResolution(*sensor, 10);
}
getSensorsOnBus();
Serial.println("System initialized");
}
void loop() {
counterCheckBus++;
delay(READ_TIMER);
Serial.println();
// 1時間ごと (360回 × 10秒) にバス上のデバイス数を再確認
if (counterCheckBus == 360) {
getSensorsOnBus();
counterCheckBus = 0;
}
sensors.requestTemperatures();
for (int i = 1; i <= 8; i++) {
DeviceAddress* sensor = getSensorAddress(i);
if (sensor) {
Serial.print("Sensor ");
Serial.print(i);
Serial.print(": ");
printTemperature(*sensor);
Serial.println();
}
}
}
void printTemperature(DeviceAddress deviceAddress) {
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print("Sensor error!");
} else {
Serial.print("C: ");
Serial.print(tempC);
}
}
void printProgramName() {
String path = __FILE__;
int slash = path.lastIndexOf('\\');
String programName = path.substring(slash + 1);
int dot = programName.lastIndexOf('.');
programName = programName.substring(0, dot);
Serial.print("\nProgram version: ");
Serial.println(programName);
}
void getSensorsOnBus() {
Serial.print("Number of sensors found on bus: ");
Serial.println(sensors.getDeviceCount());
}
// ヘルパー関数: センサー番号からアドレスを取得
DeviceAddress* getSensorAddress(int num) {
switch (num) {
case 1: return &Sensor1;
case 2: return &Sensor2;
case 3: return &Sensor3;
case 4: return &Sensor4;
case 5: return &Sensor5;
case 6: return &Sensor6;
case 7: return &Sensor7;
case 8: return &Sensor8;
default: return nullptr;
}
}
3Dプリントパーツとエンクロージャ
- ケース底部
- ケース上部
- サブ D-Sub 9ピン マウント
回路図
基本回路図 (RS232 モジュールなし版)

製造プロセス
- 5ドルI2C温度センサーで作るRaspberry Pi温度ロガー
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- Raspberry PiとDS18B20でマルチセンサー温度・光監視システムを構築
- Raspberry Pi、MCP9808、InfluxDB、Grafanaで作る家庭温度モニター
- DasFilisera スマート温室:高度な植物生育モニタリングシステム
- MotionSense: ArduinoとESP8266で作るスマート侵入検知システム
- 3Dプリンター火災予防:スマートセンサーセーフティシステム
- Arduinoで作る斥力式磁気浮上装置: シンプル回路とDIYガイド
- CoroFenceサーマルディテクター:Grid-EYE & PIRセンサー搭載IoT体温監視
- 高精度ベアリング温度センサー:正確な検知と監視
- DS18B20温度センサー:産業・コンシューマー向け高精度1-Wireデジタル温度計