Ho terminato il mio progetto per il controller della serra.
Il progetto si basa su due arduino ed una ethshield. Gli arduino comunicano tra loro via seriale, dividendosi i compiti.
Ecco le specifiche.
Arduino che si occupa dei Sensori: MasterSen.
Arduino che si occupa del web server, web client e dell'SD log: SlaveWeb.
/*
Greenhouse Project - SlaveWeb v 0.5 Final rev5 IDE 1.0
FREERAM AVVIO: 360
FREERAM LOOP : 316
Binary sketch size: 31452 bytes (of a 32256 byte maximum)
IMPLEMENTATO SEND SOFTEASYTRANSFER.
I pin di TXeRX andrebbero invertiti, in questo caso è stato invertito il codice.
E' quindi sufficiente collegare MasterSen e SlaveWeb rispettivamente:
PIN A3 con PIN A3
PIN A2 con PIN A2
SD.LOGGING.
SD log cartella root formato mensile: DBannomese.CSV
SD card at SPI_FULL_SPEED
Log su SD ogni 6 recezioni dati - 6 minuti. Scarto tra due cicli SD LOG < 50ms.
Creazione del file di log ed aggiunta dell'header se file non presente.
Media lumimosa all'interno del periodo di log.
Log dello status della connessione internet, se connessione assente viene loggato "NC".
Se la connessione è presente viene loggata la stringa di risposta di Pachube.
Log dei setpoints termostato, ricevuti via seriale da MasterSen.
Log dei reset effettuati da MasterSen e SlaveWeb con somma dei flags reset MasterSen nel ciclo di log e azzeramento dopo SD log.
Log dell'avvenuta sincronizzazione NTP di MasterSen, flag ricevuto via seriale.
Dati loggati:
millis, date, t_out, rh_out, t_in, rh_in, t_h2o, t_heat, hz, ssr, tSSRMin, tSSRMax, rstMS, rstSW, SyncNTPMS, pachubeRsp
WEBSERVER.
Implementato webserver su porta 84.
Indirizzo: 192.168.0.9:84
Display a web dei valori dei sensori ricevuti via seriale da MasterSen.
Display a web status riscaldatore ON/OFF
Display a web dei setpoints del riscaldatore.
Display a web dello status connessione del webclient.
Display a web della stringa di risposta di pachube, solo se la connessione del webclient è andata buon fine.
Display a web data ed orario e dei minuti since last reset.
Invio dei SetPoints per il termostato tramite GET.
Trasferimento via seriale dei SetPoints a MasterSen per l'aggiornamento dei parametri.
Conferma dell'invio dei SetPoints con diplay all'interno della pagina principale via <iframe>.
Autorefresh page ogni 60 secondi.
Autoformattazione pagina per visualizzazione su iPhone.
Stringhe html in PROGMEM con F() per risparmiare RAM.
Organizzazione pagina html con <br> e <hr>
WEBCLIENT.
Invio dei dati dei sensori ed altre variabili a Pachube.
Implementate funzioni per il calcolo del content-lenght della parte variabile.
Implementato upload datastreams ad api.pachube.com
Signola PUT ogni ricezione dati seriale ( ogni minuto ).
Implementata risoluzione DNS con open dns: 208.67.222.222
Feed: xxxxxxxxxxxxxxxx.csv
ApiKey: xxxxxxxxxxxxxxxx
Datastreams: t_out, rh_out, t_in, rh_in, t_h2o, t_heat, hz, ssr, rstMS, tSSRMin, tSSRMax,
NTP CLIENT.
Aggiunto NTP client con avvio nel setup.
Server NTP italiano: ntp1.inrim.it (193.204.114.232) con risoluzione DNS.
http://www.inrim.it/ntp/index_i.shtml Invio dei secondi since 1900 a MasterSen per la sincronizzazione RTC.
Ricezione da MasterSen della notifica di sincronizzazione (sync ogni 24 ore o dopo ogni reset).
Log della notifica di sincronizzazione NTP su SD.
WATCHDOG.
Funzione esterna di inizializzazione della EtherneShield, richiamata dove serve.
La Ethernet Shield viene reinizializzata ogni ciclo di log ( 6 cicli di ricezione dati ).
Il micro viene riavviato ogni 60 minuti.
Spostato reset del micro a fine loop, fuori dalla funzione di ricezione dati seriali.
Per non intralciare il ciclo log, il reset del micro si verifica se sono passati 60min
ed il ciclo di log è terminato.
NOTE.
Questa versione richiede bootloader UNO.
CREDITS.
ladyada, Rob Tillaart, Bernardo Giovanni, Martin Nawrath KHM LAB3, arduino forum.
*/