Problema di affidabilità

Io uso un Arduino UNO per gestire un acquario e in particolare lo uso a monitorare la temperatura (Onowire), la corrente assorbita (sensore analogico) e a pilotare dei relè per accendere e spengere ventole, luci , ecc.... I dati li leggo su un display 20x4 con I2C. Ho notato però che alcune volte che manca la corrente, alla riaccensione a volte "si pianta" e non riesce ad eseguire correttamente lo strach. Avete qualche suggerimento su cosa verificare o qualche alternativa (tipo auto reset) ? Grazie Mauro

Sí ho un suggerimento: Dacci lo schema del circuito e il sketch. Ciao Uwe

ecco il codice, purtoppo non ho uno schema da postare

PWMLCD_UNO_V4.ino (10.7 KB)

Intanto potresti dire ad esempio dove si pianta, esattamente. Usi la seriale per il debug, ma il PC ha un gruppo di continuità o si spenge anch'esso se va via l'elettricità di casa?

è alimentato con un'alimentatore stabilizzato a 12 v , l'alimentazione 5V dell'LCD la prende direttamente da Arduino mentre i relè sono pilotati con un BC 317 e sono a 12v. Si pianta già nel loader e non logga nulla . Si verifica quasi sistematicamente quanto ritorna la corrente e si "risolve" facendo un reser con il tastino. L'unica cosa che mi vene in mente è che ci possa essere una relazione con il fatto che uso uno secondo alimentatore a 48v per alimentare dei led attraverso dei driver PWM e per poterli gestire i due alimentatori hanno le masse in comune. La cosa strana ivece è che questo problema ha iniziato a manifestarsi solo quando ho aggiunto l'LDC. Ho un secondo arduino (mega) con lo stesso SW ma senza LCD e il problema non lo da

Avevo problemi con la partenza di un Arduino NANO quando ho messo dei condensatori aggiuntivi da 470/1000µF sui 5V.
Come soluzione potresti prendere uno stabilizzatore da 5V e alimentare tramite quello il display.
Ciao Uwe

Cosa intendi per "loader" nel tuo programma? Il setup? Hai provato a fare un pò di debug via seriale simulando l'assenza di alimentazione, ossia scollegando e ricollegando l'alimentatore dell'Arduino, per vedere cosa succede? Potresti mettere un pò di Serial.print in vari punti del setup per capire dov'è che si pianta.

di preciso non so dove si pianta, sul display non appare nulla, i vari print nel loop non loggano nulla. Provo a mettere un po di print su setup ..... :-(

uwefed, scusa non ho capito se hai risolto il problema mettendo i condensatori o se sono stati la causa del problema

Il condensatore era la causa del problema. Lasciandolo via partiva bene. Probabilmente se la tensione si alza troppo lentamente il circuito di reset di accensione non funziona in modo affidabile percui non lo resettava. Ciao Uwe

foglia: Provo a mettere un po di print su setup ..... :-(

E' lì che dicevo

non so se ti può essere utile,ma diverse librerie per lcd tendono ad aspettare la risposta prima di inviare comandi,x evitare di intasare l'LCD di comandi..e possono piantarsi se l'arduino nn riceve risposte(es:arriva la corrente,l'arduino si accende,manda comandi allo schermo LCD che si sta accendendo,LCD nn manda indietro ack e tutto si pianta)..nn so se è il tuo caso

Non è da trascurare il picco di assorbimento dell'LCD, soprattutto della retroilluminazione; naturalmente ha ragione Uwe nel chiedere uno schema ma visto che non è disponibile, bisogna andare per tentativi. Quindi prova almeno a togliere la retroilluminazione e vedi cosa succede quando c'è un black-out

sì,può anche essere.. se vuoi un autoreset, basta che cerchi in giro watchdog.. oppure,una soluzione macchinosa:nel setup,leggi la tensione di alimentazione(collegandola ai pin analogici attraverso un partitore di tensione)..se è sotto una certa soglia,aspetti qlk secondo e poi continui(o resetti l'arduino giocando nuovamente col watchdog)

Imposta il watchdog ad 8 secondi, se effettivamente il codice entra in un loop infinito, questo risolverà il problema.

Saluti, Dario.

m_ri: non so se ti può essere utile,ma diverse librerie per lcd tendono ad aspettare la risposta prima di inviare comandi,x evitare di intasare l'LCD di comandi..e possono piantarsi se l'arduino nn riceve risposte(es:arriva la corrente,l'arduino si accende,manda comandi allo schermo LCD che si sta accendendo,LCD nn manda indietro ack e tutto si pianta)..nn so se è il tuo caso

mmmm.... dopo infinite prove :-( credo che il problema sia questo, sono arrivato questa conclusione perchè l'esecuzione si pianta al primo comando LCD che do . Non mi rimane che provare con altre librerie, ne avete per caso una da suggerirmi ? grazie

Grazie ragazzi dell'idea del watchdog ;-) lo metto comunque , mi piace!

Leggi prima un poco in giro, non tutti i bootloader lo supportano correttamente. Se dovesse capitarti di non riuscire più a caricare gli sketch, togli alimentazione alla scheda e preparati a caricare, una volta riattaccata fai subito un download di uno sketch senza bootloader.

Se imposti il watchdog ad 8 secondi, hai tempo a sufficienza senza dover riprogrammare in ICSP.

Saluti,
Dario.

puoi postare qua la libreria?

se pensi che sia colpa della libreria che aspetta una risposta dal LCD, prova a sostituire ogni ricezione dei dati con delay(20) o delayMicroseconds(10000)

veseo: Leggi prima un poco in giro, non tutti i bootloader lo supportano correttamente.

Quello della UNO sì, quello della MEGA no.