DS18B20 temperatura lcd

La sonda DS18B20 temperatura è una digitale e resistente all’acqua, utilizza come componente principale per la misurazione della temperatura il DS1820 della Dallas.

DS18B20 temperatura display

Puoi utilizzare questa sonda per misurare la temperatura sia dell’ambiente sia di liquidi o terreno. Le specifiche del produttore indicano:

  • Tensione di alimentazione da 3.0V a 5.5V
  • ±0.5°C Precisione da -10°C a +85°C
  • Range di temperatura misurabile: -55 a 125°C (-67°F a +257°F)
  • da 9 a 12 bit di risoluzione
  • Un unico cavo di connessione digitale
  • Tempo di risposta inferiore a 750ms

Questi dati sono utili non solo per la connessione della sonda ma sopratutto per il progetto che desideri realizzare.

Dalle specifiche avrai letto che la precisione che potrai ottenere è ±0.5°C nella fascia di temperature da -1’°C a +85°C fascia di utilizzo più frequente.

Vorrei porre l’attenzione su un altro dato: la temperatura misurabile, vuol dire che puoi usare la sonda DS18B20 temperatura da -55°C fino a 125°C tuttavia essendo il cavo di connessione in PVC ti sconsiglio di impiegare la sonda con temperature superiori ai 100°C.

Come collegare la DS18B20 temperatura

Puoi connettere la DS18B20 temperatura ad arduino mediante una resistenza di pull-up ossia una resistenza da 10Kohm connessa tra il cavo del segnale ( giallo ) ed il positivo ( cavo rosso )

DS18B20 temperatura

puoi seguire questo schema per il collegamento:

DS18S20 temperatura schema connessione sonda

la sonda mostrata nello schema non è la DS18B20 temperatura ma un componente simile alla forma originale della DS1820. La resistenza da 10Kohm tra il pin positivo e il pin del segnale ( giallo ) garantisce la corretta lettura della temperatura.

Sketch DS18B20 temperatura

Lo sketch originale fornito dal produttore della sonda si limita a leggere i valori di temperatura dalla sonda DS1820 e visualizzarli sul monitor seriale, ho deciso di aggiungere al progetto un display Lcd e per non fare tutti i collegamenti ho usato la Keypad LCD che ha già tutti i pin collegati.

#include <OneWire.h>
#include <LiquidCrystal.h>

#define BUTTON A0

int DS18B20_Pin = 2;

OneWire ds(DS18B20_Pin);
LiquidCrystal lcd(8,9,4,5,6,7);

void setup(void) {
  Serial.begin(9600);

  lcd.begin(16, 2);

  lcd.setCursor(0,0);
  lcd.print("  DS18B20 LCD  ");
  lcd.setCursor(0,1);
  lcd.print("mauroalfieri.it");

  delay( 3000 );
}

void loop(void) {
  float temperature = getTemp();
  Serial.println(temperature);

  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("Temperatura:   ");
  lcd.setCursor(0,1);
  lcd.print(temperature);

  delay(1000); //just here to slow down the output so it is easier to read

}

float getTemp(){
  //returns the temperature from one DS18B20 in DEG Celsius

  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
      //no more sensors on chain, reset search
      ds.reset_search();
      return -1000;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return -1000;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) {
      Serial.print("Device is not recognized");
      return -1000;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE); // Read Scratchpad

  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
  }

  ds.reset_search();

  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;

  return TemperatureSum;

}

lo sketch che vedi sopra è la fusione tra quello rilasciato per la DS18B20 temperatura con l’aggiunta della parte LCD relativa al controllo della Keypad.

Linea 01: includi la libreria OneWire.h con cui puoi leggere il valore di temperatura della sonda;

linea 02: includi la libreria di controllo dell’LCD.

linea 04: definisci il pin a cui sono collegati i pulsanti della keypad Lcd, tali pulsanti in questo sketch non saranno utilizzati;

linea 06: dichiara il pin a cui collegherai la sonda DS18B20 temperatura;

linea 08: dichiara l’oggetto ds come istanza della classe OneWire indicandle che la sonda è collegata al pin dichiarato alla linea 06;

linea 09: dichiara l’oggetto lcd come istanza della classe LiquidCrystal che ti serve per getire la connessione con il display Lcd sui pin 8,9,4,5,6 e 7;

linee 14-19: inizializza il display Lcd 16×2 e scrivi sulla prima linea ”  DS18B20 LCD  ” e sulla seconda linea “mauroalfieri.it”;

linea 21: attendi 3 secondi per consentire la lettura della frase appena scritta sul display LCD;

linea 25: definisci una variabile ti tipo float che chiami temperature il cui valore sarà preso dalla lettura della sonda attraverso la funzione getTemp();

linea 26: scrivi il valore di temperatura letto sul monitor seriale di Arduino;

linee 28-32: pulisci il display dal testo precedente e scrivi sulla prima riga “Temperatura:   ” e sulla seconda la temperatura letta dal sensore;

linea 34: attendi 1 secondo prima di ripartire con il loop();

linee 39-84: la funzione getTemp() legge i valori provenienti dalla sonda e li converte in numeri decimali con la precisione del centesimo di grado in modo che tu possa visualizzarli sul display del DS18B20 temperatura.

Test del progetto DS18B20

Per provare il progetto puoi effettuare da subito la lettura della temperatura istantanea dell’ambiente lasciando la sonda libera all’aria aperta e per essere certo che la temperatura rilevata variasse ho preparato una bacinella di acqua in cui ho immerso del ghiacci sintetico, i blocchi che di solito si utilizzano nelle borse frigo:

DS18S20 temperatura vasca ghiaccio

ho potuto rilevare che l’acqua aveva una temperatura di 11°C circa, avrei potuto abbassare la temperatura dell’acqua avendo a disposizione altro ghiaccio sintetico o dei cubetti di ghiaccio in quanto la temperatura del ghiaccio che si scioglie è circa 0°C.

Il video

Ho realizzato un video del mio esperimento:

Buona misurazione!!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/ds18b20-temperatura-lcd.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.