«

»

Gen 13

Stampa Articolo

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!!!

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/ds18b20-temperatura-lcd.html

133 comments

Vai al modulo dei commenti

  1. ale

    Qualcuno mi sa dire se il DS1820 è uguale al DS18S20?. Ho provato lo schema del DS18S20, prima con una resistenza da 4,7 K e poi da 10 K. Ho anche modificato la tensione da 5 a 3.3 V. Il risultato: il sensore si surriscalda e se non lo stacco si mette a fumare.

    1. Mauro Alfieri

      Ciao Ale,
      il DS1820 è il componente della Dallas utilizzato dalla sonda DS18S20.
      Sei sicuro di aver collegato la sonda in modo corretto?
      Potrebbe anche essere danneggiata la sonda o essersi danneggiata in seguito ad un errata connessione.

      Mauro

  2. Michele

    E possibile avere qualche indicazione per settare delle soglie min e max direttamente dalla keypad?
    Vorrei riuscire a comandare un riscaldatore, facendolo accendere sotto una certa soglia e ovviamente spegnere se va sopra…
    Ci ho provato in vari modi ma non ci riesco…

    Grazie

    1. Mauro Alfieri

      Ciao Michele,
      ciò che vuoi realizzare é possibile ma non immediato, puoi leggerti i miei articoli sul dolly per apprendere come gestire i tasti e realizzare un menù di impostazione delle soglie, ovviamente non é uguale al dolly, dovrai adattare le parti dello sketch che ti occorrono.

      Poi ti consiglio di usare la EEPROM per memorizzare i dati e recuperarli in caso di reset del sistema.

      Mauro

  3. Ivan

    Ciao Mauro,
    complimenti per l’articolo, dovrei misurare una temperatura superiore agli 85°C, devo modificare qualcosa al tuo programma?

    1. Mauro Alfieri

      Ciao Ivan,
      dalla tua foto deduco che possa servirti per la produzione di birra 🙂 sbaglio?
      La sonda arriva a 120 gradi senza cambiare nulla nello sketch, l’unica precauzione riguarda il PVC del cavo che superati i 100 gradi potrebbe fondere 🙂

      Mauro

  4. Gianni

    Salve, che cavo usare per la sonda e che lunghezza massima?

    1. Mauro Alfieri

      Ciao Gianni,
      questa sonda è di tipo digitale per cui la lunghezza del cavo incide poco sul dato finale purchè sia di sezione sufficente a trasportare il segnale per lunge distanze.

      Non ho mai provato ad allungare il cavo per cui non so dirti i limiti che puoi raggiungere.

      Mauro

  5. roberto

    salve, mi sono imbattuto in questo sito perchè sono alla ricerca di una soluzione per il mio impianto. è un po di tempo che sto usando netduino2plus con 3 sonde ds18b20 e 3 relè, ho sviluppato un programma che legge le tre temperature e mi fa scattare i relè a valori preimpostati e funziona tutto, il problema è che se uso lo stesso programma per 28 sonde (che compongono il mio impianto) le temperature escono fuori tutte sballate (-2054, 25,0 etc). Quale potrebbe essere il problema? Avendo più sonde devo considerare qualche altra cosa?

    1. Mauro Alfieri

      Ciao Roberto,
      non conosco netduino2plus ma mi chiedo come fai a collegare 28 sonde ai pin disponibili?
      Probabilmente 28 sonde hanno bisogno di una alimentazione più coposa ed è questo il problema che rilevi.

      Mauro

  6. roberto

    ho dimenticato di scrivere che per l’impianto ho usato del cavo per allarme,ogni sonda ha almeno 6 metri di cavo attaccato, ho effettuato un collegamento a stella dell’impianto, ho utilizzato un alimentazione esterna per le sonde ed una resistenza di pull up da 4,7k

    1. Mauro Alfieri

      Ciao Roberto,
      prova a utilizzare una sezione di cavo maggiore per le prolunghe potrebbe essere il problema.
      Inoltre prova che con solo una sonda o tre sonde e dei cavi così lunghi i valori siano corretti.

      Mauro

      1. roberto

        Ciao, grazie per la risposta; le sonde sono le ds18b20 con protocollo one wire quindi mi occupano un solo pin di netduino; comunque variando la resistenza di pull up fino a 280 ohm è ripreso tutto a funzionare ma farò degli altri controlli di tensione come mi hai consigliato;per l’alimentazione delle sonde ho usato i due 0.50 del cavo dell’allarme mentre per il bus del segnale lo 0.25

        1. Mauro Alfieri

          Ciao Roberto,
          mi incuriosisce l’uso di così tante sonde su un unico pin, come fai a distinguere i valori restituiti da ciascuna sonda?

          Mauro

  7. roberto

    CIAO, netduino è completamente programmabile in c#, quindi con un amico abbiamo elaborato un programma che usa il protocollo one wire per la gestione delle sonde che hanno un indirizzo univoco esadecimale.

    1. Mauro Alfieri

      Ciao Roberto,
      se mi racconti il principio magari è utile anche ad altri appassionati.

      Mauro

      1. Federico

        L’array addr[8] che inizializzi vuoto, serve a contenere l’indirizzo della sonda. Se fai stampare, magari a seriale, il valore di addr dopo la riga 49, ti verrà fuori l’indirizzo univoco della sonda. Una volta conosciuto, si può omettere l’array vuoto addr[8] ed utilizzare un array inizializzato con l’indirizzo della sonda.
        Conoscendo l’indirizzo di tutte e 28 le sonde, si lavoro con array contenenti già l’indirizzo delle 28 sonde ed interrogarle una alla volta.
        Credo che la funzione ds.search(addr) serva proprio a cercare un indirizzo valido e una volta trovato lo inserisce nell’array addr[8].
        Suppongo che se riceve un addr[8] vuoto faccia la ricerca su tutti gli indirizzi possibili, mentre se riceve un addr già contenente un indirizzo valido faccia la ricerca solo di quell’indirizzo.
        Non ho sonde con me ma una prova sarebbe semplice da implementare, anche con una sonda sola.

  8. Giovanni

    Buongiorno,
    osservando il disegno (fig. 3) che mostra il collegamento sulla breadboard mi è sorto un dubbio. Dal datasheet mi sembrava di capire che il pin per l’ I/O dei dati è quello centrale, mentre sul disegno sopra riportato è il piedino a destra. ci sono varie versioni oppure è una svista?

    c’è scritto: la sonda mostrata nello schema non è la DS18B20 temperatura ma un componente simile alla forma originale della DS1820. …

    sta qui l’origine del problema?

    grazie
    Giovanni

    1. Mauro Alfieri

      Si Giovanni,
      la differenza consiste tra il modello della sonda e il componente che ho trovato nella libreria fritzing che non corrispondono.
      Prendi come valido il datasheet del tuo sensore.

  9. Massimo

    Buongiorno,
    Sono da un paio di mesi attirato dal mondo di Arduino…ho un sistema basato su Arduino mega 2560 R3, su cui ho montato un RTC, una ethernet shield e un MUX shield…ho delle sonde DS18B20, per l’esattezza ne ho circa 15 montate una per PIN e collegate con 3 fili (non parassitaria quindi) e cavi lunghi circa 2-3 metri.

    Funziona tutto molto bene, solo che dopo qualche giorno improvvisamente mi si azzerano alcune sonde e non c’é modo di farle ripartire, se non togliendo alimentazione al sistema…appena riavviato le sonde ripartono senza problemi per qualche altro giorno.

    Qualche idea di cosa possa essere? Uso la libreria ONEWIRE

    Grazie a tutti

    1. Mauro Alfieri

      Ciao Massimo, così a distanza mi verrebbe da dire l’alimentazione insufficiente, ma potrei sbagliare il comportamento sembra più dovuto ad un bug software che satura qualche risorsa dopo X giorni. Il fatto che non lo facciano tutte, ma solo alcune rende complesso il debug, dovresti provare a verificare per più giorni cosa accade subito prima del blocco e come sono i buffer di arduino prima e dopo ogni registrazione.

  10. Andriy

    Salve,
    quando voglio mettere lo sketch nell’arduino mi dice: ‘One Wire’ does not name a type.
    Aiuto, grazie

    1. Mauro Alfieri

      Ciao Andriy,
      non hai incluso la libreria One Wire o questa non si trova nel path in cui lo sketch si aspetta.

  11. Alex

    Ciao Mauro,
    provo da giorni a usare il sensore ma importando le librerie (unzippate e salvate in …/Programmi/Arduino/libraries), mi da un sacco di errori nella compilazione.. Sono errori usuali nel web. Suggeriscono una modifica delle librerie, modifiche che ho provato a fare ma nulla. Sono arrivato a voler evitare di usare la libreria stessa e basarmi solo sull’AnalogRead, ma con scarsissimi risultati. Hai dei suggerimenti?

    Ps. la versione software di Arduino è la 1.0.5 e le librerie le ho provate di tutte le versioni possibili e immaginabili.
    Grazie mille,

    Alessandro.

    1. Mauro Alfieri

      Ciao Alex,
      quando ho provato la libreria ho usato anch’io l’IDE 1.0.5
      Le librerie usate in questo sketch sono incluse nell’IDE e non devi installarle a parte.
      Probabilmente l’installazione dell’IDE non è andata a buon fine, prova a disinstallarlo, eliminare le dir degli esempi e delle librerie e reinstallarlo scaricandolo dal sito ufficiale.

      1. Alex

        Grazie Mauro, come hai previsto, reinstallando tutto non ho problemi di librerie.
        Adesso il problema è la temperatura che il sensore restituisce: 0.0 sempre.
        Anche in questo caso ho impostato il pin centrale del sensore al pin 8 (#define ONE_WIRE_BUS 8),mentre gli altri 2 connettori sono a +5V di Arduino Mega 2560 e a GND.

        Quale può essere adesso l’errore?
        Grazie ancora!!!!!!!!!!!!

        1. Mauro Alfieri

          Ciao Alex,
          ti invito a leggere attentamente il mio articolo per trovare, da solo, l’errore.
          Potrebbe essere dovuto a tante componenti e per tale motivo io scrivo articoli dettagliati, per aiutarti a trovare l’errore.

  12. Paolo

    ciao sto provando l esempio ma sulla seriale mi stampa sempre -1000.00

    1. Paolo

      Risolto i pin corretti sono 1(GND) ,2(DQ),3(VDD)

      1. Mauro Alfieri

        Bene bravo !!!

    2. Mauro Alfieri

      Ciao Paolo,
      sembra un errore nel collegamento del pin segnale.
      Controlla il collegamento.

  13. Marco

    ciao Mauro,

    scusa per la banalità, tento di utilizzare lo sketch fornito ma IDE non compila. sono sufficientemente convinto che l’errore sta nella mia architettura, non trovo come ordinare le cartelle, mi spiego meglio:
    nella cartella dell’ IDE deve contenere anche le librerie e lo sketch?
    ho pasticciato con le cartelle e ora penso che le librerie non sono fruibili dallo sketch. tanto che nemmeno gli esempi compilano correttamente
    Se quando includo la libreria e il software colora di arancione il nome della libreria, la posso considerare funzionante?
    l’errore nel file Wstring.h è dovuto al fatto che non trova nulla?

    scusa le domande banali ma se non risolvo le basi rischio di demotivarmi e abbandonare Arduino, nonostante vedo grandissime potenzialità.

    1. Mauro Alfieri

      Ciao Marco,
      se hai fatto confusione con le librerie ed i path degli sketch la soluzione migliore è rimuovere l’IDE e la dir Arduino nella dir del tuo utente, non ricordo con precisione dove sia su Win7 ma sono certo che nelle guide arduino sia riportato.
      Poi re-installi IDE e segui un tutorial su come installare le librerie su arduino.

  14. Marco

    Ciao Mauro,
    non riesco a replicare il tuo progetto (molto sfizioso) dopo una ricerca ho trovato che alcuni modificano le librerie per adattarle alla versione del IDE.
    Io uso WIN 7 con IDE 1.0.5 R2 ,

    tu hai apportato modifiche alle librerie?

    grazie

    1. Mauro Alfieri

      Ciao Marco,
      questo progetto è stato realizzato già con l’IDE 1.0.5, se il tuo è ancora la versione r2 non dovrebbero darti problemi le librerie.

  15. Marco

    Grazie Mauro,

    sono al settimo cielo, funziona tutto, incluso lcd .

    è la prima libreria che utilizzo, si è aperto un mondo. un sincero ringraziamento.

    Marco

    1. Mauro Alfieri

      Bene Marco, sono contento per te, ricordo la sensazione quando anch’io ho sperimentato la mia prima libreria … ed ancora oggi mi ricapita quando scopro nuove librerie e sensori 🙂

  16. Marco

    Ciao Mauro,
    per realizzare un termostato con il tuo esempio, posso aggiungere in (if)?
    dichiaro una variabile di Setpoint
    la confronto con la temperatura, ne segue un’azione…
    non è cosi facile io non capisco perché non funziona.

    1. Mauro Alfieri

      Ciao Marco,
      in linea teorica si, puoi mettere un if per il confronto tra temperatura rilevata e valore inserito nello sketch da te.
      Tuttavia scrivere lo sketch richiede che tu sappia in che punto aggiungerlo e che la condizione inserita sia verificata.

      Prova a comprendere a pieno lo sketch e i tipi di variabili usate per definire correttamente il controllo che ti interessa.

  17. angel

    disculpe tengo una duda el ds1820 es lo mismo que ds18b20 o no disculpe esq ese es mi duda

    1. Mauro Alfieri

      no, ellos son diferentes, por favor refiérase a la datasheet

  18. dario

    Salve non riesco a far funzionare la sonda…. la verifica sketch mi da:

    Lettura_ds18b20.pde:5:35: error: no matching function for call to ‘DallasTemperature::DallasTemperature(OneWire*)’
    Lettura_ds18b20.pde:5:35: note: candidates are:
    In file included from Lettura_ds18b20.pde:2:0:
    C:\Users\Dario Tumino\Documents\Arduino\libraries\DallasTemperature/DallasTemperature.h:48:5: note: DallasTemperature::DallasTemperature(NewOneWire&, uint8_t, StratBase*)
    DallasTemperature(NewOneWire &oneWire, uint8_t index = 0, StratBase* pTBase = 0);
    ^
    C:\Users\Dario Tumino\Documents\Arduino\libraries\DallasTemperature/DallasTemperature.h:48:5: note: no known conversion for argument 1 from ‘OneWire*’ to ‘NewOneWire&’
    C:\Users\Dario Tumino\Documents\Arduino\libraries\DallasTemperature/DallasTemperature.h:19:7: note: DallasTemperature::DallasTemperature(const DallasTemperature&)
    class DallasTemperature
    ^
    C:\Users\Dario Tumino\Documents\Arduino\libraries\DallasTemperature/DallasTemperature.h:19:7: note: no known conversion for argument 1 from ‘OneWire*’ to ‘const DallasTemperature&’
    Lettura_ds18b20.pde: In function ‘void loop()’:
    Lettura_ds18b20.pde:20:9: error: ‘class DallasTemperature’ has no member named ‘requestTemperatures’
    Lettura_ds18b20.pde:22:22: error: ‘class DallasTemperature’ has no member named ‘getTempCByIndex’
    Errore durante la compilazione

    Q

    1. Mauro Alfieri

      Ciao Dario,
      sembra un errore di librerie, prova a scaricare nuovamente quelle del produttore, eliminare quelle installate sul tuo IDE e reinstallare le nuove.

  19. Roberto

    Ciao Mauro!
    il tuo skech mi funziona… Grazie! ora vorrei riportare la temperatura su di una pagina html???

    1. Mauro Alfieri

      Ciao Roberto,
      hai già letto i miei articoli su come usare arduino con la ethernet shield o la centralina meteo con Yun?

  20. Luca Paladino

    Caro Mauro, i tuoi articolo sono sempre interessanti.
    Perdona la domanda sicuramente ingenua, ma la libreria OneWire.h funziona anche con un semplice LM35?
    Questo sketch può essere utilizzato per un LM35?
    Grazie.

    1. Mauro Alfieri

      Ciao Luca,
      la libreria OneWire si usa con sensori come quello mostrato che supportano il collegamento digitale su un solo cavo.
      Per i sensori tipo LM35 ti basta usare l’analogRead sul pin analogico.

  21. Manuel

    Ciao mauro
    Vorrei sapere qualche chiarimento dal rigo 59 in poi se è possibile

    1. Mauro Alfieri

      Ciao Manuel,
      dalla linea 38 alla linea 82 ho preso la funzione rilasciata dal produttore della sonda: http://www.dfrobot.com/wiki/index.php/Waterproof_DS18B20_Digital_Temperature_Sensor_%28SKU:DFR0198%29

      non mi sono addentrato nella spiegazione della funzione in quanto è la sequenza di operazioni da eseguire per interrogare il DS18B20 che puoi approfondire nel datasheeet, io ho studiato questo: http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf al tempo dell’articolo.

      1. Manuel

        io ho letto che si possono mettere più sensori su un solo filo, ma non capivo come trovare l’indirizzo di ogni sensore visto che tutte le guide dicono che:

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

        data dovrebbe indicare la quantità di bit, che può andare da 9 a 12 bit.
        ma addr non capisco perchè tutti mettono il numero 8, e perchè proprio 8 ?
        tu sai dirmi qualcosa ?

        1. Mauro Alfieri

          Ciao Manuel,
          addr[8] insica solo che l’indirizzo è di 8 byte non che l’indirizzo è 8.
          Nello sketch è presente un metodo della classe ds: ds.search(addr) che potrebbe servire alla ricerca dei dispositivi presenti nel tuo circuito, non ho mai verificato questa condizione non possedendo più sensori da testare, potresti verificare nella libreria OneWire.h o OneWire.c come è gestito questo metodo e se è possibile implementare una ricerca per il numero di sensori che possiedi.

  22. Riccardo Nava

    Ciao Mauro, innanzitutto complimenti e grazie per tutti i progetti che porti a termine, è circa una settimana che provo a far andare il mio sensore DS18B20 ma trovo sempre difficoltà con lo sketch, il programma di arduino mi dice che c’è un errore nella compilazione, ma è diverso, di solito mi si evidenziava la riga con l’errore, qui no. è un problema di librerie? ho letto da qualche parte che onewire.h o, in altri sketch in internet, dallastemperature.h sono nuove, non so se sia vero.. grazie in anticipo :)‎

    1. Mauro Alfieri

      Ciao Riccardo,
      hai provato ad installare le librerie che uso io nel mio sketch e verificare cosa accade?

  23. Federico

    Mi sono arrivate le sonde ed ho fatto un pò di prove. Ho fatto come avevo accennato tempo addietro e tutto funziona perfettamente.
    Spiego: per scoprire l’indirizzo di una sonda basta aggiungere queste righe di codice dopo la riga 58
    Serial.print(“Indirizzo: “);
    for(int i=0;i<7;i++){
    Serial.print(addr[i]);
    Serial.print("-");
    }
    Serial.println(addr[7]);
    Servono a stampare su seriale l'indirizzo della sonda. Per indirizzare la singola sonda basta creare un addr[8] inizializzato con l'indirizzo ricavato:
    byte addr[]={40,255,99,167,96,20,4,43}; //Indirizzo della mia sonda
    E il gioco è fatto! Basta ripetere per il numero di sonde collegate.

    1. Mauro Alfieri

      Grazie 1000 Federico,
      sono sicuro che il tuo contributo sarà di grande aiuto a chiunque desideri utilizzare più sonde DS18B20 nel suo progetto.

  24. agos

    ciao ho collegato tutto come il tuo esempio ,ma la temperatura che leggo è sempre -1000.00 dove sbaglio ciaoe grazie

    1. Mauro Alfieri

      Ciao Agos,
      se leggi il mio sketch e la sua spiegazione ti accorgerai che alla linea 47 c’è un if il cui fallimento causa il problema che evidenzi.
      Partendo da quell’errore puoi procedere ad eseguire dei test per verificare che la sonda funzioni e che sia connessa in modo corretto.

      1. agos

        grazie mauro,scusa ma sono ignorante in materia,la sonda funziona ,l’ho collegata secondo il tuo schema,magari ho messo una resistenza con un valore diverso,mi serviva un termometro per controllare la temperatura in fase di ammostamento della birra,dato che la sonda ds18b20 è molto precisa,pensavo di aver risolto il mio problema,ho provato a collegare la sonda in modo differente ma il risultato non cambia,i fili della sonda sono rosso nero e giallo,che devo fare ,grazie per l’aiuto,ciao

        1. Mauro Alfieri

          Ciao Agos,
          come fai a dire che la sonda funziona?
          Da quello che scrivi non è certo che funzioni.
          In ogni caso ci metterei la resistenza consigliata dal produttore.

          1. agos

            la sonda l’ho provata con un altro sketc e funziona correttamente ,ho ricomprato una resistenza da 10kohm come quella usata da te,ma non va,che faccio grazie

          2. Mauro Alfieri

            Ciao Agos,
            perdonami, cerco solo di capire, tu hai provato la sonda con un altro sketch e funziona, bene !!!
            Il mio esempio di sketch è solo un test e non fa altro che misurare i valori della sonda e mostrarli su LCD per cui non comprendo quale difficoltà tu possa incontrare.
            Forse la cosa più semplice è aggiungere allo sketch che ti funziona la parte di visualizzazione LCD che trovi in tantissimi tutorial.

          3. agos

            la difficoltà che incontro è la seguente ; collego tutto come il tuo schema ma la temperatura segnata dal display è sempre la stessa, -1000.00 siccome non sò come aggiungere la parte di visualizzazione allo sketch che mi funziona non sò a chi chiedere un aiuto, non sò programmare!!!!! scusami, potresti aiutarmi?ti posto il link dello sketch che mi funziona
            https://cfpmanfredini.wordpress.com/2014/01/07/misura-la-temperatura-con-sensore-dallas-ds18b20/
            grazie in anticipo ciao

          4. Mauro Alfieri

            Ciao Agos,
            nel link che mi hai postato è presente anche un esempio di come scrivere sul display, non ti funziona ?
            La differenza tra il mio sketch e quello riportato è l’uso della libreria DallasTemperature io non utilizzo.
            Il blog è nato proprio con l’idea di insegnare le poche cose che c’è da sapere su arduino a chi vuole realizzare il proprio progetto, se non sai come usare un display LCD prova a leggere i tutorial sugli LCD.

          5. agos

            ti ringrazio per i suggerimenti, ho provato vari sketc,anche a scrivere sul display e tutto funziona,ho provato dei termometri e leggere la temperatura con il pc con il seriale di arduino e tutto funziona,soltanto il tuo sketch,non funziona,leggo il display e la temperatura è sempre -1000.00,tu dici di controllare alla riga 47 ,ma non essendo un programmatore,non capisco dove sia l’errore,volevo soltanto usufruire del tuo sketch,per questo ti ho contattato,i collegamenti sono i stessi che fai tu,la sonda funziona,la resistenza è quella giusta,il display funziona,ma la temperatura segnata rimane invariata,la mia è soltanto curiosità,per capire dove sia l’errore,a presto e grazie

        2. Gianpaolo

          Ciao Mauro, grazie per la condivisione e il tempo che dedichi per darci la possibilità di imparare!
          Volevo chiederti, quella resistenza tra i +5v e il segnale del sensore serve per far viaggiare corrente nel segnale per amplificarlo?

          1. Mauro Alfieri

            Ciao Gianpaolo, è una resistenza richiesta dal produttore del sensore, sinceramente non mi sono mai addentrato nello schema del componente per verificarne la funzione.

  25. Federico

    Per Agos (il link alla risposta non mi viene visualizzato):
    Prova a fare così: alla riga 52 sostituisci il -1000 con -2000 e alla riga 57 sostituisci il -1000 con -3000.
    In questo modo non risolvi il tuo problema ma riesci a distinguere i 3 errori.

    1. Mauro Alfieri

      Grazie Federico.

  26. Nicola

    Salve Mauro,
    innanzitutto complimenti per l’articolo esaustivo.
    Ci tenevo a esporre un mio dubbio:
    volevo posizionare 5 di queste sonde una dopo l’altra equispaziate di circa un metro, tale che la più lontana venga a trovarsi a circa 7 metri da arduino.
    1) devo seguire qualche accorgimento particolare o mi basta seguire il disegno di questo tuo progetto allungando i 3 cavi?
    2) che cavi mi conviene usare per realizzare il collegamento?
    3) il protocollo 1 wire fa al caso mio? Non mi sembra tu abbia scritto articoli in proposito, o sbaglio?
    Ti ringrazio fin da ora per i suggerimenti che vorrai fornirmi

    1. Mauro Alfieri

      Ciao Nicola,
      penso che il sistema di comunicazione OneWire non dovrebbe avere problemi con le distanze a patto di adeguare la sezione del cavo alla distanza da coprire, in ogni caso 7m non sono una distanza sulla quale dovresti rilevare errori di misura.
      In ogni caso ti consiglio di eseguire qualche test.

      1. Nicola

        ciao Mauro, rispondo solo ora perchè purtroppo non mi sono arrivate notifiche di tua risposta.
        1) Sai come posso rimediare al problema per i tuoi futuri suggerimenti?

        2) Non ho trovato tuoi esempi sul sistema di comunicazione OneWire. Avresti qualche pagina di terzi da suggerirmi?
        3) A spanne credi che il doppino telefonico possa fare a caso mio?

        1. Mauro Alfieri

          Ciao Nicola,
          cerco di risponderti per punti:
          1) non ho compreso la tua richiesta
          2) quello che stai leggendo è un esempio, altri penso tu possa trovarli googolando OneWire, non ho riferimenti specifici, quando ho dei dubbi leggo il codice della libreria e studio il datasheet del sensore che mi occorre controllare;
          3) direi che la sezione del doppino è troppo sottile almeno starei su 1mm di sezione.

        2. Nicola

          1) Non ricevo più mail da questo sito, ne le newsletter, ne le mail di notifica quando ricevo risposta ai commenti.
          Hai idea di quale possa essere il problema?
          2) Una cosa non mi è chiara. Questo esempio è di one wire? Il sensore non è collegato a tutti e 3 i pin? Pensavo di aver capito che con tale protocollo si potessero sfruttare solamente 2 pin

          1. Mauro Alfieri

            Ciao Nicola,
            per il punto 1 prova a controllare che per qualche motivo il tuo provider non abbia inserito il mio indirizzo info tra quelli bloccati, in ogni caso puoi definire l’indirizzo info del blog come valido ( lista bianca o white list )
            Per il punto 2 i 3 pin sono +5v, Gnd e segnale .. non puoi omettere nessuno dei tre.

          2. Nicola

            boh, sulle impostazioni di gmail non ho la tua mail sui filtri antispam, non riesco a spiegarmelo.

            Riguardo il secondo punto, il protocollo one wire non dovrebbe permettere, sfruttando l’alimentazione parassita, di poter utilizzare solo due cavi, segnale e Gnd?

          3. Mauro Alfieri

            Ciao Nicola,
            osservazione interessante sulle correnti parassite, non ho mai letto questa informazioni e mi sono limitato a usare il sensore come suggerisce il produttore.
            Hai qualche link che posso consultare in merito per approfondire.

          4. Nicola

            http://openenergymonitor.org/emon/buildingblocks/DS18B20-temperature-sensing

            Qualcosa l’avevo trovato qui.
            Non è specificato però quali sono i limiti di tale tipologia di collegamento, cioè se perde di precisione o altro, ne’ a quanto ammonta la riportala “rrelatively short distances”

          5. Mauro Alfieri

            Ciao Nicola,
            conosco il progetto e sto utilizzando la loro piattaforma open per la raccolta dati in un progetto di monitoraggio ambientale.
            Proverò a leggere nello specifico il link che mi hai indicato.

          6. Nicola

            grazie mille.
            Spero scriverai un articolo a riguardo

  27. Mirco

    Ciao Mauro,
    ti faccio i complimenti per i tuoi articoli che mi sono stati veramente utili per completare il mio datalogger su SD card per monitorare la temperatura dell’acqua della piscina.

    Avrei un dubbio, ho utilizzato la stessa sonda di questo articolo (ds18b20 con cavo da 1 mt) e dato che la misura del cavo è troppo corta vorrei sapere se facendogli una prolunga rischio di compromettere la corretta lettura della temperatura.

    Hai qualche consiglio a riguardo?
    Grazie per la risposta
    Mirco

    1. Mauro Alfieri

      Ciao Mirco,
      trattandosi di una sonda digitale e non analogica non dovresti avere problemi di distanza a patto di utilizzare dei cavi di sezione adeguata alla distanza che devi percorrere più che altro per l’alimentazione che potrebbe subire cali di tensione dovuti alla resistenza del cavo stesso.
      Non so a quanti metri devi mettere la sonda ti suggerisco dei cavi da almeno 1mm

  28. Fausto Ballardini

    Salve! dopo aver usato il sensore ds1820 in svariati progetti, ora dopo aver installato l’IDE 1.6.1 e la libreria mi ritrovo la compilazione che mi d’à questo errore:

    \Documents\Arduino\libraries\OneWire\OneWire.cpp:85:24: fatal error: WConstants.h: No such file or directory
    #include “WConstants.h”
    ^
    compilation terminated.

    mentre se compilo con 1.0.5 non ho problemi.

    Cosa è cambiato e cosa non ho installato probabilmente ??.
    il file è quello di questa pagina.

    Grazie per questo sito, punto di riferimento.

    Fausto

    1. Mauro Alfieri

      Ciao Fausto,
      non ho provato a compilare con la 1.6.x sketch che usano la OneWire, dall’errore che riporti sembra che non esista o che tu non abbia installato il file WConstants.h
      Da precedenti esperienze capita che tra una release dell’IDE ed un’altra qualche libreria venga riscritta e cambi nome per non essere confusa con la versione precedente.
      Verifica se esiste un aggiornamento della OneWire che supporti la versione di IDE attuale.

  29. periglio

    Ciao Mauro, sto provando il tuo progetto con il sensore 18b20P. il display mi indica sempre -1000.
    C’è qualche differenza circuitale con il ds18b20 ?
    Grazie.

    1. Mauro Alfieri

      Ciao Periglio,
      hai provato a verificare nel datasheet della tua sonda se il tpo di comunicazione sia la medesima prevista per il mio modello o vi siano delle differenze?
      La soluzione più rapida è di utilizzare la libreria rilasciata dal produttore/venditore della sonda.

      1. periglio

        Ciao Mauro, ho fatto delle ricerche ed ho scoperto che vanno usati solo 2 pin della sonda.
        Il pin 1 e 3 vanno cavallottati e collegati al gnd mentre il pin 2 potra il segnale.
        Adesso faro delle prove e ti faccio sapere.
        Per quanto riguarda la libreria sembra che va bene la onewire usata da te.
        P.S.
        Ho provato a collegare la sonda al raspberry cavallottando il pin 1 e 3 e funziona.

        1. Mauro Alfieri

          Bene Periglio,
          tienimi aggiornato.

          1. periglio

            Ciao Mauro,
            Dopo tante prove e ricerche ho risolto il problema.
            Ho comprato la sonda ds18b20.

            …e funziona benissimo

          2. Mauro Alfieri

            Bene Periglio,
            sono contento 🙂

  30. Diego

    Si questo progetto è molto interessante ma come faccio a togliere tutta la parte del display e programmare la misura di soglia al tal punto che una volta arrivata mi accende un led ?

    1. Mauro Alfieri

      Ciao Diego,
      leggi i tutorial del corso base prima di cimentarti in cose più complesse e approfondisci le linee di codice descritte nell’articolo che ti spiega come funziona tutto.

  31. elvis

    Ciao Mauro,
    compliementi per il progetto, questo fa al caso mio ma vorrei capire come posso modificarlo per impostare due temperature una di min e una di max (se si potessero inserire tramite ldc sarebbe ottimo) che al raggiungimento della temp. max mi chiude il rele e quando torna alla temperatura min mi apre il rele..

    Grazie
    elvis

    1. Mauro Alfieri

      Ciao Elvis,
      hai letto la descrizione del listato commentata linea per linea ?
      Commento ogni sketch linea per linea proprio per insegnarVi ad eseguire le modifiche.

      1. elvis

        perfetto funziona tutto, ho inserito anche il relè!

        grazie

        1. Mauro Alfieri

          Bene, sono contento

  32. Ignazio

    Ciao Mauro sono un novellino di Arduino, e i tuoi tutorial mi stanno dando una mano a capire questo fantastico mondo, ti scrivo perche ho questo problema con la sonda ds18b20, in pratica se collego Arduino con la porta USB tutto funziona perfettamente ma se collego solo l’alimentazione esterna 9v il displey comincia ad indicare una lettura -127. Ti ringrazio in anticipo per qualsiasi aiuto possa darmi.

    1. Mauro Alfieri

      Ciao Ignazio,
      sei certo che i componenti siano come i miei? A volte basta una shield differente e devi ricalcolarti i collegamenti e le connessioni.

      1. Ignazio

        Ciao Mauro e grazie per il tempo che ci dedichi, effettivamente avevo messo la resistenza di pull-up con un valore errato, come l’ho cambiata tutto ha cominciato a funzionare correttamente.
        sto imparando molto dai tuoi tutorial (devo solo essere un po più attento) e continuerò a seguirti con molto interesse.

        grazie.

        1. Mauro Alfieri

          Bene Ignazio,
          sono contento tu abbia compreso la differenza con il mio progetto e sia riuscito ad eseguire la correzione.

          1. Ignazio

            Grazie Mauro,
            senza dubbio abuserò ancora della tua disponibilità, nel frattempo ti seguo con interesse.

  33. Pier Antonio

    Ciao, è possibile avere una lettura al decimo di grado, anzichè al centesimo, o addirittura per “step” di 0.5 gradi?

    1. Mauro Alfieri

      Ciao Pier Antonio,
      se vuoi ridurre la precisione della lettura puoi farlo via codice, nel senso che confronti il dato con la scala che desideri ed usi il valore che vuoi.

  34. Antonio

    ciao, nel listato:
    LiquidCrystal lcd(8,9,4,5,6,7);

    ma quali i collegamenti alle rispettive porte dell’lcd quali pin si collegano a RS RW???

    grazie

    1. Mauro Alfieri

      Ciao Antonio,
      li trovi nella documentazione della Libreria, noon li ricordo a memoria, ogni volta io vado sul sito arcuino.cc e leggo nel referenze delle librerie.

  35. Alessandro

    Ciao Mauro,
    ho riprodotto il progetto è funziona perfettamente. Quando cambio sensore ed inserisco al posto del DS18B20 il DS18S20, la temperatura non è corretta. Potresti dirmi quali sono le modifiche da apportare per una corretta lettura. Ti ringrazio anticipatamente per l’eventuale risposta.

    1. Mauro Alfieri

      Ciao Alessandro,
      avranno protocolli differenti, controlla sul sito del produttore se esiste un esempio già adatta al tuo sensore, in caso contrario dovrai adattare lo sketch seguendo le specifiche del sensore da datasheet.

  36. Cesare

    Salve,
    si potrebbe controllare la temperatura da remoto tramite smartphone? nel caso ha qualche sketch di esempio?
    Grazie

    1. Mauro Alfieri

      Ciao Cesare,
      è possibile ma devi scriverti da solo lo sketch perché io non ho mai avuto questa esigenza.
      Trovi molti articoli nel blog a cui ispirarti.

  37. fabio

    Salve potrebbe inviarmi lo schema per collegare il display lcd? grazie

    1. Mauro Alfieri

      Ciao Fabio,
      in questo progetto ho usato una keypad shield, ma nel blog trovi tanti articoli in cui è dettagliato come collegare questo tipo di display.

  38. Paolo

    Ciao Mauro, ho realizzato un sistema di misurazione sulla base di questo tutorial con due sonde DS18B20 collegate ai pin 02 e 04 di arduino. Ogni sonda ha la sua resistenza da 10K ohm tra vcc e dati. Ho notato due cose però:
    – da un po’ di tempo le due sonde cambiano valore solo su step di 0,5 gradi e non importa se altero la risoluzione dallo sketch. Sostituendole con altre due che tenevo da parte i valori invece tornano ad avere più risoluzione (sempre con lo stesso sketch). Secondo te è possibile che con qualche sbalzodi alimentazione i sensori abbiano “perso” risoluzione?
    – la coppia di sonde se messa affiancata nello stesso ambiente mi da valori di temperatura diversi nell’ordine di 1° / 1,5° (ad es una segna 22,5 l’altra 24) . Ho fatto anche dei test tenendo una sola sonda nel circuito per volta e affiancando un termometro analogico per valutare l’affidabilità, 4 sonde 4 valori diversi tra loro e solamente una si avvicinava alla temperatura dell’analogico nell’ordine di 0,5° C.
    Da quello che leggo in giro questi sensori sembrano già “tarati di fabbrica” quindi da cosa possono dipendere i miei problemi di affidabilità? Magari dipende dalla qualità delle connessioni sonda-breadbord-arduino?
    Grazie in anticipo.

    1. Mauro Alfieri

      Ciao Paolo,
      potrebbe dipendere da vari fattori inclusa la manifattura delle sonde stesse che se non certificata, e di certo si fa fatica a trovarne di certificate, può causare i problemi che riscontri.
      Io preferisco tarare le sonde prima, come vedi in questo sketch, ed inserire un offset per sonda.
      Sul primo problema non ho una risposta, non mi è mai capitato.

      1. Paolo

        Si in effetti il problema può anche essere nelle sonde che non sono certificate. Per quanto riguarda offset e taratura non trovo niente nel tuo sketch, o forse mi sfugge…come posso ribilanciare i valori diversi dei due sensori?

        1. Mauro Alfieri

          Ciao Paolo,
          puoi definire degli offset per sonda e sottrarli o sommarli ai valori letti.

          1. Paolo

            Ok, grazie per la dritta Mauro.
            Mi cerco qualche documentazione a riguardo, a presto!

  39. Maurizio

    Ciao Mauro.
    Scusa ma non capisco la riga 24…void loop(void)…
    Volendo inserire questa parte all’interno di un altro sketch che ha un void loop(), dove lo devo mettere?
    All’interno o è una funzione esterna??
    Grazie.

    1. Mauro Alfieri

      Ciao Maurizio,
      la loop() in uno sketch arduino è unica, per cui puoi:
      1. integrare i comendi presenti in questa loop() direttamente nella loop() dell’altro sketch;
      2. usarla come funzione esterna rinominandola, ad esempio, come loop2 e richiamandola dalla prima loop()

      1. Maurizio

        Grazie Mauro, mi rimane il dubbio di quella riga 24…void loop(void)…
        che cosa significa??

        1. Mauro Alfieri

          Ciao Maurizio,
          la loop() è una finzione che non accetta parametri e non restituisce valori per cui è definita void.
          Solitamente la trovi definita come void loop() {} ma alcuni preferiscono ribadire che non accetta parametri inserendo tra () la definizione “void”

  40. massimo curcio

    ciao Mauro, volevo chiederti se si puo’ utilizzare la funzione int chk per memorizzare la temperatura di un sensore ds18b20, o si usa esclusivamente per il dht11? grazie anticipatamente per la cortese risposta

    1. Mauro Alfieri

      Ciao Massimo,
      “int chk” è una variabile non una funzione, almeno scritta come hai fatto tu.
      Purtroppo non la vedo in questo sketch e non saprei aiutarti, sei certo di averla letta in questo articolo?

  41. Pasquale

    Ciao Mauro!

    Grazie per gli splendidi articoli che pubblichi, io di questo articolo non ho capito una cosa:
    – ipotizzando di avere due sonde, come la rilevo e la distinguo la temperatura di una sonda piuttosto che la temperatura dell’altra?
    – la funzione getTemp() quale temperatura mi indica? di quale delle due sonde?

    in poche parole: “come faccio ad implementare più sonde?” si è parlato addirittura di chi ne ha 28, ma mai si è detto come sia possibile collegarne più di una…

    1. Mauro Alfieri

      Ciao Pasquale,
      non è scritto in questo articolo in quanto riguarda la programmazione con più istanze di cui puoi leggere in altri articoli magari dedicai ai servo od ad altri oggetti.
      Nel caso della sonda DS18B20 ti è sufficiente duplicare la linea 8, cambiare il nome dell’istanza ed il pin a cui hai connesso le sonde e nella getTemp() scegli se duplicare tutta la funzione o renderla parametrica.

  42. Cesare

    salve Mauro, complimenti per il suo blog, seguo con molto interesse i suoi post.

    sono un neofita e vorrei chiederle un aiuto, poichè non riesco a capire come fare uno sketch.

    vorrei dare due entrate digitali al mio arduino uno (due sonde temperatura) una ‘calda’ e una ‘fredda’.
    arduino dovrebbe misurare la differenza di temperatura (da 0°C di differenza a +20 °C di differenza supponiamo, mai in negativo=> ovvero non deve mai restituire il calore dissipato da una parte) e all’aumentare della differenza, dovrebbe far aumentare il regime di una ventola, es: a 0°= ventola a 0%; +1°C= v. a 5%; a+2°C=v. a 10% a +4°C= v. al 20%; a 8°C= v. a 40%; ….; a 20°C= v. a 100%. il tutto però dovrebbe essere incrementale, non a scatti.

    per sfizio vorrei avere anche un display che misura la temperatura attraverso altre due sonde, poste in punti intermedi tra la fonte calda e l’ambiente raffreddato.

    potrei inviare uno schizzo per meglio comprendere cosa intendo, ma non riesco a postarlo nel commento. se è possibile, vorrei poterla contattare in privato.

    si può fare? mi può aiutare?

    Grazie

    1. Mauro Alfieri

      Ciao Cesare,
      puoi fare entrambe le cose che descrivi con Arduino ma devi avere delle solide basi di programmazione per scrivere un algoritmo di PID come quello che desideri incrementare ed in ogni caso ricorda di impostare l’isteresi.
      Il secondo obiettivo, preso da solo, è più semplice e, in quanto neofita, ti consiglio di iniziare con quest’ultimo.

      Non mi serve uno schizzo per comprendere quello che ti occorre, lo hai descritto in modo sufficientemente chiaro.

      L’aiuto che posso darti con il Blog è consigliarti la lettura del mio corso base gratuito e continuare con gli articoli specifici sulle sonde e sui display.

  43. Maurizio

    Ciao Mauro,ho provato il tuo sketch utilizzando il Ds18b20, ma mi visualizza sempre 85° e se scaldo o raffreddo la sonda mi da sempre 85°…
    Cosa potrebbe essere??
    La sonda la riconosce, perchè scollegandola mi segnala che non trova la sonda….
    Che fare per risolvere il problema??

    1. Mauro Alfieri

      Ciao Maurizio,
      la DS18B20 è una sonda molto utilizzata e la libreria è stata più volte testata. Potrebbe dipendere da qualche collegamento nella sonda o da un malfunzionamento del componente.

      1. Maurizio

        Grazie Mauro della risposta, ho riguardato i collegamenti diverse volte ma sono ok.
        Ho provato a prendere arduino uno e a caricare il sw così come l’hai pubblicato (precedentemente utilizzavo un mega e fatto girare all’interno di un mio progetto).
        Ho sostituito il DS con un’altro….
        Ma il risultato è sempre lo stesso:85° fisso….
        Ho utilizzato la libreria che è all’interno dell’IDE (1.6.3)…..forse è troppo vecchia??
        Dove trovo quella aggiornata?
        Una domanda: ho letto che il tempo di conversione è di 750mS…..ma durante quel tempo il micro deve stare fermo o è possibile eseguire altro??
        grazie.

      2. Maurizio

        Ciao Mauro, ho introdotto un delay tra riga 62 e 64 di almeno 750mS ed ora restituisce il valore…
        Trovo però che non è preciso; alla riga 78 ho messo /17 (valore empirico) e mi restituisce il valore quasi corretto.
        La domanda è: perchè /16?
        Come posso fare per abbassare la risoluzione della conversione, in modo da impiegare meno tempo?
        Grazie.

  44. Filippo

    Ciao
    vorrei mettere in funzione il tuo progetto per misurare gli step di temperatura della fase di mash della birra. Vorrei però impostare gli step di temperatura con la tastiera del display e vedere con un processo di luci led lo stato della produzione del mosto.
    – Led Giallo: temperatura impostata non ancora raggiunta
    – Led Verde: temperatura impostata raggiunta
    – Led Rosso: temperatura Superata
    In realtà il progetto sarebbe più complesso… ma da qualche parte di deve cominciare

    Pensi sia una cosa difficile?
    Grazie in anticipo

    1. Mauro Alfieri

      Ciao Filippo,
      non penso sia complesso, dipende dal tuo livello di conoscenza di programmazione e da quanta curiosità e voglia di studiare arduino e codici possiedi.

  45. Tiziano Arbizzani

    Ciao, Mauro!
    Considerati complimentato per il tuo lavoro, lo sto sfruttando a man bassa …!
    Avrei una piccola domanda: nella linea 62 viene eseguita una write sul bus OneWire con il secondo parametro a ‘1’. Stando a quello che mi pare di capire (anche dal commento) in questo modo si segnala che si intende utilizzare la modalità “parasitic power”.
    Se non ho preso un granchio colossale, però, il chip è completamente alimentato, non preleva corrente dal pin del bus. Ad occhio non dovrebbe dar problemi (se ho capito bene viene solo detto di non “tirare giù” il bus per il resto dell’operazione per non disalimentare il chip).
    C’è un motivo che mi sfugge in tutto ciò?
    TI ringrazio tanto.
    Tiziano

    1. Mauro Alfieri

      Ciao Tiziano,
      hai sollevato un dubbio sul quale non mi ero soffermato. Effettivamente, leggendo sul learning arduino: https://playground.arduino.cc/Learning/OneWire la modalità “Parasite power mode” ti permette di non dover utilizzare l’alimentazione del Vcc in aggiunta al Gnd e Data.
      Nella scrittura dello sketch mi sono attenuto all’esempio rilasciato dall’autore della libreria: https://github.com/PaulStoffregen/OneWire che usa la sintassi riportata nello sketch.
      Leggendo direttamente nella libreria trovi:

      // Write a byte. If ‘power’ is one then the wire is held high at
      // the end for parasitically powered devices. You are responsible
      // for eventually depowering it by calling depower() or doing
      // another read or write.
      void write(uint8_t v, uint8_t power = 0);

      che indica esattamente quanto evidenzi, sarebbe interessante provare lo sketch senza collegare il Vcc alla sonda DS18B20 e con ua resistenza di pull-up da 4,7K come indicato nel playgroud.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>