工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

スマートホーム連携向けマルチポジション温度センサーシステム

部品と材料

部品名 数量 備考
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式 適宜

必要な工具と機器

使用アプリとオンラインサービス

プロジェクト概要

複数の地点で温度を測定し、そのデータをドモティカシステム (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プリントパーツとエンクロージャ

回路図

基本回路図 (RS232 モジュールなし版)

スマートホーム連携向けマルチポジション温度センサーシステム

製造プロセス

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