Ardu-Aquarium Controller v. 3.3.1

PaoloP:
Usa il "CaneDaGuardia". :wink:

--> http://www.logicaprogrammabile.it/arduino-resettare-automaticamente-la-scheda-utilizzando-il-watchdog-timer/

Grazie Paolo,
ho letto, mi piace e sicuramente se ne terrà conto.

Etemenanki:
...
Il sistema a ridondanza comporta semplicemente l'usare sensori doppi, ed eseguire la lettura sui vari cicli integrando i valori e discriminando quelli "illogici" ... ad esempio, se hai 2 sonde di temperatura in 2 punti diversi, ogni volta che le leggi, confronti le 2 letture ... se lo carto e' entro una tolleranza programmata (mettiamo 1 grado, per fare un'esempio", fai la media dei valori e la usi come lettura, se lo scarto inizia ad essere maggiore della tolleranza (ad esempio, una delle sonde va in corto e ti restituisce 0 gradi, o simile), oltre ad accendere un'allarme, escludi la lettura della sonda che risulta illogica.

Il sistema migliore sarebbe avere almeno 3 sonde, in questo modo avresti la (quasi) certezza di individuare con precisione quella guasta ... esempio, con 2 sonde, se una ti da 27 ed una 31, non c'e' modo sicuro per discriminare quale delle due e' imprecisa, specie se entrambe continuano a dare dati coerenti (entrambe salgono o scendono insieme ... se invece una si bloccasse e l'altra continuasse a variare, sarebbe possibile discriminare quella bloccata, che non cambia piu nel lungo periodo) ... con 3 sonde, il problema non si pone cosi difficile, se una da 27, l'altra 28, e la terza 34, e' chiaramente quella che si scosta di piu da escludere dal ciclo delle medie di lettura :wink: ... oltretutto non costano cosi care, e sarebbe fattibile abbastanza facilmente, per impermeabilizzarli basta un po di resina per barche bicomponente :wink:
A livello personale escluderei qualsiasi bus tipo "onewire", e concettualmente anche l'I2C, mettendo forse piu cavi, ma non rischiando blocchi generali dovuti alla frittura di un singolo sensore o interfaccia ... personalmente per trasferire dati analogici preferirei i current-loop, anche se poi ci si deve creare una scheda di conversione da corrente a tensione per poterli leggere, perche' quello standard e' stato realizzato per uso industriale ed e' abbastanza affidabile, anche se richiede almeno un doppino per ogni sensore (ma ripeto, e' una preferenza personale)

Già ora usiamo due sonde, di cui mediamo le letture e le confrontiamo affinche si rimanga all'interno di un certo range di temperatura (+/- 1,5°attualmente) con allarme sia visivo che sonoro, quello che non viene fatto perché non ci avevo proprio pensato è verificare quale sonda va in palla ed escluderla... un to do sicuramente.

lesto:
mi piace l'idea dei 3 sensori

A livello personale escluderei qualsiasi bus tipo "onewire", e concettualmente anche l'I2C, mettendo forse piu cavi, ma non rischiando blocchi generali dovuti alla frittura di un singolo sensore o interfaccia

questo avviene perchè sono state sviluppate male le libreire (bloccanti e senza gestione degli errori), non a caso tempo fa modificai la Wire per essere non bloccante, e quindi supportare errori sulla linea/hotplug unplug di sensori, ovviamente se previsti lato software, altrimenti sono ignorati

anche l'idea della current-loop, che ammetto di non conoscere (non capisco perchè tu parli di segnali analogici, ho cercato qualcosa ma si parla di segnali digitali, in particaolre seriali), mi pace, se dimostra di essere a prova di disturbi anche su un metro di cavo volante.
il grosso vantaggio dell'analogico è che ogni sensore sarebbe su un pin separato, e quindi se si rompe inserendo una corrente "pazza" non serve escluderlo (se invece un sensore inizia a mandare segnali a caso sul bus i2c o one-wire, bisogna disaccoppiare i sensori riattivandli uno a uno fino ad individuare la causa..)
mettere più atmega in parallelo è semplice in tutti i casi (digitali o analogici), forse nei digitali una seriale è meglio perchè è più facile "sniffare" i dati in entrambe le direzioni ache se l'arduino non è il master del bus, e quindi verificare che l'output dell'atmega in master sia corretto e allineato con quello calcolato anche dagli arduiono dormienti... :grin:

Etemenanki:
Piu che alle librerie, mi riferisco a guasti fisici ai sensori ... ad esempio, in un bus in cui tutti i segnali sono in parallelo, se una delle uscite va a massa, crea problemi a tutto quello che c'e' connesso in parallelo a quell'uscita ...
Il current loop si puo usare per trasferire valori analogici (un'uscita che varia proporzionalmente da 4mA, equivalente a zero volt di uscita, a 20mA, equivalente a fondo scala), sia digitali (modulando l'uscita come una linea seriale a due fili, solo che e' in corrente invece che in tensione) sia addirittura entrambi insieme (il protocollo HART usa la sovrapposizione di due toni FSK sulla corrente del dato analogico per trasmettere contemporaneamente un valore analogico ed uno stream digitale sullo stesso doppino) ... la robustezza della trasmissione e' garantita dal fatto che il sistema e' un'anello chiuso in cui scorrono sempre da 4 a 20 mA, indipendentemente dalla lunghezza del cavo, o dai contatti osidati (fino ad un certo punto, ovviamente :P) ... potresti avere un doppino da un metro o da 100 metri, se l'interfaccia e' fatta come si deve, sempre da 4 a 20 mA ci passano :wink: ... poi ci sono anche sistemi multipunto in cui ogni sensore ha un codice e comunica in digitale, ma non ne conosco lo standard ... ed il vantaggio e' che se ad esempio un'uscita va in corto, il sistema si autoregola per riportare i corretti valori di corrente ed al massimo e' quel sensore che non ti va piu (ed a quel punto arduino potrebbe segnalare un'allarme del tipo "sensore "X" non funzionante), ma il resto continua a funzionare.
Ovvio che se il filo si stacca e l'anello si apre non funziona piu nulla, ma quello lo fa con qualsiasi altra configurazione :stuck_out_tongue: ... a meno di non usare degli splitter, ma costano uno sproposito :fearful:

Mi piace leggervi e di fatto poi passo le giornate a googlare cercando, con scarso successo devo ammettere :blush:, di capirvi, il fatto è che così si stravolge la filosofia di tutto il progetto che poi rispecchia anche la mia attuale conoscenza di questo mondo...
Vorrei che tutto rimanesse molto easy, continuo a pensare che la vera sfida sia riuscire con Arduino UNO a fare tanto con poco e nel modo più semplice possibile...
Più avanti col tempo ci sarà sicuramente spazio per creare "Ardu-Acquarium Controller ++" ovvero più sofisticati con interfacce più avanzate e periferiche più performanti, ho in testa anche io così tante idee che non stò neanche a scrivere, ma così ho paura che non si arrivi o non si riesca a concludere.
Ho bisogno di aiuto, ma voi andate troppo avanti e troppo veloci "gna posso fa'..." oltre tutto, non so nemmeno se con arduino si possono fare tutte le cose che scrivete senza mandarlo in palla, è pur sempre un atmega328 bho... scrivo di cose che non conosco bene scusatemi :smiley:

Testato:
ho visto farlo sia via shift register che con ulteriore micro dedicato. considera che pur sempre un altro chip devi usare, anche con i2c useresti un chip intermedio tra il bus ed il display. E' anche vero pero' che esistono display COG che sono direttamente I2C (vedi mia firma), non ne ho visti invece direttamente OneWire per ora.
Ma ripeto, se la tua idea e' usare un display standard a cui aggiungere un chip allora i componenti da usare restano numericamente uguali. Io pero' non l'ho mai fatto, sarebbe interessante approfondire, se decidete di andare verso questa strada fo qualche prova anche io
http://mbed.org/cookbook/1-wire-shifting-2x16-LCD

Te lo chiedevo, perché si sta discutendo se fare tutto I2C o tutto One-Wire, è chiaro che serve un'altro chip in ogni caso, ma non sapevo se fosse una strada già percorsa da qualcuno, però grazie del tuo interessamento.

Ciao e grazie a tutti.

Riccardo