Характеристики цифрового термодатчика 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
1 GND
2 DQ — DATA
3 VDD (+5 V)
Схема подключения термодатчика DS18B20 и подтягивающего резистора к Arduino
Схема подключения датчика температуры DS18B20 в режиме «паразитного питания»
Схема подключения DS18B20 к Arduino UNO
Скетч для температурного датчика 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 частотника
Осциллограмма сигнала без частотника
Осциллограмма сигнала с частотником
Осциллограмма сигнала с частотником и использованием ферритового кольца