Подключение DS18B20 к Arduino

Характеристики цифрового термодатчика maxim DS18B20

Диапазон измерения температуры от -55 до + 125 °C;
Погрешность измерения температуры 0,5 °C (для температур от -10 до +85 °C);
Напряжение питания термодатчика от 3,0 В до 5,5 В;
Потребляемый ток в покое 750 нА;
Потребляемый ток при запросе данных 1 мА;
К одному порту подключается до 127 термодатчиков;
Протокол передачи данных — 1-Wire;
Время измерения при 12 бит — 750 мс;
Подтягивающее сопротивление — 4,7 кОм.

Маркировка температурного датчика DALLAS 18B20 2012C4 +887AB (Модуль KY-001)

DALLAS — компания производитель;
18B20 — тип датчика (18B20P — с паразитным питанием);
2012 — год и номер недели выпуска;
C4 — кристалл;
+ — соответствие стандартам RoHS;
887AB — код партии.

Распиновка датчика температуры DS18B20

датчик температуры DS18B20

1 GND
2 DQ — DATA
3 VDD (+5 V)

Схема подключения термодатчика DS18B20 и подтягивающего резистора к Arduino

Схема подключения термодатчиков DS18B20 к arduino

Схема подключения датчика температуры DS18B20 в режиме «паразитного питания» паразитная схема

Схема подключения DS18B20 к Arduino UNO

схема подключения ds18b20 к ардуино

Скетч для температурного датчика DS18B20 подключенного к Arduino UNO

#include <OneWire.h>

OneWire pin_digital_temp(5);

float t1=0.0;

int t2=0;
int16_t t3=0;

//byte data_tepm[2];
byte data_tepm1[12];

byte i;
byte addr[8];

void setup(){
  Serial.begin(9600);
    if (!pin_digital_temp.search(addr)) {
    Serial.println("Больше адресов термодатчиков нет");
    delay(800);
    pin_digital_temp.reset_search();
    return;
  }
    Serial.print("Адрес = ");
  for (i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
}

void loop(){
  
  pin_digital_temp.reset(); // сброс предыдущих параметров
  pin_digital_temp.write(0xCC); // так как единственный термодатчик, то пропускаем поиск датчиков по адресу
  pin_digital_temp.write(0x44); // измерение температуры с записью в память термодатчика
 // pin_digital_temp.write(0x44,1); // для паразитного питания
  
  delay(800); // задержка 0.8 мсек
    
  pin_digital_temp.reset();
  pin_digital_temp.write(0xCC); 
  pin_digital_temp.write(0xBE); // получаем значение температуры с регистров

  //data_tepm[0] = pin_digital_temp.read(); // младший байт
  //data_tepm[1] = pin_digital_temp.read(); // старший байт
  //    объединяем младший и старший байт значений температуры с умножением на 0.0625 для 12 бит
  //t1 =  ((data_tepm[1] << 8) | data_tepm[0]) * 0.0625;
  
  // повышение скорости измерения температуры 20 мсек
    for (byte i = 0; i < 9; i++) // можно увеличить точность измерения до 0.0625 *С (от 9 до 12 бит)
  { 
    data_tepm1[i] = pin_digital_temp.read ();
  }
  
  t1 =  ((float)((data_tepm1[1] << 8) | data_tepm1[0])/ 16.0)+0.5;
 // float celsius =  (float)raw / 16.0;
  Serial.print("\n");
  Serial.println(t1);
  
  t2=(int)t1;
  Serial.println(t2);

  t3 = ((data_tepm1[1] << 8) | data_tepm1[0])>> 4;
  Serial.println(t3);

  if (pin_digital_temp.reset() != 1) {

    Serial.println("датчик не подключен");

}
 
}

Результат работы датчика температуры DS18B20:
DS18B20 показания скетча


Помехи на ds18b20 частотника

Осциллограмма сигнала без частотника

сигнал без частотника

Осциллограмма сигнала с частотником

сигнал с частотником

Осциллограмма сигнала с частотником и использованием ферритового кольца

сигнал частотника с ферритовым кольцом

1190

Leave a Reply

Ваш адрес email не будет опубликован.