Сегодня мы будем подключать датчик температуры DS18B20 к arduino.
Основные характеристики датчика DS18B20 :
- Уникальный интерфейс 1-Wire Требуется только один контакт для связи
- Каждое устройство имеет уникальный 64-битный серийный адрес устройства который хранится в ROM
- Питание датчика в диапазоне температур от 3 вольт до 5,5 вольт
- Диапазон измеряемых температур от -55 ° C до +125 ° C (-67 ° F до +257 ° F)
- Программное обеспечение совместимо с DS1822
- Доступен в трех вариантах корпусов 8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92
Фотография датчика DS18B20 в корпусе TO-92
Датчик температуры DS18B20 работает с Arduino по протоколу передачи данных 1-Wire® и позволяет подключить несколько датчиков на одну шину.
Датчики можно подключить к Arduino двумя способами:
- Внешнее подключение ( по трем проводам )
- Паразитное подключение ( по двум проводам )
Мы рассмотрим внешнее подключение. в котором обмен данными осуществляется по средней ноге датчика DQ. Между ногой DQ и VDD требуется подключить резистор номиналом 4,7 кОм. Питание подключается к ногам VDD и GND, а именно VDD подключаем к + питания 5 вольт, а GND к минусу питания (земля). DQ подключаем к цифровому пину 10 на Arduino UNO.
Если требуется подключить больше датчиков , то добавляем дополнительные датчики по схеме
Каждый датчик температуры имеет уникальный 64-битный адрес устройства, по которому у нас есть возможность опросить определенный датчик и взять с него значения температуры.
Будем использовать библиотеку DallasTemperature, которую распакуйте в папку Library в вашей Arduino IDE.
После успешного скачивания библиотеки и установки,
запускаем Arduino IDE, и переходим к примерам по работе с датчиком, и выбираем пример Multiple.
В примере ищем строку #define ONE_WIRE_BUS 2 где 2 это номер цифрового пина arduino к которому подключен датчик ( в нашем случае это 10 пин ) и меняем на строку на #define ONE_WIRE_BUS 10 и заливаем скетч в нашу плату ардуино.
Открываем монитор порта и снимаем галочку с “Автопрокрутка” и перемещаемся в самый верх окна монитора порта.
Где мы видим строки
- Locating devices…Found 2 devices – количестве подключенных датчиков 2 штуки
- Parasite power is: OFF – паразитное подключение отключено ( у нас датчики подключены внешним подключением )
- Device 0 Address: 280054B604000092 – адрес первого подключенного датчика
- Device 1 Address: 289E95B504000057 – адрес второго подключенного датчика
- Device 0 Resolution: 9 – режим измерения первого датчика
- Device 1 Resolution: 9 – режим измерения второго датчика
Далее строки
- Requesting temperatures…DONE – запрос получения температуры с датчиков
- Device Address: 280054B604000092 Temp C: 7.00 Temp F: 44.60 – адрес датчика , температура в градусах по Цельсию и температура по Фаренгейту
- Device Address: 289E95B504000057 Temp C: 27.50 Temp F: 81.50 – адрес датчика , температура в градусах по Цельсию и температура по Фаренгейту
Датчики как мы видим работают, и температуру мы получаем.
Для удобного отображения температуры и считывания данных с одного датчика без использования библиотеки, можно использовать более простой код. Для указания пина Arduino к которому у вас подключен датчик температуры DS18B20 , измените число в строке OneWire ds(9); на например 10
#include <OneWire.h> OneWire ds(9); void setup() { Serial.begin(9600); } void loop() { byte data[2]; ds.reset(); ds.write(0xCC); ds.write(0x44); delay(750); ds.reset(); ds.write(0xCC); ds.write(0xBE); data[0] = ds.read(); data[1] = ds.read(); int Temp = (data[1] << 8) + data[0]; Temp = Temp >> 4; Serial.println(Temp); }