#概要
Arduino+複数の温度センサー(DS18B20)を使用して計測してみました。
今回は下記のサイトを参考にして作成してみました。
http://blog.goo.ne.jp/mkidmtr70/e/a95e8d383e4f62e58afa4e34ffdeb7b7
#回路図とコード
わかりにくいですが、DS18B20が3つ並列で並んでいます。
また、実際には2つ目、3つ目は10m、15mのケーブルの先にセンサーをつなげています。
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress temp0 = { 0x28,0xFF,0x5D,0x54,0xB0,0x16,0x04,0x7C };
DeviceAddress temp1 = { 0x28,0xFF,0xEE,0x21,0xB0,0x16,0x04,0x54 };
DeviceAddress temp2 = { 0x28,0xFF,0x7F,0x0E,0x00,0x17,0x03,0x3F };
void setup(void)
{
Serial.begin(9600);
sensors.begin();
}
void loop(void)
{
sensors.requestTemperatures();
delay(300);
Serial.print("0:");
Serial.println(sensors.getTempC(temp0));
Serial.print("1:");
Serial.println(sensors.getTempC(temp1));
Serial.print("2:");
Serial.println(sensors.getTempC(temp2));
delay(500);
}
※各種温度センサーのアドレスの調べ方は下記サイトを参考にしました。
http://henrysbench.capnfatz.com/henrys-bench/arduino-temperature-measurements/ds18b20-arduino-user-manual-introduction-and-contents/ds18b20-user-manual-part-2-getting-the-device-address/
#実行してみると、、
実行してみると、、取得した温度が全て0℃になってしまいました。。
ただ、ケーブルを延長していない状態、または0m、10mだけ、0m、15mだけのケーブルをつないだ場合は正常に温度が取得できました。
#改善
調べてみると、ケーブルが長いことによる抵抗値の増加が問題だったようなので抵抗値を下げることにしました。
ただ、0mだけのケーブルをつなげる場合もあるので、途中で抵抗値を変更できるよう2kオームの抵抗と5kオームの半固定抵抗を並列でつなげ、途中で変更できるように配線しました。(2kオーム~7kオームまで変更できるようになりました)
無事に正常な温度が取得できましたので、実際のセンサーにも反映しました。
10m、15mのセンサーをつないだ場合は2kオームだけの抵抗で正常に温度が取得できることを確認しました。
今日は以上です。