Ardu-Aquarium Controller v. 3.3.1

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 ?

( :P 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... :|

Etemenanki: Perche' vuoi usare un'acquario per allevarci topi biologici ? ( :P 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 :P 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].

leo72:
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.

lesto:
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.

Belle dritte, grazie a tutti e due, approfondirò meglio…
Vi va, senza impegno naturalmente, di dare un’occhiata al volo alla libreria che abbiamo scritto io e Leouz almeno per qualche consiglio su come è stata impostata?

http://forum.arduino.cc/index.php?topic=198456.0

La metto in allegato anche qui.
Grazie in anticipo :slight_smile:

@ Leo72
OT Leggo spesso i tuoi articoli, imparo molto da te grazie per gli insegnamenti e per quel pizzico di allegria che mi hai regalato con l’articolo sulla sindrome di Gundam XD XD XD mi ci sono riconosciuto in pieno, almeno per come ho iniziato un paio di anni fa… :smiley: :smiley: :smiley: Poi però mi sono messo sotto con risultati non proprio eccellentissimi, ma tant’é a piccoli passi piano piano arrivo pure io :sweat_smile:

pieromt:
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

Dovrebbe andare bene, in uscita dall’IC inveter (74HC540N) da data sheet abbiamo +/- 35mA sufficienti a pilotare i singoli relé.

Ciao a tutti.

Riccardo

LM7792.zip (4.79 KB)

allora, per quanto riguarda le lettura analogiche: http://forum.arduino.cc/index.php?topic=109946.0

tra l'altro si nota l'uso di #ifdef per decidere se leggere a 8 o a 10 bit

riciweb: Dovrebbe andare bene, in uscita dall'IC inveter (74HC540N) da data sheet abbiamo +/- 35mA sufficienti a pilotare i singoli relé.

Ricci, come lo collego all'IC5 che trovo nello schema??? allego la foto dei piedini.... grazie...

P.S. ho ordinato il tutto appena mi arriva inizio a assemblare... e proviamo ....

Per quanto riguarda l'impianto luci voi che cosa usate?? io avevo pensato di aquistare dei led 3W che ne pensate

Screenshot_1.png|615x420