Go Down

Topic: Ardu-Aquarium Controller v. 3.3.1 (Read 343152 times) previous topic - next topic

leo72



Quote
Oppure anche un Atmega644, che ha già il doppio di Flash e di Ram rispetto al 328: 64/4 KB contro 32/2 KB.


Ciao anche qs. mi confermi che è OK con l'ide di Arduino?

Le modifiche da apportare all'IDE per usarlo sono poche. L'unico problema di usare un chip differente dall'Atmega328 potrebbe essere di compatibilità con le librerie nate per supportare solo il microcontrollore dell'Arduino UNO.

lexip

Certo non è da implementare in qs. fase...  :smiley-roll-sweat:
ormai spero di essere agli sgoccioli e mi serve la centralina anche perché presto dovrei mettere su, almeno spero, un altro acquario avrei così il tempo per fare i dovuti test su quello che ho attualmente.

comunque è una soluzione valida da tenere in seria considerazione.

Grazie Mille

silversat

ciao a tutti, sono molto interessato a seguire il progetto ed anche a collaborare se può essere utile ma... è morto?  :smiley-eek:

PaoloP

Rici è intervenuto l'ultima volta il 9 Agosto.
Non so.

leouz

il progetto è ancora vivo!!
Adesso c'è da organizzarsi dopo la pausa estiva, diciamo che siamo un pò fermi perche bisogna fare delle scelte progettuali (temperatura, ph etc..)

silversat

nel frattempo sto adattando il sw per sostituire la tastiera con un telecomando IR. Utilizzo un solo pin connesso ad un rivelatore IR tipo TK19 o simili. Qualunque telecomando può essere adattato; io sto usando quello della apple tv:

http://store.apple.com/it/product/MC377Z/A/telecomando-apple-remote?afid=p219|GOIT&cid=AOS-IT-KWG-PLA

che è piccolissimo ed ha giusto i tasti che servono.
ho provato varie librerie e quella di Ken Shirriff mi sembra la migliore...

silversat

per chi fosse interessato...
il ricevitore IR è sul pin 9. non ho verificato se va in conflitto con qualche altra periferica ma è facilmente configurabile nel 'keyboard.h'; non avendo a disposizione tutto l'hardware non ho potuto provare.
ho anche diviso in blocchi (files) il codice per una più facile gestione. spero di non aver combinato guai: se qualcuno potesse verificare...
per eventualmente riattivare la tastiera fisica basta sostituire 'keyboard.h' con il codice opportuno. per la mia tranquillità preferisco non lasciare a qualcuno (bambini, moglie, etc  :smiley-roll-sweat:) la possibilità, anche per errore di premere qualche tasto: nascondo il telecomando e buonanotte!
ciaociao

silversat

corretto qualche bug.
ir su pin 8.

andrea2000

Ciaoa tutti , sto realizzando questa centralina per un mio amico, ho montato parte del circuito su bread board e caricato lo sketch v3.1 ,  Durante i vari test  ho trovato un bug  sull'impostazione e visualizzazione della temperatura.  Se imposto la temperatura e premo ok  non succede niente, invece dovrebbe comparire "conferma" e ripremendo ok salvare. Riguardo la visualizzazione sempre nelle impostazioni, la temperatura parte da 127.00° con le freccette (^^)  sbagliate e se scendo sotto una certa soglia compare anche  la "C°" e le freccette sono posizionate correttamente. Poi c'è anche un piccolo problema nel buzzer,cioè se comincia a suonare perchè la temperatura è cambiata e non lo spengo premendo esc , se vado nel menù il bip-bip del buzzer aumenta tantissimo la velocità(non so se mi spiego).  Ho provato anche la versione 3.0 ma con gli stessi risultati .   Non metto qui lo sketch 3.1 perchè non ho modificato ancora niente e quindi è scaricabile dalla prima pagina. 
Un'altra cosa (già che scrivo), vorrei modificare l'uso della scheda relè  perchè comandare le elettrovalvole e Co2 ecc. al mio amico non interessano, piuttosto vorrei farli diventare 4 relè programmabili on/off impostando l'orario nel menù. C'è qualcuno che abbia voglia di aiutarmi o dare delle dritte per fare queste modifiche? Magari è una funzione che può servire anche ad altri.   
Grazie

leouz

per la temperatura hai provato a ripulire la eeprom prima di caricarlo con il relativo sketch che puoi trovare tra gli esempi?

andrea2000

Ciao e grazie per la pronta risposta. Ho appena provato a cancellare la eeprom e rimettere lo sketch come da te suggerito  e.. si adesso la visualizzazione è quella giusta !(buono a sapersi per la prossima volta)  Ma il problema del "conferma" ok e salva  non va ancora...     secondo me è un problema del programma,precisamente dove ho fatto i trattini tra uno degli ultimi if-else, questo è il frammento di codice che gestisce l'impostazione della temperatura:

Code: [Select]
float Tempacqua, Tempacquaset, Tempvecchia;
byte Tempacquaint, Tempacquadec;
byte Tempind = 37;
boolean Tempmod;
unsigned long Tempolettura, TempoAttuale;

void Impostatempacqua()   // Impostazione della temperatura dell'acqua, e sua memorizzazione in memoria,
// potendo memorizzare in memoria solo byte (interi da 0 a 255) ho stabilitto 40° come valore massimo
// e incrementi di immissione di 0,5° in modo che quando
// scrivo in memoria divido il valore acquisito per l'incremento in modo da ottenere l'intero da memorizzare,
// quando invece leggo il valore, lo rimoltiplico per l'incremento per ottenere nuovamente il valore impostato
// esempio imposto il valore a 27,5° in memoria scrivo 55 ossia 27,5/0,5
// leggo il valore in memoria: 55, lo moltiplico per 0,5 ed ottengo 27,5 ossia il valore impostato
// se decidessimo per un incremento di 0,25 sarebbe la stessa cosa, ma mi è sembrato eccessivo.
{
if (initfunc == true) // Leggo in memoria il valore impostato e predispongo la schermata del display
{ Tempacquaset = (EEPROM.read(Tempind)) * 0.5;
Tempvecchia = Tempacquaset;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("  IMP. TEMP. ACQUA  "));
lcd.setCursor(0,2);
lcd.print(F("Temp.:"));
initfunc = false;
}

lcd.setCursor(6,2);
if (Tempacquaset < 10.0)
{ lcd.print(F("0"));
lcd.print(Tempacquaset);
lcd.write(0b011011111);
}
else
lcd.print(Tempacquaset);

if (conferma)
{ lcd.setCursor(6,3);
stampafrecce();
lcd.print(F(" "));
stampafrecce();
}

if (conferma = true)
{ if (LeggiTasto(inc))
{ if (Tempacquaset < 40.0)
Tempacquaset = Tempacquaset + 0.5;
else
buzerrore();
}

if (LeggiTasto(dec))
{ if (Tempacquaset > 0)
Tempacquaset = Tempacquaset - 0.5;
else
buzerrore();
}

if (LeggiTasto(ok) && conferma)
conferma = false; // disattivo questa if in modo che Il tasto OK funzioni solo con la if di conferma definitiva

//-----------------------------------------------------------------------------------------------------

                                   if (LeggiTasto(esc))
{ Home = true;
initfunc = true;
}
}
else
{ lcd.setCursor(0,3);
lcd.print(F("    *CONFERMARE*    "));
if (LeggiTasto(ok))
{ if (Tempvecchia != Tempacquaset)
{ Tempacquaint = (Tempacquaset / 0.5);
EEPROM.write(Tempind, Tempacquaint);
}
Tempmod = true;
conferma = true;
initfunc = true;
Home = true;
}

if ((LeggiTasto(dx)) || (LeggiTasto(sx)) || (LeggiTasto(inc)) || (LeggiTasto(dec)))
{ lcd.setCursor(0,3);
lcd.print(F("                    "));
conferma = true;
}
}
}


Secondo te cosa può essere ?

silversat

anrdea2000,
nel modificare il codice per le mie esigenze ho corretto diversi buggetti...
se nel caricare i dati da eeprom (o da ds1307) trova valori strani, questi vengono riportati a valori di default.
quasi tutto, compresi i rele, è configurabile. io ho utilizzato una scheda ad 8 rele parallela.
ti allego l'ultima versione dalla quale forse puoi ritagliare quello che ti serve...

andrea2000

Ciao, ho caricato il tuo codice ma l'ide mi dice che il file è troppo grosso, a te funziona bene?  Insomma per un motivo o per l'altro sono fermo...
In attesa di altre risposte  proseguo con i miei tentativi...

PaoloP

Conviene sempre specificare la versione dell'IDE con cui si compila visto che sono parecchie.
Inoltre converrebbe specificare anche se si utilizza la toolchain integrata o è stata aggiornata.

andrea2000

Allora, uso la versione dell' IDE 1.0.5. .  La toolchain  non sapevo cos'era, ora mi sono informato e ho capito qualcosa.Non avendo aggiornato niente penso di avere quella integrata, è per questo che mi diceva che lo sketch era troppo grosso?

Go Up