Ardu-Aquarium Controller v. 3.3.1

lesto:
BTW esattamente come i pulsanti hanno un piedino "int" (che sta per interrupt), la stessa cosa lo hanno molti RTC! Tu imposti una "sveglia" sull'RTC, e lui all'orario prefissato manda il pin ad HIGH, insomma "suona la sveglia".

Attento che con la RAM all'80% è facile iniziare a subire reset per via dello stack che cresce dalla parte opposta. Siete al limite in entrambi i casi.

Essitono vari sensori di temperatura i2c, non so però se già "incapsulati" a tenuta stagna.. non che sia difficile da ottenere.

Sto usando il DS1307 come RTC e non credo sia fattibile quello che dici, ho googlato un po, ma non ho capito molto, mi pare che il PCF8583 abbia la possibilità di imposare un allarme, non credo ne esistano con più di un allarme impostabile, hai qualche dritta?

C'è da qualche parte qualcosa terra terra per me, per capire come funziona lo stack?

Grazie Riccardo.

il tuo non ha gli allarmi, al massimo crea un onda quadra di frequenza 1Hz...

guarda il DS3232 (RTC Real Time Clock Module Quickstart Guide | Freetronics)
o il DS1337 (Yet-Another DS1337 RTC library - Development - Arduino Forum)

a te non serve avere più di un allarme: il tuo arduino avarà la tabella degli allarmi, prima di andare a nanna cercherà l'allarme più vicino, lo setta all'RTC e va a nanna.

Le varie sonde non saranno lette durante lo sleep, quindi: o fai in modo che ogni tot secondi ci sia un allarme per forza, anche se vuoto (quindi aggiornamento dati), oppure vari sensori, sopratutto i2c, hanno delle soglie impostabili che lanciano un segnale su un pin INT, quindi anche qui avresti un segnale che in caso di "pericolo" ti riseglia.

Ma riguardo ai sensori ti temperatura i2c, non è che siano solo per misurazioni prese direttamente dalla board.
perche se non ricordo male in un post si era detto che questo protocollo non sia assicurato per dispositivi staccati dalla scheda principale.. magari è solo una questione per dispositivi industriali, o semplicemente ho maleinterpretato io le cose.

Per quanto riguarda il salvataggio delle stringhe da stampare direttamente nella flash sono alquanto d'accordo, tanto che avevo cominciato a ricreare la struttura del menu, ed ero pure a buon punto (allego codice).

Sarei curioso di sapere cosa ne pensate di questo integrato, sembra promettere la lettura del ph, con la possibilità di collegarci 2 sonde e 1 sonda temperature pt100 o pt1000 , ha pure la comunicazione serialecon il quale lo si puo programmare, solo che dal datasheet non capisco come creargli un circuito base per provarlo.. sembra che non gli servi niente,
l'integrato LMP91200 data sheet, product information and support | TI.com, Datasheet: http://www.ti.com/lit/ds/snas571c/snas571c.pdf

acqua_PROGMEM.ino (24.6 KB)

quell'integrato è solo un ADC moolto sensibile e preciso, mancano le sonde e i necessari liquidi di calibrazione. Vedi questo kit e la famiglia di kit vanduti da questa azienda... costano, ma sai di portarti a casa tutto il necessaire.
PH: https://www.sparkfun.com/products/10972

ossigeno dissolto: Dissolved Oxygen Kit - SEN-11194 - SparkFun Electronics
conduttività elettrica: Electrical Conductivity Kit - SEN-11193 - SparkFun Electronics

se non erro parlano tutte via seriale, e hanno esempi di codice.

@riciweb:
la Flash sono 31,5 kB (tolto il bootloader della UNO) mentre di RAM ne hai solo 2 kB. Devi pensare a come salvare la RAM sempre prima di come salvare la Flash! :wink:
Con la funzione F() hai perso 200 byte di Flash su un totale di 32256, cioè lo 0,62% in più, mentre passare da 1391 a 957 sono 434 byte salvati su 2048, cioè il 21,19% in meno!! :astonished:

leouz:
Ma riguardo ai sensori ti temperatura i2c, non è che siano solo per misurazioni prese direttamente dalla board.
perche se non ricordo male in un post si era detto che questo protocollo non sia assicurato per dispositivi staccati dalla scheda principale.. magari è solo una questione per dispositivi industriali, o semplicemente ho maleinterpretato io le cose.

In realtà ci potremmo auto costruire i sensori waterproof, ma a quel punto sarà necessario tenere in considerazione non solo il "forse" elevato numero di periche sul bus, ma anche la lunghezza complessiva del bus stesso, perché i sensori saranno collegati via cavo al pcb, dovremmo quindi integrare il PCB con un bus extender, questo P82B715 data sheet, product information and support | TI.com :wink:

lesto:
quell'integrato è solo un ADC moolto sensibile e preciso, mancano le sonde e i necessari liquidi di calibrazione. Vedi questo kit e la famiglia di kit vanduti da questa azienda... costano, ma sai di portarti a casa tutto il necessaire.
PH: pH Sensor Kit - SEN-10972 - SparkFun Electronics
ossigeno dissolto: Dissolved Oxygen Kit - SEN-11194 - SparkFun Electronics
conduttività elettrica: https://www.sparkfun.com/products/11193
se non erro parlano tutte via seriale, e hanno esempi di codice.

I prodotti Atlas, sono tanto belli e funzionali, quanto estremamente costosi, speravamo di autocostrurci qualcosa, magari prendendo spunti quà e la...

leo72:
@riciweb:
la Flash sono 31,5 kB (tolto il bootloader della UNO) mentre di RAM ne hai solo 2 kB. Devi pensare a come salvare la RAM sempre prima di come salvare la Flash! :wink:
Con la funzione F() hai perso 200 byte di Flash su un totale di 32256, cioè lo 0,62% in più, mentre passare da 1391 a 957 sono 434 byte salvati su 2048, cioè il 21,19% in meno!! :astonished:

Grazie per avermi aiutato a focalizzare le priorità, in effetti sono considerazione che non avevo fatto. :expressionless:

Ciao

Riccardo

Con la F, vai sempre tranquillo!! XD

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

lesto:
Essitono vari sensori di temperatura i2c, non so però se già "incapsulati" a tenuta stagna..

forse ti confondi con bus OneWire, come i 18B20, non i2c, quindi non ci cono rpoblemi di distanza

nono, quì si parla di usare meno protocolli possibili, quindi è giusto dire i2c. :grin:

scusa, non ho letto tutto il topic, ma allora il problema distanza esiste, mica possono mettere l'arduino a mollo ?

ma c'e' lo schema elettrico di questo progetto oppure solo le foto delle bread ?

mica sta a mollo l'arduino, la soluzione è ugiale a quall on-wire, però risparmiano un sacco di ram e flash, certo la lunghezza (o meglio la capacità) del cavo del sensore sarà limitata, diciamo sui 10cm circa.

PaoloP:
Con la F, vai sempre tranquillo!! XD

Eheheh!!! Ora lo so, grazie Paolo!!! :wink:

Testato:
scusa, non ho letto tutto il topic, ma allora il problema distanza esiste, mica possono mettere l'arduino a mollo ?
ma c'e' lo schema elettrico di questo progetto oppure solo le foto delle bread ?

Allego a questo topic l'ultimo aggiornamento e a questo punto lo aggiungo anche al topic iniziale... XD

lesto:
mica sta a mollo l'arduino, la soluzione è ugiale a quall on-wire, però risparmiano un sacco di ram e flash, certo la lunghezza (o meglio la capacità) del cavo del sensore sarà limitata, diciamo sui 10cm circa.

10 cm come lunghezza massima del cavo, è impossibile, sarà difficile stare sotto i 30cm anche metendo il pcb del controller in una scatola stagna all'interno del coperchio dell'acquario, è per questo che qualche post fà, ho parlato di integrare nel circuito l' I2C expander P82B715 data sheet, product information and support | TI.com che appunto dovrebbe risolvere il problema della lunghezza del bus, ho ordinato un pò di cosette per fare delle prove, vedremo cosa fare più avanti... :expressionless:

In allegato anche lo sketch rivisto in alcune parti, con la correzione della if suggerita da lesto, con le F() gentilmente inserite da leo72 e formattato un pò meglio, anche se l'uso quasi obbigato di un'editor esterno (Notepad++) non aiuta affatto, ma perché non aggiornano un pochino anche le visualizzazioni dell'IDE ufficiale =( che bello sarebbe poter chiudere/espandere i livelli anche lì...
Grazie di cuore a tutti.

Riccardo.

acquarium_controller_v3_1.ino (44 KB)

Nello schema hai messo in ingresso 1.2V e non 12V. :sweat_smile: :grin:

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