Dallas 18b20 (ds18b20) підключення до arduino

В асортименті нашого магазину з'явився датчик температури DALLAS 18B20 у вологозахищеному корпусі з широким діапазоном вимірюваних температур від -55 до + 125 ° С. Дані про вологозахищеністю і максимальній температурі в +125 градусів відразу наштовхнули на думку про екстремальний тестуванні в киплячій воді. Цим ми і займемося.

Dallas 18b20 (ds18b20) підключення до arduino

Даний датчик працює по шині 1-Wire.

Для пристроїв, що працюють по шині 1-Wire в середовищі Arduino IDE використовується бібліотека OneWire.
Останню версію бібліотеки, а також повну документацію можна знайти на сторінці розробників.

Кожне таке пристрій містить унікальний 64-бітний 'ROM' код, що складається з 8 бітів, що визначають код серії, 48 біт унікального номера і 8 біт перешкодостійкого CRC коду.

Інформація про виміряної температурі зберігається в оперативній пам'яті датчика, яка складається з 9 байт.

1 і 2 байти зберігають інформацію про температуру.

3 і 4 байти зберігають відповідно верхній і нижній межі температури.

7 і 8 байти використовуються для надточного вимірювання температури.

9 байт зберігає перешкодостійкий CRC код попередніх 8 байт.

Основні команди, які використовуються при роботі з бібліотекою:

Виконує пошук наступного 1-Wire пристрої, якщо пристрій знайдено, то в 8 байтний масив addressArray записується його ROM код, інакше повертає false.

Виконує новий пошук з першого пристрою.

Відновлення наведених шини, необхідно перед зв'язком з датчиком.

Виконує вибір пристрою після скидання, передається ROM Код пристрою.

Передає інформаційний байт на пристрій

Передає інформаційний байт на пристрій, що працює в паразитному режимі харчування

Зчитує інформаційний байт з пристрою

Обчислює CRC код байтів з масиву dataArray, довжиною length

За допомогою команди write, ми можемо передавати керуючі команди на датчик у вигляді байтів, розглянемо основні з них:

0x44 - провести вимірювання температури і записати дані в оперативну пам'ять

0x4E - записати 3 байта в 3й, 4й та 5й байти оперативної пам'яті

0xBE - вважати послідовно 9 байт оперативної пам'яті

0x48 - скопіювати 3й і 4й байти оперативної пам'яті в EEPROM

0xB8 - скопіювати дані з EEPROM В 3й і 4й байти оперативної пам'яті

0xB4 - поверне тип харчування (0 - паразитное, 1 - зовнішнє)

Підключення до Arduino

З датчика виходять три дроти:

Червоний: "+" харчування.

Чорний: "-" харчування

Білий: Висновок вихідного сигналу

Підключення датчика:

Червоний: на + 5 Вольт Arduino.

Чорний на будь-який з GND пинов Arduino.

Білий на любий цифровий вхід Arduino (в прикладі D10).

Для роботи датчика необхідно з'єднати сигнальний провід з проводом харчування резистором номіналом 4.7 кОм.

Dallas 18b20 (ds18b20) підключення до arduino

Для початку розглянемо найкорисніший приклад для роботи з датчиком - висновок показань температури в монітор порту.

Приклад програмного коду

Dallas18B20 екстремальне тестування

У схему було додано реле, для автоматичного відключення кип'ятильника при температурі 99.5 ° С. Щоб не різати дроти на кип'ятильник підключимо через розетку, всередині якої знаходиться вищезазначене реле.

Dallas 18b20 (ds18b20) підключення до arduino

OneWire ds (10); // Підключаємо датчик до 10 цифровому піну

void setup (void) Serial.begin (9600);
pinMode (3, OUTPUT);
// Включаємо кип'ятильник
digitalWrite (3, LOW);
>

void loop (void) byte i;
byte type_s;
byte data [12];
byte addr [8];
float celsius, fahrenheit;

// Шукаємо алрес датчика
if (! ds.search (addr)) Serial.println ( "No more addresses.");
Serial.println ();
ds.reset_search ();
delay (250);
return;
>

// Перевіряємо чи не було перешкод при передачі
if (OneWire :: crc8 (addr, 7)! = addr [7]) Serial.println ( "CRC is not valid!");
return;
>
Serial.println ();

// Визначаємо серію датчика
switch (addr [0]) case 0x10:
Serial.println ( "Chip = DS18S20");
type_s = 1;
break;
case 0x28:
Serial.println ( "Chip = DS18B20");
type_s = 0;
break;
case 0x22:
Serial.println ( "Chip = DS1822");
type_s = 0;
break;
default:
Serial.println ( "Device is not a DS18x20 family device.");
return;
>

ds.reset ();
ds.select (addr);
ds.write (0xBE); // Прочитуємо оперативну пам'ять датчика

for (i = 0; i <9; i++) <
data [i] = ds.read (); // Заповнюємо масив ліченими даними
>

// Дані про температуру містяться в перших двох байтах, переведемо їх в одне значення і перетворимо в Шестнадцатіразрядное число
int16_t raw = (data [1] <<8) | data[0];
if (type_s) raw = raw <<3;
if (data [7] == 0x10) raw = (raw 0xFFF0) + 12 - data [6];
>
>
else byte cfg = (data [4] 0x60);
if (cfg == 0x00) raw = raw

7;
else if (cfg == 0x20) raw = raw

3;
else if (cfg == 0x40) raw = raw

1;
>
celsius = (float) raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
Serial.print ( "Temp =");
Serial.print (celsius);
Serial.print ( "C,");
Serial.print (fahrenheit);
Serial.println ( "F");

// Якщо температура досягає температури кипіння (з похибкою), відключаємо кип'ятильник
if (celsius> 99.5)
digitalWrite (3, HIGH);
>
>

Купити в РоссііDallas 18B20 у вологозахищеному корпусі