Ardu-Aquarium Controller v. 3.3.1

Le mie solite Riccardate :blush:

Corretto in tutti i post...
Grazieeee!!!

Riccardo

avrei due richieste/proposte: perchè il file non lo suddividete in modo tale che, chi non fosse interessato possa "tagliare" solo quello gli interessa? ad es. a me non interessa il ph o altro, ma interessano solo le luci (è un esempio!) dovrei spulciare tutto il codice ed eliminare ciò che non serve; sarebbe utile, a mio avviso, dare la possibilità di "modulare" il codice facilmente.

Seconda, molto simile alla prima, per lo schema elettrico sarebbe possibile modulare anche qui? Magari chi non ne capisce molto (come il sottoscritto) capire come collegare i sensori di temperatura può divenire un'impresa!!

con ifdef o (meglio imho, vistoche non ci sono richieste di "velocità") con classi e sottoclassi verrebbe molto bene.

lesto:
l'i2c mi pare arrivi a circa 10cm senza problemi, poi in realtà devi misurare l'effetto condensatore del cavo.

per il numero di periferiche, sono 127 massime via i2c.. un finto problema direi. Anche i seganli int possono essere messi tutti in parallelo su un pin arduino, che rilevato un int legge tutti i sensori.

in oltre è facile da trovare un programma i2c (non bloccante) detto "scanner i2c"; esso controlla tutti gli indirizzi i2c in cerca di risposta. quando la trova potete leggere il registro 0x00 che noterete essere sempre un codice che identifica univocamente un sensore: in base a ciò potete dinamicamente aggiungere e rimuovere sensori sul bus

ma non arrivava a 10 m e oltre?
http://forum.arduino.cc/index.php?topic=120403.0

o forse non ho capito?

con i cavi e resistenze giuste un metro.. oltre puoi usare degli expander. come dicevo:

in realtà devi misurare l'effetto condensatore del cavo.

potreste evitare di essere troppo telegrafici? magari tra voi "elettronici" vi capite... ma chi non è del settore... non capisce una mazza!

il sensore di temperatura l'ho trovato e il cavo è lungo 1 m (appena sufficiente come lunghezza, secondo me) funzionerà sulla i2c o no?

ce ne facciamo pochino se è troppo complesso avere un cavo più lungo di 1 m

con gli expander dicono di arrvare a 10m, quindi ci siamo.

zioTonino:
avrei due richieste/proposte: perchè il file non lo suddividete in modo tale che, chi non fosse interessato possa "tagliare" solo quello gli interessa? ad es. a me non interessa il ph o altro, ma interessano solo le luci (è un esempio!) dovrei spulciare tutto il codice ed eliminare ciò che non serve; sarebbe utile, a mio avviso, dare la possibilità di "modulare" il codice facilmente.
Seconda, molto simile alla prima, per lo schema elettrico sarebbe possibile modulare anche qui? Magari chi non ne capisce molto (come il sottoscritto) capire come collegare i sensori di temperatura può divenire un'impresa!!

lesto:
con ifdef o (meglio imho, vistoche non ci sono richieste di "velocità") con classi e sottoclassi verrebbe molto bene.

Questa cosa di dividere su più file lo sketch, è gia stata chiesta, ma io sinceramente non lo so fare, la risposta che poi ha dato lesto per me è vero e proprio arabo, sinceramente, ancora non mi capacito di essere arivato al punto attuale, piano piano e progredendo, sicuramente saranno strade che percorreremo, ma non nell'immediato purtroppo ancora no...
Tempo fa però Leouz, propose al gruppo una versione light del controller con la sola gestione luci, questo fose al momento attuale è un obbiettivo tempo permettendo più alla mia portata.
Vedrò di fare qualcosa anche per lo schema...

zioTonino:
potreste evitare di essere troppo telegrafici? magari tra voi "elettronici" vi capite... ma chi non è del settore... non capisce una mazza!
il sensore di temperatura l'ho trovato e il cavo è lungo 1 m (appena sufficiente come lunghezza, secondo me) funzionerà sulla i2c o no?
ce ne facciamo pochino se è troppo complesso avere un cavo più lungo di 1 m

Se il sensore che hai trovato è quello dell’attuale progetto, allora è di tipo OneWire, e per quello nessun problema di lunghezza…
Ad ogni modo, seguendo i suggerimenti di lesto, ho ordinato il sensore LM77 LM77 data sheet, product information and support | TI.com e I2C non lo conosco e non ho trovato molto sul suo uso con arduino, ma da quel poco che ho potuto capire dal datasheet, potrebbe essere interessante per il nostro progetto… spero di riuscire ad usarlo… :cold_sweat:

Sul fatto di essere invece telegrafici, non mi pare, ricordati che c'è sempre san google, guarda cosa è riuscito a fare un inetto come me grazie ad un pò di ricerca :slight_smile:

ok, se vogliamo rivedere il codice partiamo dalla sua architettura.
Propongo di fare tutto i2c, ma grazie al sistema modulare non sarà un problema sostituire dei sensori con altri fintantochè si sappia programmare uno schetch per quel sensore.
Puoi fare un elenco dei sensori che possiedi, cosa intendi misurarci, tipo di interfaccia e costo.
Aggiungi a parte altre misurazioni che vorresti fare (non è importante scegliere un sensore a priori), io sono disposto a fare un oridine di alcuni (se non tutti) i sensori per poterti seguire con il codice e i test

fai conto che io ho una UNO e due Micro, non ho intenzione di prendere una MEGA(magari prendo un 644 o quel che l'è), quindi mi oppurerò di essere il più possibile "retrocompatibile"

Quindi ci serve: un elenco di sensori per metterci tutti d'accordo, un elenco di TUTTE le misure da fare (anche quelle in fututo aiuta assai).
Per l'elenco io sceglierei di nonandare tanto sull'economico, ma piuttosto cercare di prenderli tutti da un unico rivenditore.

non capisco, forse semplicemente perche' non ho letto tutto il topic, perche' si vuole abbandonare il bus OneWire ?
se e' per questioni di spazio lo si puo' pilotare senza la libreria e gestirlo via codice, in cambio si riceve:
lunghezza dei cavi a piacere
economicita' dei sensori
esistenza a 4 soldi di sensori gia' impermeabili da immergere
possibilita' di usarli su un bus a due cavi (il onewire e' predisposto sia per 3 cavi che per 2, con autoalimentazione derivata dal segnale stesso)

questo coso i2c invece che avete proposto ha bisogno minimo di 4 cavi

complessita hardware pèer risparmiare complessità software..

e il fatto di riscrivere lalibreria nel codice non credere che faccia risparmiare molto

Ed eliminando i2c andando totalmente su onewire ?
Esistono tante periferiche onewire

ottima soluzione anche quella, perdiamo "l'accelerazione hardware" (e quindi è anche più pesante il codice essendo tutto implementato in software), ma ne guadagnamo in affidabilità (credo, non so se le librerie one-wire supportano l'hot-plug o si impallano come la Wire di arduino)

@Lesto.
Non credo che chi abbia un acquario attacchi e stacchi le periferiche in continuazione.
Basta farle riconoscere all'accensione, non serve l'innesto a caldo.

e invece serve perchè in caso di problemi tipo un sensore che si frigge, un disturbo, una botta al conntettore etc... il resto dei sensori continua a funzionare. (e magari viene mostrato un allarme)
In oltre permette l'upgrade senza dover riavviare l'apparato

Ricordatevi che è una cosa che deve stare accesa 24h su 24h, quindi cresce la possibilità di fail sui BUS esterni.. e nel caso Wire un errore del genere impalla tutto l'arduino.

lesto:
...
Ricordatevi che è una cosa che deve stare accesa 24h su 24h, quindi cresce la possibilità di fail sui BUS esterni.. e nel caso Wire un errore del genere impalla tutto l'arduino.

Il che potrebbe portare ad un risultato secondario anche piu indesiderato di un blocco hardware ... mi riferisco al costo di un'eventuale "fritto misto" nel caso si impallasse il sistema di riscaldamento ... specie se usato per un'acquario marino :fearful: (non so se tutti quanti hanno un'idea di cosa costano, gli "ospiti marini" di quella scatoletta di vetro :stuck_out_tongue: XD XD XD)

Se mai dovessi fare un'acquario marino, mi verrebbe voglia di usare doppi sensori con cicli di controllo incrociato ... :stuck_out_tongue: :smiley:

No problem per eventuali malfunzionamenti...
--> Sushi!! :grin:

PaoloP:
No problem per eventuali malfunzionamenti...
--> Sushi!! :grin:

Ti passo subito il menu ...

Antipasto, cubetti di Zebrasoma Rostratum in gelatina : sui 700 Euro
Primo, zuppa di Chaetodontoplus Conspicillatum : sui 1500 Euro
Secondo, filetti di Centropyge Boiley : sui 5000 Euro l'uno
... e come dessert, una coppia di Genicantus alla panna, intorno ai 30.000 Euro ...

non male come sushi ... ce l'hai il mutuo ? :stuck_out_tongue: :fearful: ]:smiley:

lesto:
ok, se vogliamo rivedere il codice partiamo dalla sua architettura.
Propongo di fare tutto i2c, ma grazie al sistema modulare non sarà un problema sostituire dei sensori con altri fintantochè si sappia programmare uno schetch per quel sensore.
Puoi fare un elenco dei sensori che possiedi, cosa intendi misurarci, tipo di interfaccia e costo.
Aggiungi a parte altre misurazioni che vorresti fare (non è importante scegliere un sensore a priori), io sono disposto a fare un oridine di alcuni (se non tutti) i sensori per poterti seguire con il codice e i test
fai conto che io ho una UNO e due Micro, non ho intenzione di prendere una MEGA(magari prendo un 644 o quel che l'è), quindi mi oppurerò di essere il più possibile "retrocompatibile"
Quindi ci serve: un elenco di sensori per metterci tutti d'accordo, un elenco di TUTTE le misure da fare (anche quelle in fututo aiuta assai).
Per l'elenco io sceglierei di nonandare tanto sull'economico, ma piuttosto cercare di prenderli tutti da un unico rivenditore.

Lesto,
grazie davvero per la tua offerta, la apprezzo veramente tanto e quindi ti rispondo che attualmente gli unici sensori che possiedo sono gli one-wire ds18b20 per la temperatutura e l'E-tape per il livello dell'acqua che gia conosci e per il quale su tua indicazione ho fatto già uno scatafascio di letture, ma che poi ho momentaneamente abbandonato perché stavamo rivedendo tutto il codice.
Non ho ancora preso nulla per ph e conducibilità su questo quindi si può discutere.
Eliminare la ONE-WIRE e la Dallas-temperature, sarebbe un bel risparmio di ram e flash, dopo averti letto, ho trovato ed ordinato LM77 per la temperatura e lmp91200 LMP91200 data sheet, product information and support | TI.com per il PH...
Vado un pò più nello specifico e ti dico le lie considerazioni:

Temperatura: come già detto ho i DS18B20 comodissimi, si trovano gia impermeabilizzati non vanno tarati, li leggi facilmente grazie alla bella libreria <DallasTemperature.h>, ma per usarla va implementata anche la <OneWire.h> e si ciucciano insieme una fraccata di flash, con LM77 LM77 data sheet, product information and support | TI.com passeremmo se riuscissimo ad usarlo al solo uso dell'I2c, ma vanno impermeabilizzati, hanno bisogno di almeno 4 fili o 5 se li usiamo anche come comparatori (cosa che mi piacerebbe fare) ed intendessimo usare anche l'INT del chip, rendono obbligatorio l'uso del bus extender...
Si tratta quindi di passare da una cosa sicuramente funzionate ed easy come vorrebbe essere tutto questo progetto pensato non solo per un acquario di base, ma anche per i princianti come me, ad una cosa sicuramente più sofisticata e performante a livello di codice, ma decisamente molto meno accessibile ai principianti...

I sensori di livello li leggiamo comodamente in analogread(), sono questi: http://www.milonetech.com/uploads/eTape_Datasheet_12110215TC-8_040213.pdf, grazie al buon/paziente Menniti, è stato messo a punto un circuitino che con una semplice taratura permette di leggere anche quelli che non rientrano nelle specifiche del datasheet, permettono la lettura in continuo del livello e li trovo al momento i migliori perchè possono essere usati, non solo per i cambi dell'acqua, ma anche per il ripristino in continuo del livello dell'acqua e grazie al circuitino di cui sopra, sono di una precisione senza pari al momento...

li ho letti molto semplicemente con questo codice:

byte levelsensor = A0; 
void setup() {
   Serial.begin(9600);
   analogReference(INTERNAL);
}
void loop() {
  Serial.println(analogRead(levelsensor));
  delay(50);
}

I dati rilevati sono quì: Prove sensori di livello - Google Sheets nel foglio 2, ma non li ho più toccati sia per i motivi che ho già detto sià perché non ho capito bene come vadano usati/interpretati... ti va di riprendere il discorso?

Per il PH il chip che ha trovato Leouz, mi sembra molto figo, ma si legge in seriale, tutto un'altro protocollo, mentre avendo in mano una sonda, credo sia possibile leggerla anch'essa in analogread() usando anche quì un bell'amplificatorino di segnale, aggiungo, ma qui serve un vero esperto, dovendo queste sonde essere tarate con l'uso di vari liquidi, mi chiedo se sia possibile farlo automaticamente via software immergendo la sonda nel liquido ed agendo su un potenziometro digiltale :sweat_smile:, oltre tutto dovremmo usare sonde per letture in contiuno, ovvero sempre immerse.

Per la conducibilità anche quì mi domando se non sia possibile ragionare come per il PH.

Quindi ricapitolando, al momento per il controller base, gli obiettivi sono:

  • Controllo completo della plafoniera (direi che siamo al 90%)
  • Controllo della temperatura fatto(stiamo per stravolgere tutto :astonished:)
  • Lettura del PH con eventuale controllo di un'elettrovalvole per il dosagio della CO2
  • Lettura della Conducibilità

Testato:
Ed eliminando i2c andando totalmente su onewire ?
Esistono tante periferiche onewire

Ciao Testato
Con OneWire si può pilotare anche il display?

lesto:
ottima soluzione anche quella, perdiamo "l'accelerazione hardware" (e quindi è anche più pesante il codice essendo tutto implementato in software), ma ne guadagnamo in affidabilità (credo, non so se le librerie one-wire supportano l'hot-plug o si impallano come la Wire di arduino)

PaoloP:
@Lesto.
Non credo che chi abbia un acquario attacchi e stacchi le periferiche in continuazione.
Basta farle riconoscere all'accensione, non serve l'innesto a caldo.

lesto:
e invece serve perchè in caso di problemi tipo un sensore che si frigge, un disturbo, una botta al conntettore etc... il resto dei sensori continua a funzionare. (e magari viene mostrato un allarme)
In oltre permette l'upgrade senza dover riavviare l'apparato
Ricordatevi che è una cosa che deve stare accesa 24h su 24h, quindi cresce la possibilità di fail sui BUS esterni.. e nel caso Wire un errore del genere impalla tutto l'arduino.

Per ciò che riguarda l'hotplug, che controindicazioni ci sono ad un eventuale reset della scheda?
Già il sofware delle luci è fatto per ovviare aquesta eventualità.
In caso di Upgrade, se è hardware, è chiaro che va caricato anche l'eventuale sofware che lo gestisce, quindi in qualche modo la scheda va riavviata, idem con l'hot plug, cosa c'è di contropoducente in un reset della scheda?
Ma nel caso di arduino che si impalla, non esiste un modo per autoresettarlo?
Perdonatemi se faccio domande a vacca, ma sapete già che le mie sono domande dettata da scarsa preparazione, però vi prego, aiutatemi a capire.

Etemenanki:

PaoloP:
No problem per eventuali malfunzionamenti...
--> Sushi!! :grin:

Ti passo subito il menu ...
Antipasto, cubetti di Zebrasoma Rostratum in gelatina : sui 700 Euro
Primo, zuppa di Chaetodontoplus Conspicillatum : sui 1500 Euro
Secondo, filetti di Centropyge Boiley : sui 5000 Euro l'uno
... e come dessert, una coppia di Genicantus alla panna, intorno ai 30.000 Euro ...
non male come sushi ... ce l'hai il mutuo ? :stuck_out_tongue: :fearful: ]:smiley:

Capperi Etemenanki, conosci la materia a quanto pare :astonished:, ma è chiaro che volutamente un controller base per un acquario easy, esclude per forza di cose un acquario marino con quel tipo di fauna... Cio non toglie che la vita dei poveri pesciolini qualunque sia il loro valore mi sta a cuore, solo non riesco a capire con

Etemenanki:
Se mai dovessi fare un'acquario marino, mi verrebbe voglia di usare doppi sensori con cicli di controllo incrociato ... :stuck_out_tongue: :smiley:

Che metodo è questo? come funziona concettualmente parlando?

Grazie a tutti.
Riccardo

riciweb:
Ma nel caso di arduino che si impalla, non esiste un modo per autoresettarlo?

Usa il "CaneDaGuardia". :wink:

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