DS18B20 – очень популярный, надёжный и высокоточный цифровой датчик температуры - не подвержен помехам, в отличие от термистора и других аналоговых датчиков, не зависит от нелинейности АЦП и имеет постоянную точность на всём рабочем диапазоне температур. Выпускается в разных корпусах.
| В наборе GyverKIT | Aliexpress | |
|---|---|---|
![]() |
EXTRA |
Купить |
Характеристики:
- Диапазон: -55.. 125 °C
- Точность: 0.5 °C
- Разрешение: 9.. 12 бит (0.48.. 0.06 °C)
- Питание: 3-5.5V
- Скорость измерения:
- 750 мс при точности 12 бит
- 94 мс при точности 9 бит
- Интерфейс связи: 1-Wire (OneWire)
- Возможность подключать несколько датчиков на один пин
Подключение к Arduino #
Датчик имеет следующие назначения пинов:
Подключается к питанию и любому цифровому пину Arduino - пин должен быть подтянут к питанию резистором 4.7 кОм. На один пин можно подключить несколько датчиков DS18B20:
В рамках набора GyverKIT резистор на 4.7 кОм можно заменить двумя резисторами на 10 кОм, подключенными параллельно:
Библиотеки #
Для DS18B20 есть несколько библиотек:
- DallasTemperature.h - самая известная, для работы также понадобится OneWire.h
- GyverDS18 - моя библиотека, очень лёгкая и простая в использовании
В примерах на этом сайте будем использовать GyverDS18, её можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverDS18. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
GyverDS18 #
Один датчик
// асинхронный опрос одного датчика на пине
// простейший вариант - библиотека сама запрашивает температуру
// и сигналит по готовности, можно забрать результат
#include <GyverDS18.h>
GyverDS18Single ds(2); // пин
void setup() {
Serial.begin(115200);
ds.setResolution(12);
}
void loop() {
// тикер, вызывать в loop
// по готовности и успешному чтению
if (!ds.tick()) {
Serial.println(ds.getTemp());
}
}
Чтение адреса датчика
// на пин должен быть подключен ОДИН датчик
#include <GyverDS18.h>
GyverDS18Single ds(2); // пин
void setup() {
Serial.begin(115200);
gds::Addr addr = ds.readAddress();
if (addr) {
Serial.print("address: ");
addr.printTo(Serial);
} else {
Serial.println("error");
}
}
void loop() {
}
Несколько датчиков на пине
// нужно получить адреса как в предыдущем примере,
// подключив по одному датчику на пин
#include <GyverDS18Array.h>
uint64_t addr[] = {
0x4D0417508099FF28,
0xFE04175159CDFF28,
0xC3041750E553FF28,
0xCF0417505B78FF28,
};
GyverDS18Array ds(2, addr, 4);
void setup() {
Serial.begin(115200);
ds.setResolution(12); // для всех
}
void loop() {
// это таймер с периодом к setResolution, он сам делает request
if (!ds.tick()) {
float temps[4];
ds.readTemps(temps);
for (float t : temps) {
Serial.println(t);
}
Serial.println();
}
}
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками





