Display 1602A con Arduino UNO e due sonde DS18B20

Buongiorno a tutti,
sono un elettricista di professione ed ho utilizzato per la mia abitazione un arduino uno con 2 sonde DS18B20 per monitorare la temperatura in tempo reale del mio impianto solare termico.
Inizialmente avevo utilizzato il Modulo Expander I2C per Display LCD ma provandolo a banco era regolare, provandolo in campo non funziona perchè la tratta tra Arduino e il Display è circa 15 Mt.
Ho utilizzato cavi schermati con isolamento a 400V (i classici degli impianti antintrusione composti dai seguenti fili 2x0,50 + 4x0,22).

Visto che il modulo I2C non può funzionare a tale distanza ho optato per il collegamento di tutti i pin richiesti dal Display.
Diciamo che inizialmente tutto ha funzionato, riuscivo a vedere la temperatura delle sonde.

Poi tutto insieme è apparso sul display nella prima riga una fila di quadrati neri.
Per risolvere il problema devo salire in soffitta e premere il tasto Reset di Arduino.
Dopo la pressione ritorna tutto regolare per un tempo che non sò (non posso stare H24 davanti al display per vedere quanto tempo passa).
Il contrasto è stato regolato bene con il potenziometro perchè se lo porto a fondo scala diventa tutto nero, mentre se lo metto a 0 non vedo nulla.

Per alimentare il tutto ho utilizzato il cavo USB con alimentatore (tipo quello di iPhone) 5V.

Dove può essere il problema che ogni tanto vedo tutto nero??

Grazie

Posto il programma:

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

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

// linea dati DS18B20 al pin 2 di Arduino
#define ONE_WIRE_BUS 2

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

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


void setup()

{
 // Start up the library
 sensors.begin();

 // Imposta il valore di righe e colonne del display LCD 
 lcd.begin(16, 2);
 lcd.clear();
   
}

void loop(void)
{ 

sensors.requestTemperatures();   // Invia il comando di lettura delle temperatura
 
 lcd.setCursor(0, 0); 
 lcd.print("Bollitore 200 LT");
 lcd.setCursor(2, 1); 
 lcd.print (sensors.getTempCByIndex(0));
 lcd.print (" Gradi"); 
 delay(5000);
 lcd.clear();

 lcd.setCursor(0, 0); 
 lcd.print("Mandata Sole");
 lcd.setCursor(2, 1); 
 lcd.print (sensors.getTempCByIndex(1));
 lcd.print (" Gradi"); 
 delay(5000);
 lcd.clear();
 
}

Buongiorno,
prima di tutto, essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO

… poi, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (in basso a destra del post, bottone More → Modify) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

Se non ho capito male, in questo momento stai usando un LCD distante da Arduino 15m con il collegamento a 6 pin + 2 di alimentazione (totale 8 fili).

In precedenza hai provato ad usare un expander I2C per ridurre i fili, ma ovviamente la cosa non poteva funzionare per la distanza eccessiva.

Forse non sapevi che esistono degli extender I2C che, usati in coppia, consentono un collegamento sino a 20m con cavo cat6 (2 doppini intrecciati).

Oppure potevi usare degli LCD con ingresso seriale TTL (velocità più bassa, ma trasmissione più affidabile).

Nel collegamento I2C, infatti, è la capacità parassita dei cavi che limita la distanza ed i cavi schermati normali non sono il massimo.

C'è una cosa che non capisco: il cavo che hai usato è da 6 fili + schermo, ma l'alimentazione a 5V come l'hai portata all'LCD?

Secondo me ti conviene usare due arduini nano che trovi a bassissimo costo (3-5 euro) e dei trasmettitori rf. Uno lo usi per l'acquisizione dei segnali e l'altro per la visualizzazione sul display... alternativa puoi usare degli esp8266 nella stessa configurazione...

cyberhs:
Se non ho capito male, in questo momento stai usando un LCD distante da Arduino 15m con il collegamento a 6 pin + 2 di alimentazione (totale 8 fili).

Ciao,
mi sono spiegato male.
Ho utilizzato 2 cavi composti da 2x0,50+4x0,22.
Ieri ho fatto una prova, come scritto nel post avevo alimentato Arduino con un alimentatore 5V uguale a quello degli iPhone.
Ho notato che la corrente erogata da tale alimentatore era di 1A, l’ho sostituito con un altro tipo da 5V / 50mA e da ieri pomeriggio non ha ancora creato il problema.

Se ti riferisci all'alimentatore collegato al solo LCD, 50mA sono veramente pochi.

cyberhs: Se ti riferisci all'alimentatore collegato al solo LCD, 50mA sono veramente pochi.

Mi riferisco a tutto, Arduino + le 2 sonde + display.

Mi meraviglio che funzioni: la sola retroilluminazione dovrebbe assorbire almeno 100mA.

ciao

Secondo me il primo è un caricabatterie quindi non va bene; il secondo è un alimentatore da 5 Volts e per i milliampere forse semplicemente manca uno zero.

ciao pippo72

pippo72: ciao

Secondo me il primo è un caricabatterie quindi non va bene; il secondo è un alimentatore da 5 Volts e per i milliampere forse semplicemente manca uno zero.

ciao pippo72

Non saprei sinceramente, so solo che il primo era un caricabatteria per la sigaretta elettronica con 1A di corrente. Ma anche il secondo lo è, con la sola differenza che funziona pur leggendo 5V - 50mA.

La retroilluminazione si accende quando premo il pulsante, quindi per 1 o 2 secondi non di più.

Vuoi dire che l'assorbimento totale, senza retroilluminazione, sono 50mA?

Questo è possibile, ma l'alimentatore probabilmente può erogare 10 volte tanto.