Go Down

Topic: sonda DS18B20 (Read 10286 times) previous topic - next topic

ferdard

Salve amici,
da qualche giorno ho acquistato la sonda di temperatura DS18B20, ho installato la libreria, ho recuperato l'id della sonda, ho fatto i collegamenti, ma non riesco a sviluppare lo sketch per leggere la temperatura. girando un po sulla rete ho trovato solo sketch per recuperare l'id.
potreste darmi una mano?

grazie


ferdard

ciao grazie per il consiglio, avevo già visto queste pagine, ma il codice mi sembra quello da utilizzare per conoscere l'id della sonda.

fringui

leggi meglio, il codice cerca, identifica e interroga...

ferdard

ho copiato il codice in arduino, ma non mi da nessuna temperatura...

PaoloP

#5
Apr 08, 2013, 06:18 pm Last Edit: Apr 08, 2013, 06:20 pm by PaoloP Reason: 1
Lo schema per i collegamenti lo trovi qui: scheda 23 --> http://arduino.cc/forum/index.php/topic,146152.0.html
Ricordati la resistenza di pull-up.
La libreria aggiornata per l'IDE versione 1.0.x qui --> https://github.com/milesburton/Arduino-Temperature-Control-Library
La OneWire qui --> http://www.pjrc.com/teensy/td_libs_OneWire.html
Lo sketch qua
Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

void setup(void)
{
 // start serial port
 Serial.begin(9600);
 Serial.println("Dallas Temperature IC Control Library Demo");

 // Start up the library
 sensors.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement
}


void loop(void)
{
 // call sensors.requestTemperatures() to issue a global temperature
 // request to all devices on the bus
 Serial.print("Requesting temperatures...");
 sensors.requestTemperatures(); // Send the command to get temperatures
 Serial.println("DONE");
 
 Serial.print("Temperature for Device 1 is: ");
 Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
 
}


Collega il DS al pin 2, fai l'upload dello sketch e apri il serial monitor.

ferdard


dodorega

Salve ragazzi, ho un problema: caricando lo sketch e leggendo i valori rilevati mi risulta sempre -127.0.
Premetto che ho collegato il sensore al pin 2 (Digitale) e compilando non mi da errori. Cosa posso fare?

andreino

Ciao.

Vedi se questa precedente discussione ti può aiutare: http://forum.arduino.cc/index.php?topic=213421.0


cyberhs

Per dodorega:
quel valore indica che la sonda non è collegata: verifica i collegamenti e la presenza del resistore di alimentazione.

dodorega


Per dodorega:
quel valore indica che la sonda non è collegata: verifica i collegamenti e la presenza del resistore di alimentazione.


Ciao, si, ho verificato i collegamenti e collegato il resistore di alimentazione come segue:

ovviamente rispettando il grafico preso qui:
http://www.adrirobot.it/sensori/DS18B20/sensore_ds18b20_Arduino.htm
però ho comunque un risultato di -127. (Ho collegato la sonda al pin 8 perchè il pin 2 era già usato dal mio schermo)

Ecco il codice che ho caricato:
Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

// Il terminale data del sensore è connesso
// alla porta 2 di Arduino
#define ONE_WIRE_BUS 8

// Imposta la comunicazione oneWire per comunicare
// con un dispositivo compatibile
OneWire oneWire(ONE_WIRE_BUS);

// Passaggio oneWire reference alla Dallas Temperature.
DallasTemperature sensors(&oneWire);

// RS EN D4 D5 D6 D7
LiquidCrystal lcd(12,11,5,4,3,2);

void setup(void)
{
  // Start up the library
  sensors.begin();
  // Imposta il valore di righe e colonne del display LCD
  lcd.begin(16, 2);
}

void loop(void)
{

  sensors.requestTemperatures(); // Invia il comando di lettura delle temperatura
  lcd.clear();
  lcd.setCursor(0, 0); // bottom left
  lcd.print("Temperatura di: ");
  lcd.setCursor(0, 1); // bottom left
  lcd.print (sensors.getTempCByIndex(0));
  lcd.print (" C");
}

e non mi da errori durante la compliazione.
Può essere che la sonda sia rotta/difettosa?

cyberhs

Se i collegamenti con Fritzing sono gli stessi della tua board, c'è un errore.

La massa non è collegata, poiché l'hai collegata sulla barra dei +5V!

dodorega

Chiedo scusa, errore del mio disegno.  :smiley-roll-sweat:
No, ho ricontrollato i conga menti e ho la massa collegata a massa, come dovrebbe essere.

PaoloP

Prova su un'altro pin con lo sketch di esempio della libreria.
Se il sensore non va e il collegamento è giusto presumo che il sensore sia guasto.

killrob

io ho risolto seguendo le istruzioni di questa pagina http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20

Go Up