Go Down

Topic: Greenhouse Project v 0.5 Final rev5 IDE 1.0 (Read 15174 times) previous topic - next topic

DanielaES

#15
Dec 04, 2011, 06:39 pm Last Edit: Dec 04, 2011, 07:00 pm by DanielaES Reason: 1

L'ultimo suggerimento è quello di mettere la cartella radice all'inizio del path, cioè "/log/1112.txt"


Già provato, ma nulla. Cmq ho fatto dei passi avanti, anche se sono arrivata a qualcosa di ancora più ridicolo.
Sono ripartita da zero, ho scritto un codice solo per il file sulla sd, l'ho integrato ecc.
Ed ecco i risultati.
Questo codice, funziona.
Crea un file di log aaaammgg.csv nella dir LOG sulla sd. Tutti i dati vengono normalmente loggati, da seriale si vede tutto, su LCD i dati dei sensori vengono mostrati correttamente.

Code: [Select]
 
void loop () {
// Verifica presenza file di log formattato in TimeStamp:
 char filename[] = "LOG/00000000.csv";
 getFilename(filename);
 if (SD.exists(filename)) {
   Serial.print(filename);
   Serial.println(" esiste.");
 }
 else {
   Serial.println("File di Log non presente.");
   // Se il file di log non esiste viene creato:
   Serial.println("Creazione File di Log...");
   myFile = SD.open(filename, FILE_WRITE);
   // Scrittura dell'Header del file di Log e successiva chiusura:
   myFile.println("millis, date, t_out, rh_out, t_in, rh_in, t_h20, t_heat, heat");
   myFile.close();
 }


Adesso a questo codice voglio aggiungere un paio di righe, per mostrare su LCD la creazione del file di log quando avviene.
Scrivo questo:
Code: [Select]
 
void loop () {
// Verifica presenza file di log formattato in TimeStamp:
 char filename[] = "LOG/00000000.csv";
 getFilename(filename);
 if (SD.exists(filename)) {
   Serial.print(filename);
   Serial.println(" esiste.");
 }
 else {
   Serial.println("File di Log non presente.");
   lcd.clear ();
   lcd.setCursor(0, 0);
   lcd.print("FileLog Missing.");
   // Se il file di log non esiste viene creato:
   Serial.println("Creazione File di Log...");
   lcd.setCursor(0, 1);
   lcd.print("Building FileLog...");
   myFile = SD.open(filename, FILE_WRITE);
   // Scrittura dell'Header del file di Log e successiva chiusura:
   myFile.println("millis, date, t_out, rh_out, t_in, rh_in, t_h20, t_heat, heat");
   myFile.close();
   delay(1000);
   lcd.clear ();
 }


Non funziona nulla. La seriale smette di dar segni di vita dopo i mess del setup.
Lo schermo LCD è vuoto e non vengono loggati dati.
Paradossalmente se avvio questo secondo codice senza sd inserita, i messaggi appaiono corretti, la seriale va e i dati appaiono sullo schermo.
Perché due righe di lcd.print fanno questo??
ed anche verrebbe da chiedersi, perché fanno questo solamente quando vado a creare un file in sottodir, mentre in root non ci sono problemi?
Mboh.


leo72

Mi viene da pensare che le 2 lib insieme possano ad esempio consumare la memoria a disposizione oppure la lentezza di scrittura della SD pianti. Se no ricordo male c'era un bug sulla SD che la rendeva lenta, forse si bloccano insieme

DanielaES


Mi viene da pensare che le 2 lib insieme possano ad esempio consumare la memoria a disposizione oppure la lentezza di scrittura della SD pianti. Se no ricordo male c'era un bug sulla SD che la rendeva lenta, forse si bloccano insieme


O bella. Vuol dire che sono qua da due settimane ed ho già trovato il primo bug della mia vita?
che tra l'altro non accade in root?
Ma non c'è qualcuno con lcd e sd che abbia voglia di provare a riprodurre l'errore?
chissa se si risolve spostando i comandi lcd dopo quelli sd e mettendo un delay dopo che la sd ha chiuso il file... mumble.
Vabbeh, ora provo, poi per oggi basta che mi è venuto il malditesta :\
cmq leo, grazie di esserci stato :)

DanielaES

Aggiungere un delay dopo la chiusura non cambia nulla.
500ms e continua a non funzionare. Non so se si tratti di bug od altro tuttavia, fin tanto che qualche genio non comprenderà l'arcano, ci rinuncio :)
Quindi, nell'ottica del progetto finale: un timestamp mensile aaaamm.csv, nella sottodirectory /LOG, senza -purtroppo- messaggio su LCD alla creazione del file. Essendo un evento che capita una volta al mese, a mezzanotte... posso sopravvivere.
Dovrò però vedere di postare su LCD qualche debug per la SD, giusto come promemoria se faccio partire tutto senza scheda inserita :)

superlol

scusate l'intromissione aggiungendo una cosa che attualmente non è ciò di cui state parlando  XD

invece che gestire l'LCD con uno shift register usa un pcf8574 se hai ancora A4 e A5 liberi.

la gestione è molto più facile inoltre conosco una libreria che ho usato più volte che ti permette di lavorare semplicemente nel codice cambiano la riga di inizializzazione del display  ;)
Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

DanielaES


scusate l'intromissione aggiungendo una cosa che attualmente non è ciò di cui state parlando  XD

invece che gestire l'LCD con uno shift register usa un pcf8574 se hai ancora A4 e A5 liberi.


Ma figurati, ogni intervento è sempre utile :)
Premettendo che A4 ed A5 li ho occupati con l'RTC e che quindi, forse, non posso usare la tua opzione... hai link a guide/tut per capire di cosa stai parlando?

DanielaES

#21
Dec 11, 2011, 03:52 pm Last Edit: Dec 08, 2012, 05:15 pm by DanielaES Reason: 1
Ecco qua l'aggiornamento del progetto!
Per chi fosse interessato o per chi ne avesse bisogno in futuro.
Il punto a cui sono arrivata sembra abbastanza stabile e, per una serie di ragioni che spiegherò dopo, sembra essere un punto di arrivo con l'attuale configurazione.

------------------------------------
Greenhouse Project v 0.4d

Monitoraggio temperatura ed umidità, interne ed esterne, con due sensori DHT22.
Monitoraggio intensità luminosa con sensore TSL235R - pin 5.
Monitoraggio temperatura riscaldatore e acqua di irrigazione con due sensori DS18S20.
Indicazione stato relé su Pin A0.

LCD 2 WIRES: DATAPIN D2 - CLKPIN D3
Aggiunto carattere speciale per il grado centigrado °

File di log nella cartella ROOT, timestamp mensile aaaamm.csv
Loop di 1 secondo, datalogging MILLS ogni 60secondi
Marcatore di avvenuto log su LCD - (2,0)
Codice per calcolare la media delle luminosità all'interno del periodo di log
Diplay ad Lcd della mediaHz quando viene calcolata.

---------------------------

Ho implementato l'hardware ed il software per LCD 2 wires con 74LS164. Una figata.
Funziona esattamente come prima, lo sketch ha le medesime dimensioni e tutto utilizzando solo due pin dell'arduino.

Il datalogging è completato.
Il file di log, con cadenza mensile, è creato nella root. Se assente viene creato ed inizializzato con l'header corretto per il timestamp dei sensori in csv.

I dati dei sensori vengono mostrati sull'LCD con un refresh di 1 secondo e per sfizio ho aggiunto anche il carattere del grado centigrado.
Il log invece viene fatto attraverso un ciclo interno ogni minuto circa.

Il sensore di luminosità TSL235R è impressionante. Ha una sensibilità pazzesca, rileva le minime fluttuazioni di luminosità.
Decisamente mi sento di consigliarlo, sebbene questa sensibilità sia un problema.
Loggando ogni minuto, se all'atto del Log c'è una schiarita, un fulmine od altro... viene segnato un valore che non è, necessariamente, rappresentativo dell'effettiva luminosità.
Per ovviare a questo problema ho scritto due righe di codice che fanno la media della luminosità nel periodo di log. Il datalogging avviene sulla media e non sulla frequenza istantanea.
La media è "intelligente" significa che, se inserite un delay maggiore nel ciclo principale, comunque la media sarà corretta al periodo di log.
Il sensori di temp ed umidità hanno invece una risposta più lenta, quindi un discorso simile è superfluo.

L'indicazione stato relè su A0 è attiva, ma non c'è ancora il codice per il relè.
La configurazione dell'LCD 2 wires libera molti pin che, tuttavia, non credo siano utilizzabili allo stato attuale.
Lo sketch occupa quasi la totalità della memoria SRAM, aggiungere ulteriori funzioni sembra rendere instabile l'arduino. Direi che siamo al limite :)
Quindi salvo colpi di genio, direi che questo sketch è il massimo che si possa implementare su un 2009.

E' tuttavia un buon punto di arrivo, sensori, display e datalogging sono una configurazione accettabile per un progetto.
Al momento l'arduino sta funzionando da 24 ore senza interruzione, senza apparenti problemi. Quindi dovrebbe reggere :)

Nella mia tabella di marcia c'è ancora il web server.
Considerato il punto di arresto, probabile causa ram overflow, a cui sono arrivata... dovrò prendere una piccola deviazione.

Il progetto quindi si svilupperà nell'ottica multiprocessore con due 328 standalone che comunicano tra loro.
Il master si occuperà di sensori ed lcd, lo slave riceverà i dati e tramite la ethernet shield li loggherà sulla sd e farà da web server.
In questo modo la distribuzione delle librerie sarà ottimizzata.
Il web server richiede la SDFAT che è la stessa necessaria per il datalogging. Mettendo le funzioni insieme, posso eliminare la libreria dal master che supporta sensori ed lcd.

Non ho ancora studiato bene il protocollo di comunicazione che probabilmente sarà I2C anche se stamattina ho trovato una libreria che se funziona... :P
(poi leo mi cazzia)

A seguire fotina e codice completo.
Il codice è ultracommentato e un po' disordinato... abbiate pazienza :)

mauroz

volevo solo farti i complimenti per il tuo progetto, se un giorno mi costruisco una serra sarà utile (qualche piantina strana da serra in mente c'è l'ho umh! :D )


MauroTec

Quote
volevo solo farti i complimenti per il tuo progetto, se un giorno mi costruisco una serra sarà utile (qualche piantina strana da serra in mente c'è l'ho umh! smiley-grin )


Salve, sono della finanza, il suo IP ci è noto, la teniamo d'occhio :D
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

DanielaES


volevo solo farti i complimenti per il tuo progetto, se un giorno mi costruisco una serra sarà utile (qualche piantina strana da serra in mente c'è l'ho umh! :D )


Non è nulla di che... fuori è pieno di progetti arduino per serre.
Mi pare vendano pure un garduino!
Io sono arrivata all'arduino proprio seguendo quei progetti :)
Sulle piante strane non commento... ^___^

DanielaES

#25
Jan 13, 2012, 09:18 pm Last Edit: Dec 08, 2012, 05:18 pm by DanielaES Reason: 1
Aggiornamento.
Da sx a dx, dall'alto in basso.
Panduino, controller lcd 2 pin versione compatta, monofaccia e senza ponticelli, shield sensori.
Pcb per astro e secondo panduino.
Certo che questo fatto che non si possono allegare immagini... mah. Cmq tinypic non fa il resize.

PaoloP

Complimenti, bellissimo progetto.

mauroz

si vede che sotto c'è una mano femminile, quasi quasi invidio quelle piantine, chissà come saranno amorevolmente curate... (sempre che l'arduino non prenda fuoca e trasformi la serra in un bel forno!  ]:D )

DanielaES

#28
Jan 19, 2012, 09:27 pm Last Edit: Dec 08, 2012, 05:18 pm by DanielaES Reason: 1
Aggiornamento:
Finita la costruzione del/dei Panduino.
Finita la costruzione della shield con i connettori per i sensori
Finita la costruzione per il modulo shift register lcd... scendendo con la dimensione delle piste sono riuscita a fare un monofaccia che si attacca dietro all'lcd. Molto bellino :)
Caricato lo sketch nel Panduino standAlone.

Per la realizzazione dei pcb cfr qui:
http://arduino.cc/forum/index.php/topic,85424.0.html
http://arduino.cc/forum/index.php/topic,86397.0.html
Per la laccatura cfr qui:
http://arduino.cc/forum/index.php/topic,86134.0.html
Per la programmazione del chip in standalone cfr guida del prof. Menniti e qui:
http://arduino.cc/forum/index.php/topic,87754.0.html

mauroz

complimenti, fa sempre piacere vedere progetti completi.. :D

Go Up