●ArduinoでDS18B20 デジタル温度センサを使う

DS18B20 デジタル温度センサの値をArduinoで読み取りたいと思います。
3.0V 〜 5.5Vで動作し、配線の距離は条件により100mを超えて伸ばす事ができるようで、-55℃から+125℃までの温度を測定でき、-10℃から+85℃までの間は±0.5℃の精度だそうです。
一つの線で複数のセンサーを接続する事も出来るそうです。

ステンレスのチューブに入れられた防水タイプや、トランジスタのようなTO-92パッケージなどがあります。
こちらの防水タイプは、黄色がデータ、赤がVCC、黒がGNDになります。
DS18B20 温度プローブ ステンレス鋼パッケージ


デジタルピンはArduinoの好きなデジタルピンに接続します。
ちなみに私はデジタルピン4番に接続しました。
抵抗は基本4.7KΩですが、手元に無かったため10KΩで代用しました。



■ライブラリの準備

DallasTemperatureライブラリを検索してインストールします。


OneWireライブラリが無い場合にはこのような画面が出ますので、Install all ボタンを押します。



■シリアルナンバーと温度を取得する

デジタルピン4番に接続したDS18B20のシリアルナンバーと温度を取得します。
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire(4);
DallasTemperature sensors(&oneWire);
DeviceAddress temp;

void setup(void)
{
  Serial.begin(9600);

  sensors.begin();
  sensors.getAddress(temp,0);
}

void loop(void)
{ 
  for(int i=0;i<8;i++){
    Serial.print(" 0x");
    Serial.print(temp[i],HEX);
  }
  Serial.println();
  sensors.requestTemperatures();
  Serial.println(sensors.getTempC(temp));

  delay(500);
}

このプログラムを走らせてシリアルモニタを開くと次の様に温度とシリアルナンバーが出力されます。


DS18B20を別の物に取り換えてリセットボタンを押すと違うシリアルナンバーが表示されます。

個々のセンサーにアクセスするにはこのシリアルナンバーを覚えておく必要があります。


■複数のDS18B20から温度を取得する

getTempCByIndex(番号)によりインデックス番号でも温度を取得できますが、それだとどのセンサーの温度かよくわかりません。
そのため、シリアルナンバー毎に温度を取得したいと思います。

複数のセンサーの接続は、並列に接続するのみです。



このプログラムでは2個のセンサーのシリアルナンバーを指定して温度を読み出してます。
シリアルナンバーは、先ほどのプログラムで、
0x28 0xAA 0x60 0xE0 0x57 0x14 0x1 0x5Dと表示された物を、
{0x28,0xAA,0x60,0xE0,0x57,0x14,0x1,0x5D}
このように指定していますがセンサー毎に調べて書き換えてください。
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire(4);
DallasTemperature sensors(&oneWire);

DeviceAddress temp1 = {0x28,0xAA,0x60,0xE0,0x57,0x14,0x1,0x5D};
DeviceAddress temp2 = {0x28,0xAA,0x55,0xEF,0x57,0x14,0x1,0x91};

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
}

void loop(void)
{ 
  sensors.requestTemperatures();
  Serial.println(sensors.getTempC(temp1));
  Serial.println(sensors.getTempC(temp2));
  delay(500);
}

このプログラムを走らせてシリアルモニタを開くと各々のセンサーの温度が取得できます。


▲トップページ > マイコンなど