El DS18B20 jutiklis išpopuliarėjo dėl savo patikimumo ir universalumo temperatūros matavimui. Jis plačiai naudojamas elektronikos projektuose su tokiais mikrovaldikliais kaip Arduino, PIC ar ESP8266 dėl naudojimo paprastumo ir galimybės sujungti kelis jutiklius vienoje magistralėje, todėl tai idealus pasirinkimas tiek mėgėjams, tiek profesionalams.
Vienas iš pagrindinių šio jutiklio privalumų yra tai, kad jis naudoja tik vieną kabelį duomenų ryšiui naudojant protokolą 1 laidų, kuris palengvina jo integravimą į įvairius projektus. Be to, DS18B20 gali veikti iki dviejų skirtingų maitinimo režimų, todėl jis yra dar lankstesnis. Šiame straipsnyje išsamiai paaiškinsime, kaip tai veikia, kaip galite prijungti kelis jutiklius ir kaip optimizuoti temperatūros matavimus.
DS18B20 savybės
DS18B20 gamina „Maxim Integrated“, be kita ko, ir pateikiamas įvairiomis kapsulėmis, kurių formatas yra toks TO-92 (panašiai kaip ir daugelis tranzistorių) vienas iš labiausiai paplitusių. Be to, jį taip pat galima rasti sandarių ir vandeniui atsparių versijų, todėl puikiai tinka matuoti temperatūrą atšiaurioje ar drėgnoje aplinkoje.
Tarp ryškiausių DS18B20 savybių yra:
- Temperatūros diapazonas, kurį jis gali matuoti, apima -55°C iki 125°C, todėl tinka pramoniniam ir buitiniam naudojimui.
- Su programuojama skiriamoji geba gali skirtis tarp 9 ir 12 bitai, leidžianti tiksliai koreguoti pagal kiekvieno projekto poreikius.
- Kiekvienas jutiklis turi unikalų adresą 64 bitai, palengvinantis kelių jutiklių, prijungtų prie tos pačios magistralės, identifikavimą.
DS18B20 maitinimo režimai
Jutiklis gali veikti dviem galios režimais, suteikdamas lankstumo jį integruojant į skirtingus projektus, kurių kiekvienas turi savo privalumų.
Maitinimas per duomenų kaištį (Parasite Power)
Šis režimas idealiai tinka, kai erdvė yra ribota arba kai reikalingi dideli ryšiai. DS18B20 maitinimą gauna tiesiai iš duomenų kaiščio, kai jis yra didelis, ir saugo maitinimą mažame kondensatoriuje, kai duomenų linija yra maža. Tokio tipo dieta vadinama Parazitų galia.
Tačiau svarbu pažymėti, kad norint, kad jis veiktų tinkamai, būtina prijungti kaiščius GND y VDD krante. Be to, patartina įtraukti tranzistorių MOSFET kuri padeda situacijose, kai temperatūros konvertavimui reikia daugiau srovės.
Maitinimas naudojant išorinį šaltinį
Dažniausias ir rekomenduojamas DS18B20 maitinimo būdas yra išorinis šaltinis, prijungtas prie kaiščio VDD. Šis metodas garantuoja stabilią įtampą, nepriklausomą nuo duomenų srauto 1-Wire magistralėje, o tai yra naudinga projektams, kuriems reikalingas pastovus tikslumas.
Kaip naudoti DS18B20 su Arduino
Norint dirbti su šiuo jutikliu Arduino platformoje, būtina naudoti dvi pagrindines bibliotekas: „OneWire“ y Dalaso temperatūra. Šios bibliotekos palengvina ryšį ir leidžia lengvai nuskaityti bei konfigūruoti.
OneWire biblioteka: Leidžia bendrauti naudojant 1-Wire protokolą. Jį galima atsisiųsti iš „GitHub“ saugykla.
Dalaso knygyno temperatūra: Yra funkcijos, reikalingos norint nuskaityti temperatūrą ir sukonfigūruoti jutiklį. Atsisiųskite jį iš šią nuorodą.
Įdiegę abi bibliotekas galite pradėti dirbti su jutikliu be komplikacijų. Toliau paaiškiname kelis pavyzdžius, kaip nuskaityti temperatūrą ir kaip dirbti su keliais jutikliais.
1 pavyzdys: Temperatūros rodmenys su vienu jutikliu
Norint nuskaityti temperatūrą su vienu DS18B20, prijungtu prie Arduino, pagrindinė grandinė apima tiesiog jutiklio duomenų kaiščio prijungimą prie skaitmeninis kaištis 2 Arduino, kartu su rezistoriumi „Pull-Up“ 4.7 kΩ.
Tai yra pagrindinis kodas jutiklio temperatūrai nuskaityti:
#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); }
Kodas gana paprastas. Norint paprašyti temperatūros ir ją nuskaityti, pagrindinėje kilpoje reikia tik kelių eilučių, todėl ją labai lengva įdiegti ir pritaikyti įvairiems tikslams.
2 pavyzdys: kelių jutiklių naudojimas ant skirtingų kaiščių
Dirbant su daugiau nei vienu DS18B20, jutiklius galima prijungti dviem būdais. Pirmasis yra kiekvienam jutikliui priskiriant skirtingą Arduino skaitmeninį kaištį. Tokiu atveju kiekvienam jutikliui reikės 4.7 kΩ Pull-Up rezistoriaus.
Pateikiame pavyzdį, kaip dirbti su dviem jutikliais, prijungtais prie skirtingų kaiščių:
#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 pavyzdys: keli jutikliai, prijungti prie vieno kaiščio
Kita galimybė projekte prijungti kelis DS18B20 yra tai padaryti naudojant vieną kaištį ir tą pačią 1 laidų magistralę. Tokiu atveju kiekvienas jutiklis turi turėti savo unikalus identifikavimo numeris, kuris yra priskirtas gamykloje. Čia paaiškiname, kaip gauti tuos adresus naudojant šį kodą:
#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); }
Kai turėsite visų jutiklių adresus, galėsite nuskaityti konkretų jutiklį naudodami jo unikalų adresą. Šis kodas parodo, kaip tai padaryti:
#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); }
Šio metodo pranašumai yra tai, kad sutaupote Arduino kaiščius ir galite lygiagrečiai prijungti daugybę jutiklių prie tos pačios duomenų magistralės.
Iš šių pavyzdžių galite pamatyti jutiklio DS18B20 universalumą ir galią. Tai labai lengva įdiegti, o jei reikia prijungti kelis jutiklius, galite tai padaryti įvairiais būdais. DS18B20 yra vienas patikimiausių temperatūros matavimo jutiklių, o dėl mažo energijos suvartojimo ir lengvo programavimo jis puikiai tinka visų tipų projektams.
DS18B20 jutiklį ne tik paprasta naudoti su Arduino, bet ir įvairiuose pramoniniuose ir gyvenamuosiuose įrenginiuose, pavyzdžiui, temperatūros stebėjimui oro kondicionavimo sistemose, mašinose ar net šiltnamiuose.