Ardu-Aquarium Controller v. 3.3.1

Ciao Lesto,
mi permetto un OT:
secondo me state dando troppa importanza all'effetto alba/tramonto. In acquario non ha praticamente nessuna utilità se non quella di evitare dei "piccoli" stress quotidiani alle creature che ci vivono. In pratica si attivano luci (strip led nel mio caso) che aumentano la luminosità progressivamente fino ad arrivare all'inizio del fotoperiodo dove si accendono tutte le fonti luminose. Così facendo le specie più timide non risentono troppo dell'accessione immediata di tutte le luci. Discorso inverso per il tramonto. Con dei led RGB si può implementare anche la luce lunare che, anche in questo caso, non ha alcuni impatto sulla salute di pesci e organismi dell'acquario, ma è solo puramente estetica oltre a consentire l'osservazione di specie molto timide e notturne. Se consideri che il fotoperiodo per gli acquari tropicali va dai 6 - 8 ore al giorno non rispecchiando il fotoperiodo dei tropici converrai che è inutile implementare una logica su Arduino (già abbastanza torchiato almeno nel mio caso) per simulare qualcosa di impatto irrilevante per la vita degli organismi dell'acquario.
Una linearità nel fade del sistema di illuminazione, a mio modesto parere, è sufficiente.

mi scuso ancora per l'OT
Saluti

ma anche esteticamente parlando, se metti un PWM lineare che inizia alle 6 del mattino e finisce alle 6 di sera, vedrai la lampada avere abbastanza "potenza" per illumincare solo 4 o 5 ore al giorno contro le attese 12.. Non dico che il lineare sia da buttare via, ma dico che il massimo (o alemnbo metà) illuminazione va raggiunto in 10/20 minuti al massimo, e lo stesso vale per il tramonto, il resto dell'illuminazione (se non si è già al massimo) va distribuito durante la giornata.

Magari è vero che per i pesci non cambia molto, ma immagino che per le alghe il fotoperiodo sia importante

lesto:
immagino che per le alghe il fotoperiodo sia importante

E non sai quanto, oltre al fatto che tale foto periodo va effettuato con illuminazione atta ad imitare nel modo piu vicino possibile lo spettro solare, cosa impossibile, ma ci si può avvicinare.
Voglio pero aggiungere un concetto che lexip non considera e che di fatto è alla base della filosofia dell'avere un'acquario ed è che un acquario in quanto tale, dovrebbe in tutto e per tutto rappresenare un biotopo, che sia amazzonico, indonesiano africano o quello che si vuole; alla base del concetto di biotopo poi c'è che in tutto e per tutto si cerca nei limiti del possibile di ricrearlo anche nelle condizioni ambientali ed ecco che anche l'andamento della curva dell'illuminazione viene ad avere il suo peso.
Tutto questo per dire che non c'è solo l'aspetto ornamentale o l'effetto ricercato a gusto personale in un acquario e per quanto possano alcune cose sembrare superflue ti assicuro che sul lungo periodo poi non lo sono affatto.
Poche persone si dedicano effettivamente ad un acquario con questo piglio, di fatto in effetti moltissimi acquari sembrano più luna park (forzieri, galeoni colonne e scheletri a più non posso) o piccole babele pescifere con accostamenti di pesci che il più delle volte vivono o vivrebbero agli antipodi del pianeta in condizioni altrettanto diverse, ma se è vero che alla fine, in ogni caso, si deve obtorto collo fare i conti con i limiti di Arduino (detto lo strizzato :astonished: ), valutare le possibilità o le strade perscorribili non ha mai fatto male a nessuno, benvengano quindi tutti i suggeriementi, le idee e le considerazioni.

Ciaooooo

Ciao,
non vorrei essere bastonato... per gli OT anche se, in fondo, la consapevolezza dell'ecosistema ci permette di creare la centralina che sia adatta meglio alle esigenze.

E non sai quanto, oltre al fatto che tale foto periodo va effettuato con illuminazione atta ad imitare nel modo piu vicino possibile lo spettro solare, cosa impossibile, ma ci si può avvicinare

esatto anche per questo non è bene esagerare con fade troppo lunghi (specialmente se , come nel mio caso, si usano LED).

Voglio pero aggiungere un concetto che lexip non considera e che di fatto è alla base della filosofia dell'avere un'acquario ed è che un acquario in quanto tale, dovrebbe in tutto e per tutto rappresenare un biotopo, che sia amazzonico, indonesiano africano o quello che si vuole; alla base del concetto di biotopo poi c'è che in tutto e per tutto si cerca nei limiti del possibile di ricrearlo anche nelle condizioni ambientali ...

ti assicuro riciweb che siamo sulla stessa lunghezza d'onda! sono acquarofilo (acqua dolce) da più di un anno con tanti errori alle spalle (inclusi i miscugli) e adesso cerco di gestire al meglio un acquarietto da 40 Litri e mi accingo ad allestirne uno da 100. Diciamo che a livello di malattia acquarofila da 1 a 10 sono ad un 6 con tanto di controlli acqua settimanale, diete variegate con verdure lessate, libri sulle piante e sui biotipi...

concludo senza dilungarmi ancora... Posso parlare solo per il dolce...
Dico solo che, anche senza curve, è possibile migliorare la vivibilità dell'acquario con un semplice Fade che porti alla illuminazione piena nel giro di 20-30 min. al max.
Considera che la luce serve più che altro alle piante...

valutare le possibilità o le strade perscorribili non ha mai fatto male a nessuno, benvengano quindi tutti i suggeriementi, le idee e le considerazioni

non era assolutamente nelle mie intenzioni affermare il contrario... ma è altrettanto costruttivo scambiarsi delle opinioni per capire se realmente utile percorrere quella strada.Ti faccio un esempio... nella mia centralina implementerò la luce lunare per osservare la vita, prettamente notturna, del mio timidissimo pangio... non è che mi metterò lì a creare il software per la simulazione delle fasi lunari, i gg. di luna piena, luna crescente e via dicendo... come ti dicevo, ma è solo il mio modesto parere maturato dalle mie conoscenze, faccio delle considerazioni sulla reale utilità e faccio un rapporto Sforzo/beneficio...

Quanto spazio vi resta libero nella flash?
Se ci fosse almeno qualche KB, si potrebbe implementare uno scheduler semplicissimo che ad un determinato orario si attiva e fa la rampa in salita verso il giorno in un periodo di tempo prestabilito e poi ad un altro orario attiva la rampa di disceva verso la notte.

riciweb:
... un biotopo ...

Perche' vuoi usare un'acquario per allevarci topi biologici ?

( :stuck_out_tongue: XD XD XD XD XD XD XD )

leo72:
Quanto spazio vi resta libero nella flash?
Se ci fosse almeno qualche KB, si potrebbe implementare uno scheduler semplicissimo che ad un determinato orario si attiva e fa la rampa in salita verso il giorno in un periodo di tempo prestabilito e poi ad un altro orario attiva la rampa di disceva verso la notte.

Ciao Leo, questo lo sketch già lo fa, si parlava piuttosto dell'idea di lesto di far in modo che le rampe somigliassero il più possibile all'andamento della luminosità naturale, mettendole in relazione anche all'andamento delle stagioni.
Solo che per il momento non posso fare altro che sopprassedere almeno finché non finisco il tutto e posso in base ai limiti di Arduino che raggiungo decidere cos'altro implementare... :expressionless:

Etemenanki:
Perche' vuoi usare un'acquario per allevarci topi biologici ?
( :stuck_out_tongue: XD XD XD XD XD XD XD )

ROTFL

Ciao anche con la mia dovrei riuscire a fare alba e tramonto... :*
ma io sono praticamente arrivato a saturare tutto :cold_sweat:!!! sono infatti in fase di ottimizzazione. Nel frattempo PCB stampato, devo solo saldare i componenti e scaricare il firmware.

Saluti

Magari lo saprete anche, ma si risparmiano diverse centinaia di byte usando gli accessi diretti ai registri di sistema al posto delle digitalWrite e delle digitalRead. Per le letture analogiche c'è la possibilità di fare altrettanto, anche se è un pò più complesso che nel precedente caso.

Se accedi tramite registri il codice non è più portabile tra modelli i diversi di Arduino: UNO, MEGA, Leonardo, ecc.

PaoloP:
Se accedi tramite registri il codice non è più portabile tra modelli i diversi di Arduino: UNO, MEGA, Leonardo, ecc.

Bastano alcune #define, non è un grosso problema. Ma credo che vogliano restare sulla piattaforma UNO perché la MEGA non ha problemi di memoria, ad esempio, ed anche perché già a suo tempo suggerii l'uso di un Atmega644 proprio per avere più flash e ram ma fu scartato.

Bastano alcune #define, non è un grosso problema. Ma credo che vogliano restare sulla piattaforma UNO perché la MEGA non ha problemi di memoria, ad esempio, ed anche perché già a suo tempo suggerii l'uso di un Atmega644 proprio per avere più flash e ram ma fu scartato.

Ciao Leo72 mi spiegheresti come si fa, sono molto interessato... come dici tu non mi interessa passare ad Arduino Mega

Saluti

non le #defgine ma le #ifdef, le define le mette il compilatore in base al target per cui compili.

Guarda le librerie arduino, per esempio quelle PWM, ma anche la swRtc usa questo metodo :slight_smile:

@Lesto:
sì, ma si capisce dai :stuck_out_tongue:
comunque diciamo "direttive al compilatore", che è più esatto

@lepix:
si usano le direttive al compilatore per far sì che il codice si possa adattare a diverse MCU. Ovviamente si parla di cose a basso livello, cioè la manipolazione dei registri del micro per accedere a periferiche o funzioni non gestite dal core di Arduino.
Esempi ne trovi negli header di diverse lib che ho scritto.

dai mettiamo unpiccolo esempio:

#if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__)
    TIFR |= _BV(OCF1A);      // clear any pending interrupts; 
    TIMSK |=  _BV(OCIE1A) ;  // enable the output compare interrupt  
#else
    // here if not ATmega8 or ATmega128
    TIFR1 |= _BV(OCF1A);     // clear any pending interrupts; 
    TIMSK1 |=  _BV(OCIE1A) ; // enable the output compare interrupt 
#endif

Grazie lesto... potresti completare il codice con l'esempio di utilizzo degli I/O.

Saluti

io farei così
un file config.h con dentro le impostazioni dei pin (valori a caso)

#if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__)
    const int pinInput1 = 10;
    const int pinInputSCL = A5;
    const int pinInputSDA = A6;
#else
    // here if not ATmega8 or ATmega128
    const int pinInput1 = 21;
    const int pinInputSCL = A0;
    const int pinInputSDA = A1;
#endif

ovviamente tutti i pin usati devono essere mappati quì dentro, questo ovviamente è possibile solo se tutte le board eseguono lo stesso codice, e quindi hanno le stesse capacità hardware, solo che è su pin differtenti.

al posto della tua piastra con i rele si potrebbe utilizzare questa...

http://www.ebay.it/itm/8-Channel-12V-Relay-Shield-Module-for-Arduino-ARM-PIC-AVR-DSP-SRD-12VDC-SL-C-New-/350816995356?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item51ae52881c&_uhb=1

Scusami lesto ma non ho capito bene... la parte che segue cosa fà :

#if defined(AVR_ATmega8)|| defined(AVR_ATmega128)
TIFR |= _BV(OCF1A); // clear any pending interrupts;
TIMSK |= _BV(OCIE1A) ; // enable the output compare interrupt
#else
// here if not ATmega8 or ATmega128
TIFR1 |= _BV(OCF1A); // clear any pending interrupts;
TIMSK1 |= _BV(OCIE1A) ; // enable the output compare interrupt
#endif

invece ho capito che con questa dichiaro i pin con delle costanti

#if defined(AVR_ATmega8)|| defined(AVR_ATmega128)
const int pinInput1 = 10;
const int pinInputSCL = A5;
const int pinInputSDA = A6;
#else
// here if not ATmega8 or ATmega128
const int pinInput1 = 21;
const int pinInputSCL = A0;
const int pinInputSDA = A1;
#endif

ma come attivo un'uscita senza usare i digitalWrite e come leggo senza digitalRead?
grazie ancora

lexip:
Scusami lesto ma non ho capito bene... la parte che segue cosa fà :

#if defined(AVR_ATmega8)|| defined(AVR_ATmega128)
TIFR |= _BV(OCF1A); // clear any pending interrupts;
TIMSK |= _BV(OCIE1A) ; // enable the output compare interrupt
#else
// here if not ATmega8 or ATmega128
TIFR1 |= _BV(OCF1A); // clear any pending interrupts;
TIMSK1 |= _BV(OCIE1A) ; // enable the output compare interrupt
#endif

E' un esempio di una serie di direttive al compilatore che attivano funzioni particolari del microcontrollore.
Diciamo che sono funzioni avanzate.

ma come attivo un'uscita senza usare i digitalWrite e come leggo senza digitalRead?
grazie ancora

Ti posso consigliare la lettura di questo articolo[/quote].