El sensor DS18B20 ha guanyat popularitat grà cies a la seva fiabilitat i versatilitat per al mesurament de temperatura. És molt utilitzat en projectes d'electrònica amb microcontroladors com Arduino, PIC o ESP8266 a causa de la seva simplicitat d'ús i la seva capacitat de connectar múltiples sensors al mateix bus, cosa que el converteix en una opció ideal tant per a amateurs com a professionals.
Un dels principals atractius d'aquest sensor és que només utilitza un cable per a la comunicació de dades mitjançant el protocol De 1 fils, la qual cosa facilita la seva integració en una à mplia varietat de projectes. A més, el DS18B20 pot funcionar en fins a dos modes d'alimentació diferents, cosa que ho fa encara més flexible. Al llarg d'aquest article, us explicarem en profunditat com funciona, com podeu connectar diversos sensors i com optimitzar els vostres mesuraments de temperatura.
CaracterÃstiques del DS18B20
El DS18B20 és fabricat per Maxim Integrated, entre d'altres, i es presenta en diversos encapsulats, sent el format A-92 (similar al de molts transistors) un dels més comuns. A més, també es pot trobar en versions segellades i resistents a l'aigua, cosa que el fa ideal per mesurar temperatures en entorns difÃcils o humits.
Entre les caracterÃstiques més destacades del DS18B20 es troben:
- El rang de temperatura que pot mesurar abasta des dels -55°C fins als 125°C, el que ho fa adequat per a aplicacions industrials i domèstiques.
- Su resolució programable pot variar entre 9 i 12 bits, cosa que permet un ajustament precÃs en funció de les necessitats de cada projecte.
- Cada sensor té una adreça única de 64 bits de, facilitant la identificació de múltiples sensors connectats en un mateix bus.
Maneres d'alimentació del DS18B20

El sensor pot operar en dos modes d'alimentació, cosa que proporciona flexibilitat a l'hora d'integrar-lo a diferents projectes, cadascun amb els seus avantatges.
Alimentació a través del pin de dades (Parasite Power)
Aquesta manera és ideal quan lespai és limitat o quan es necessiten connexions a llargues distà ncies. El DS18B20 obté lenergia directament del pin de dades quan aquest es troba en alt i emmagatzema lenergia en un petit condensador per quan la lÃnia de dades estigui en baix. Aquest tipus d'alimentació se'n diu Parasite Power.
No obstant això, és important tenir en compte que perquè funcioni correctament, cal connectar els pins GND y VDD a terra. A més, és recomanable incloure un transistor MOSFET que ajudi en situacions on les conversions de temperatura necessiten més corrent.
Alimentació usant una font externa
La forma més comuna i recomanada d'alimentar el DS18B20 és mitjançant una font externa connectada al pin VDD. Aquest mètode garanteix un voltatge estable i independent del trà nsit de dades al bus 1-Wire, la qual cosa és avantatjós per a projectes que requereixen precisió constant.
Com utilitzar el DS18B20 amb Arduino

Per treballar amb aquest sensor a la plataforma Arduino, cal fer servir dues llibreries fonamentals: OneWire y DallasTemperature. Aquestes llibreries faciliten la comunicació i permeten fer lectures i configuracions de manera senzilla.
Llibreria OneWire: Permet la comunicació mitjançant el protocol 1-Wire. Es pot descarregar des del repositori de GitHub.
Llibreria DallasTemperature: Conté les funcions necessà ries per llegir la temperatura i configurar-ne el sensor. Descarrega-la des aquest enllaç.
Quan hagis instal·lat ambdues llibreries, podràs començar a treballar amb el sensor sense complicacions. A continuació, us expliquem alguns exemples de com llegir la temperatura i com treballar amb múltiples sensors.
Exemple 1: Lectura de temperatura amb un sol sensor
Per realitzar una lectura de temperatura amb un sol DS18B20 connectat a un Arduino, el circuit bà sic inclou simplement la connexió del pin de dades del sensor al pin digital 2 de l'Arduino, juntament amb una resistència Aixecar de 4.7kΩ.
Aquest és el codi bà sic per llegir la temperatura del sensor:
#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); }
El codi és força simple. Només es requereixen un parell de lÃnies al bucle principal per sol·licitar la temperatura i llegir-la, cosa que fa que sigui molt fà cil d'implementar i personalitzar per a diferents usos.
Exemple 2: Usant múltiples sensors en diferents pins
En treballar amb més d'un DS18B20, hi ha dues maneres de connectar els sensors. La primera és assignant un pin digital diferent de Arduino a cada sensor. En aquest cas, caldrà una resistència Pull-Up de 4.7kΩ per cada sensor.
Aquà us mostrem un exemple de com treballar amb dos sensors connectats en diferents pins:
#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); }
Exemple 3: Múltiples sensors connectats a un sol pin
L'altra possibilitat de connectar diversos DS18B20 en un projecte és fer-ho usant un únic pin i el mateix bus 1-Wire per a tothom. En aquest cas, cada sensor ha de tenir el seu número d'identificació únic, que s'assigna de fà brica. Aquà us expliquem com obtenir aquestes adreces utilitzant el codi següent:
#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); }
Quan tens les adreces de tots els sensors, pots realitzar la lectura del sensor especÃfic utilitzant la seva adreça única. El codi següent et mostra com fer-ho:
#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); }
Els avantatges d'aquest mètode són que estalvieu pins a l'Arduino i podeu connectar molts sensors en paral·lel al mateix bus de dades.
Amb aquests exemples, pots veure la versatilitat i la potència del sensor DS18B20. És molt fà cil dimplementar, i si necessites connectar múltiples sensors, tens flexibilitat total per fer-ho de diferents maneres. El DS18B20 és un dels sensors més fiables per mesurar temperatura, i grà cies al seu baix consum d'energia i fà cil programació, és perfecte per a tot tipus de projectes.
El sensor DS18B20 no només és fà cil d'usar amb Arduino, sinó que també es pot fer servir en una à mplia gamma d'aplicacions industrials i residencials com el monitoratge de temperatura en sistemes d'aire condicionat, maquinà ria o fins i tot hivernacles.