Go Down

Topic: ds18b20 non riconosciuti (Read 4106 times) previous topic - next topic

zinco_mp

Ecco lo schema che ho rispettato. Naturalmente nella realtà, i sensori sono ds18b20 e non lm35 come nella foto, e inoltre, preciso che ogni sonda non è più lunga di un metro ciascuna. Ho realizzato i vari ponticelli in verde proprio per testare il fatto che se aggiungo progressivamente i sensori nel corso del programma avviato, tutto va bene. Ma se sono già tutti collegati, sembra che non parta proprio nulla...nè il setup, nè il loop...nulla.

marinaio67

Perchè hai aperto un altro topic? Non potevi continuare qui? http://forum.arduino.cc/index.php?topic=294055.0

leo72

Quote
Perchè hai aperto un altro topic?
Infatti...
Riunisco le due discussioni.

cyberhs

I collegamenti sono corretti, ma, a parte falsi contatti della breadboard, forse il problema potrebbe essere il valore del resistore di pull up: prova a ridurlo portandolo a 3.2k.

zinco_mp

È vero, scusate per l'altro topic, ma pensavo riguardasse la parte software e non più hardware. Comunque oggi provo a ridurre la resistenza di pull up e vi faccio sapere. Grazie per i suggerimenti.

zinco_mp

 :'(  :'(  :'(  :'(
Ciao a tutti,
oggi finalmente sono riuscito a provare di nuovo lo sketch con una resistenza da 330 ohm.
Risultato???
Tutto come prima. Addirittura sono arrivato anche a sostituire il mio mega con un altro per escludere qualche malfunzionamento della scheda ma nient di fatto. Il risultato è sempre lo lo stesso.
Se collego una sonda alla volta tutto va bene.
Se le lascio collegate tutte insieme, non solo non mi parte neanche lo sketch(credo), infatti non vedo nulla sul seriale, ma se scollego e ricollego le sonde, i valori letti sono tutti sballati.
Ho provato ad inserire anche dei delay da 1 sec tra una lettura e l'altra, ma niente....
Avete, vi prego, qualche dritta per capire dove sbaglio, perchè leggo su vari forum che altri collegano un'infinità di sensori come se niente fosse ed io solo con 6 sensori sto avendo tutto sto casino!!!!
Attendo suggerimenti
Grazie

cyberhs

300 ohm mi sembrano pochi: io ti ho indicato 3200 ohm!

zinco_mp

Ciao a tutti, come suggerito da cyberhs, ho cambiato la resistenza(3k2).
Il comportamento cmq è sempre lo stesso. Per di più ho notato che quando scollego e ricollego il pin di lettura, facendo così partire il serial monitor, vengono visualizzate correttamente le letture, ma poi, anche scaldando o raffreddando i sensori, la lettura procede sempre invariata. Proprio non capisco!!!
Avete altri suggerimenti?

zinco_mp

Scusate l'ignoranza, ma su che base devo abbassare la resistenza di pull-up?
Lo chiedo perché ho anche provato a dimezzare i 4k7 e i 3k2 senza risultato.
Praticamente sto procedendo a tentativi, ma vorrei capire la logica per calcolare quale valore usare.
Spero di avere riscontri.
Grazie a tutti

marinaio67

Vedo che sullo schema hai collegato le sonde al pin 41 mentre nello sketch leggi il 44, ma penso sia un errore di scrittura... Invece prova, se non l'hai già fatto, a cambiare proprio il pin digitale e anche i pin dove prelevi il Vcc e il GND (avesse qualche difetto l'arduino). La pull-up 4K7 va bene, ma quando cominci ad aumentare il numero delle sonde, se gli dai un pò più di corrente al circuito di pull-up, male non gli fa... Per questo Massimo ti ha suggerito di mettere una 3K2 al posto di una 4K7. Puoi spingerti fino a 1K1 ma non serve scendere di più.

zinco_mp

Grazie per la risposta marinaio67. Effettivamente c'è stato solo un errore di battitura; i collegamenti sono corretti.
Ho provato a cambiare pin, a cambiare breadbord, a cambiare cavi, a rifare connessioni saldate...tutto!!! Ma il risultato, non so com'è, è sempre lo stesso.
Domani farò un ultimo tentativo montando tutto nel quadro che ho realizzato con un'alimentazione supplementare e se non dovesse funzionare opterò per l'unica cosa che finora sembra stabile: farò passare il cavo del pin di lettura dal contatto NC di un relè che attiverò per un secondo nel setup; in quel momento è come se scollegassi per un attimo il pin, e le letture, così come anche il loop dovrebbero partire.
E' solo un tamponare a questo inconveniente che per il momento proprio non mi so spiegare.
Se avete altri suggerimenti sono sicuramente ben accetti!!!

zinco_mp

Ho notato, cmq, inserendo vari Serial print nello sketch, che il blocco del codice avviene subito dopo la riga sensor.begin(); nel setup.
Non capisco il motivo però è lì che tutto s'inceppa...

leo72

Pubblica lo sketch attuale, quello che dici si pianta al Serial.begin.

zinco_mp

s'inceppa non al Serial.begin, ma al sensors.begin
Code: [Select]

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 11
float t1;
float t2;
float t3;
float t4;
float t5;
float t6;

// 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);

// arrays to hold device addresses
DeviceAddress sonda1={
  0x28,0x00,0x5f,0x58,0x05,0x00,0x00,0x15};
DeviceAddress sonda2={
  0x28,0x9a,0xdc,0x54,0x05,0x00,0x00,0xfc};
DeviceAddress sonda3={
  0x28,0x5a,0x00,0x68,0x05,0x00,0x00,0x46};
DeviceAddress sonda4={
  0x28,0x3f,0x62,0x54,0x05,0x00,0x00,0xa6};
DeviceAddress sonda5={
  0x28,0x8b,0x64,0xcf,0x05,0x00,0x00,0x94};
DeviceAddress sonda6={
  0x28,0xef,0xb1,0xe5,0x05,0x00,0x00,0x6c};

void setup(void){
  Serial.print("1");
  Serial.begin(9600);
  Serial.print("2");
  sensors.begin();
  Serial.print("3");
  sensors.setResolution(sonda1, TEMPERATURE_PRECISION);
  sensors.setResolution(sonda2, TEMPERATURE_PRECISION);
  sensors.setResolution(sonda3, TEMPERATURE_PRECISION);
  sensors.setResolution(sonda4, TEMPERATURE_PRECISION);
  sensors.setResolution(sonda5, TEMPERATURE_PRECISION);
  sensors.setResolution(sonda6, TEMPERATURE_PRECISION);
}

void loop(void){
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures();
  Serial.println("DONE");
  t1 = sensors.getTempC(sonda1);
  Serial.print("Temp C: ");
  Serial.print(t1);
 t2 = sensors.getTempC(sonda2);
  Serial.print("Temp C: ");
  Serial.print(t2);
  t3 = sensors.getTempC(sonda3);
  Serial.print("Temp C: ");
  Serial.println(t3);
  t4 = sensors.getTempC(sonda4);
  Serial.print("Temp C: ");
  Serial.print(t4);
  t5 = sensors.getTempC(sonda5);
  Serial.print("Temp C: ");
  Serial.print(t5);
  t6 = sensors.getTempC(sonda6);
  Serial.print("Temp C: ");
  Serial.println(t6);
  delay(3000);
}

zinco_mp

Praticamente sul monitor mi stampa solo 1 e 2 e lì finisce tutto fino a quando non scollego per un attimo o il pin di lettura o il positivo o il negativo

Go Up