Unul dintre cele mai simple și mai ieftine moduri de a adăuga detectarea temperaturii în proiectul Arduino este de a folosi senzorul de temperatură DS18B20 cu 1 fir. Acești senzori sunt destul de preciși și nu au nevoie de componente externe pentru a funcționa. Așadar, cu doar câteva conexiuni și câteva coduri Arduino veți detecta temperatura în cel mai scurt timp!
DS18B20 1-Wire Temperature Sensor
DS18B20 este un senzor de temperatură cu interfață 1-Wire fabricat de Dallas Semiconductor Corp. Interfața unică 1-Wire® necesită doar un singur pin digital pentru o comunicare bidirecțională cu un microcontroler.
Senzorul vine de obicei în doi factori de formă. Unul care vine în pachet TO-92 arată exact ca un tranzistor obișnuit. Celălalt într-un stil de sondă rezistentă la apă, care poate fi mai util atunci când trebuie să măsurați ceva la distanță, sub apă sau sub pământ.
Senzorul de temperatură DS18B20 este destul de precis și nu are nevoie de componente externe pentru a funcționa. Acesta poate măsura temperaturi de la -55°C la +125°C cu o precizie de ±0,5°C.
Rezoluția senzorului de temperatură este configurabilă de către utilizator la 9, 10, 11 sau 12 biți. Cu toate acestea, rezoluția implicită la pornire este de 12 biți (adică o precizie de 0,0625°C).
Senzorul poate fi alimentat cu o sursă de alimentare de la 3V la 5,5V și consumă doar 1mA în timpul conversiilor de temperatură active.
Iată specificațiile complete:
Sursă de alimentare | 3V la 5.5V |
Consumul de curent | 1mA |
Domeniul de temperatură | -55 la 125°C |
Precizia | ±0.5°C |
Rezoluție | 9 până la 12 biți (selectabil) |
Timp de conversie | < 750ms |
Multiple DS18B20 pe o singură magistrală
Unul dintre cele mai mari avantaje ale DS18B20 este că mai multe DS18B20 pot coexista pe aceeași magistrală 1-magistrală cu un singur fir. Deoarece fiecare DS18B20 are un cod serial unic pe 64 de biți gravat din fabrică, este mai ușor să le diferențiezi unul de celălalt.
Această caracteristică poate fi un avantaj imens atunci când doriți să controlați mai multe DS18B20 distribuite pe o suprafață mare.
Pentru a ști cum să citiți temperatura de la mai mulți senzori de temperatură DS18B20, vă rugăm să consultați acest tutorial.
DS18B20 Sensor Pinout
GND este un pin de masă.
DQ este 1-Wire Data Bus trebuie conectat la un pin digital pe microcontroler.
Pin-ul VDD furnizează energie pentru senzor, care poate fi între 3,3 și 5V.
Cablarea senzorului de temperatură DS18B20 la Arduino
Suficient de teorie, să trecem la practică! Să conectăm DS18B20 la Arduino.
Conexiunile sunt destul de simple. Începeți prin a conecta VDD la pinul de ieșire de 5V de pe Arduino și GND la masă.
În continuare conectați pinul de semnal digital rămas DQ la pinul digital 2 de pe Arduino. De asemenea, va trebui să adăugați rezistența pull-up de 4,7k între pinul de semnal și pinul de alimentare pentru a menține stabil transferul de date. (pull-up-urile interne de pe arduino nu funcționează)
Atenție să obțineți DS18B20 în sensul corect. Dacă îl puneți invers, se va încălzi și apoi se va rupe.
Dacă folosiți versiunea rezistentă la apă a DS18B20, conectați banda roșie la 5V, cea neagră se conectează la masă, iar cea galbenă reprezintă datele care merg la pinul digital 2 de pe arduino. Tot trebuie să conectați o rezistență de tracțiune de 4,7K de la date la 5V.
Instalarea bibliotecii pentru DS18B20
Protocolul Dallas 1-Wire este oarecum complex și necesită o grămadă de cod pentru a descifra comunicarea. Pentru a ascunde această complexitate inutilă, vom instala biblioteca DallasTemperature.h, astfel încât să putem emite comenzi simple pentru a obține citiri de temperatură de la senzor.
Pentru a instala biblioteca, navigați la Sketch > Include Library > Manage Libraries…Așteptați ca Library Manager să descarce indexul bibliotecilor și să actualizeze lista bibliotecilor instalate.
Filtrați căutarea tastând ‘ds18b20’. Ar trebui să existe câteva intrări. Căutați DallasTemperature de Miles Burton. Faceți clic pe acea intrare și apoi selectați Install.
Această bibliotecă Dallas Temperature este o bibliotecă specifică hardware care gestionează funcții de nivel inferior. Ea trebuie să fie cuplată cu One Wire Library pentru a comunica cu orice dispozitiv cu un singur fir, nu doar cu DS18B20. Instalați și această bibliotecă.
Codul Arduino
Scheta următoare vă va oferi o înțelegere completă a modului de citire a citirilor de temperatură de la senzorul de temperatură DS18B20 și poate servi ca bază pentru mai multe experimente și proiecte practice.
#include <OneWire.h>#include <DallasTemperature.h>// Data wire is plugged into digital pin 2 on the Arduino#define ONE_WIRE_BUS 2// Setup a oneWire instance to communicate with any OneWire deviceOneWire oneWire(ONE_WIRE_BUS);// Pass oneWire reference to DallasTemperature libraryDallasTemperature sensors(&oneWire);void setup(void){ sensors.begin();// Start up the library Serial.begin(9600);}void loop(void){ // Send the command to get temperatures sensors.requestTemperatures(); //print the temperature in Celsius Serial.print("Temperature: "); Serial.print(sensors.getTempCByIndex(0)); Serial.print((char)176);//shows degrees character Serial.print("C | "); //print the temperature in Fahrenheit Serial.print((sensors.getTempCByIndex(0) * 9.0) / 5.0 + 32.0); Serial.print((char)176);//shows degrees character Serial.println("F"); delay(500);}
Iată cum arată ieșirea în monitorul serial.
Explicația codului:
Sketch-ul începe prin includerea bibliotecilor OneWire.h și DallasTemperature.h și declararea pinului Arduino la care este conectat pinul de semnal al senzorului.
#include <OneWire.h>#include <DallasTemperature.h>#define ONE_WIRE_BUS 2
În continuare creăm un obiect one-wire trecând pinul de semnal al senzorului în constructorul său. Acest obiect one-wire ne permite să comunicăm cu orice dispozitiv one-wire, nu doar cu DS18B20. Pentru a comunica cu senzorul DS18B20, trebuie să creăm un obiect al bibliotecii DallasTemperature și să transmitem ca parametru referința obiectului one-wire.
OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);
După ce un obiect DallasTemperature este creat, putem emite comenzile simple de mai jos pentru a interacționa cu senzorul.
-
begin()
funcția caută senzorii conectați pe magistrală și stabilește rezoluția de biți (12 biți) pentru fiecare. -
requestTemperatures()
funcția trimite comanda pentru toți senzorii de pe magistrală pentru a efectua o conversie de temperatură. -
getTempCByIndex(deviceIndex)
funcția citește și returnează citirea temperaturii de la senzor.deviceIndex
nu este altceva decât locația senzorului pe magistrală. Dacă utilizați un singur DS18B20 pe magistrală, setați-l la 0.
Alte funcții utile în biblioteca DallasTemperature.h
Există câteva funcții utile pe care le puteți utiliza cu obiectul DallasTemperature. Câteva dintre ele sunt enumerate mai jos:
-
setResolution()
funcția stabilește rezoluția convertorului analogic-digital intern al DS18B20 la 9, 10, 11 sau 12 biți, corespunzând unor creșteri de 0,5°C, 0,25°C, 0,125°C și, respectiv, 0,0625°C. -
bool getWaitForConversion()
funcția returnează valoarea indicatorului waitForConversion. Poate fi utilă atunci când doriți să verificați dacă o conversie de temperatură este finalizată. -
setHighAlarmTemp()
&setLowAlarmTemp()
funcția setează alarmele interne de temperatură ridicată & scăzută pentru un dispozitiv în grade Celsius. Intervalul valid este de la -55 la 125°C -
bool hasAlarm()
funcția returnează adevărat dacă dispozitivul are o stare de alarmă atunci când temperatura depășește temperatura înaltă & alarmă de temperatură joasă setată.
.