El Сензор DS18B20 придоби популярност благодарение на своята надеждност и гъвкавост за измерване на температура. Той се използва широко в електронни проекти с микроконтролери като Arduino, PIC или ESP8266 поради своята простота на използване и способността му да свързва множество сензори към една и съща шина, което го прави идеален вариант както за аматьори, така и за професионалисти.
Една от основните атракции на този сензор е, че той използва само един кабел за комуникация на данни, използвайки протокола 1-тел, което улеснява интегрирането му в голямо разнообразие от проекти. Освен това DS18B20 може да работи в до два различни режима на мощност, което го прави още по-гъвкав. В тази статия ще обясним в дълбочина как работи, как можете да свържете множество сензори и как да оптимизирате температурните си измервания.
Характеристики на DS18B20
DS18B20 се произвежда от Maxim Integrated, наред с други, и се представя в различни капсулации, като форматът е ДА-92 (подобен на този на много транзистори) един от най-често срещаните. Освен това може да се намери и в запечатани и водоустойчиви версии, което го прави идеален за измерване на температури в сурова или влажна среда.
Сред най-забележителните характеристики на DS18B20 са:
- Температурният диапазон, от който може да измерва, обхваща -55°C до 125°C, което го прави подходящ за индустриални и домашни приложения.
- Su програмируема резолюция може да варира между 9 и 12 бита, позволяваща прецизна настройка спрямо нуждите на всеки проект.
- Всеки сензор има уникален адрес 64 бита, улеснявайки идентифицирането на множество сензори, свързани към една и съща шина.
DS18B20 Режими на захранване
Сензорът може да работи в два режима на захранване, осигурявайки гъвкавост при интегрирането му в различни проекти, всеки със своите предимства.
Захранване чрез щифт за данни (паразитно захранване)
Този режим е идеален, когато пространството е ограничено или когато са необходими връзки на дълги разстояния. DS18B20 черпи енергия директно от щифта за данни, когато е висок, и съхранява мощността в малък кондензатор, когато линията за данни е ниска. Този тип диета се нарича Паразитна сила.
Важно е обаче да се отбележи, че за да работи правилно е необходимо да свържете щифтовете GND y VDD на брега. Освен това е препоръчително да включите транзистор MOSFET което помага в ситуации, когато температурните преобразувания се нуждаят от повече ток.
Захранване чрез външен източник
Най-често срещаният и препоръчителен начин за захранване на DS18B20 е чрез външен източник, свързан към щифта VDD. Този метод гарантира стабилно напрежение, независимо от трафика на данни по 1-Wire шината, което е предимство за проекти, изискващи постоянна точност.
Как да използвате DS18B20 с Arduino
За да работите с този сензор на платформата Arduino, е необходимо да използвате две основни библиотеки: OneWire y Далас Температура. Тези библиотеки улесняват комуникацията и позволяват лесно четене и конфигурация.
Библиотека на OneWire: Позволява комуникация чрез 1-Wire протокол. Може да се изтегли от Хранилище на GitHub.
Далас Книжарница Температура: Той съдържа функциите, необходими за отчитане на температурата и конфигуриране на сензора. Изтеглете го от тази връзка.
След като инсталирате и двете библиотеки, можете да започнете работа със сензора без усложнения. По-долу обясняваме някои примери за това как да разчитате температурата и как да работите с множество сензори.
Пример 1: Отчитане на температурата с един сензор
За да извършите отчитане на температурата с един DS18B20, свързан към Arduino, основната схема включва просто свързване на щифта за данни на сензора към цифров щифт 2 на Arduino, заедно с резистор Набиране от 4.7kΩ.
Това е основният код за четене на температурата на сензора:
#include <OneWire.h> #include <DallasTemperature.h> OneWire ds(2); DallasTemperature sensors(&ds); void setup() { Serial.begin(9600); sensors.begin(); } void loop() { sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); Serial.print("Temperatura= "); Serial.print(tempC); Serial.println(" °C"); delay(1000); }
Кодът е доста прост. Изисква само няколко реда в главния цикъл, за да поиска температурата и да я прочете, което го прави много лесен за внедряване и персонализиране за различни приложения.
Пример 2: Използване на множество сензори на различни щифтове
При работа с повече от един DS18B20 има два начина за свързване на сензорите. Първият е чрез присвояване на различен цифров щифт на Arduino към всеки сензор. В този случай ще е необходим 4.7kΩ Pull-Up резистор за всеки сензор.
Тук ви показваме пример как да работите с два сензора, свързани на различни щифтове:
#include <OneWire.h> #include <DallasTemperature.h> OneWire ds1(2); OneWire ds2(3); DallasTemperature sensors1(&ds1); DallasTemperature sensors2(&ds2); void setup() { Serial.begin(9600); sensors1.begin(); sensors2.begin(); } void loop() { sensors1.requestTemperatures(); float temp1 = sensors1.getTempCByIndex(0); sensors2.requestTemperatures(); float temp2 = sensors2.getTempCByIndex(0); Serial.print("Temperatura 1 = "); Serial.print(temp1); Serial.print(" °C Temperatura 2 = "); Serial.println(temp2); delay(1000); }
Пример 3: Множество сензори, свързани към един щифт
Другата възможност за свързване на няколко DS18B20 в проект е да се направи това с помощта на един щифт и една и съща 1-Wire шина за всички тях. В този случай всеки сензор трябва да има своя уникален идентификационен номер, което е зададено фабрично. Тук обясняваме как да получите тези адреси с помощта на следния код:
#include <OneWire.h> OneWire ds(2); void setup(void) { Serial.begin(9600); } void loop(void) { byte address[8]; if (!ds.search(address)) { Serial.println("No more addresses."); ds.reset_search(); delay(250); return; } Serial.print("Address: "); for (int i = 0; i < 8; i++) { Serial.print(address[i], HEX); if (i < 7) Serial.print(", "); } Serial.println(); delay(250); }
След като имате адресите на всички сензори, можете да прочетете конкретния сензор, като използвате неговия уникален адрес. Следният код ви показва как да го направите:
#include <DallasTemperature.h> OneWire ds(2); DallasTemperature sensors(&ds); DeviceAddress sensor1 = {0x28, 0xFF, 0xCA, 0x4A, 0x5, 0x16, 0x3, 0xBD}; DeviceAddress sensor2 = {0x28, 0xFF, 0x89, 0x3A, 0x1, 0x16, 0x4, 0xAF}; void setup() { Serial.begin(9600); sensors.begin(); } void loop() { sensors.requestTemperatures(); float temp1 = sensors.getTempC(sensor1); float temp2 = sensors.getTempC(sensor2); Serial.print("Temp sensor 1: "); Serial.println(temp1); Serial.print("Temp sensor 2: "); Serial.println(temp2); delay(1000); }
Предимствата на този метод са, че спестявате пинове на Arduino и можете да свържете много сензори паралелно към една и съща шина за данни.
С тези примери можете да видите гъвкавостта и мощността на сензора DS18B20. Много е лесно за изпълнение и ако трябва да свържете няколко сензора, имате пълна гъвкавост да го направите по различни начини. DS18B20 е един от най-надеждните сензори за измерване на температура и благодарение на ниската си консумация на енергия и лесното програмиране е идеален за всички видове проекти.
Сензорът DS18B20 е не само лесен за използване с Arduino, но може да се използва и в широк спектър от промишлени и жилищни приложения като мониторинг на температурата в климатични системи, машини или дори оранжерии.