Edit:
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.
/*
Greenhouse Project - MasterSen v 0.5 Final rev5 IDE 1.0FREERAM: 952
Binary sketch size: 22526 bytes (of a 32256 byte maximum).SPECIFICHE.
Monitoraggio temperatura ed umidità, interne ed esterne, con due sensori DHT22.
Monitoraggio intensità luminosa con sensore TSL235R su D5.
Monitoraggio temperatura riscaldatore e acqua di irrigazione con due sensori DS18S20.
Termostato settabile tramite menu ad LCD e via web.
Invio e ricezione dati from/to SlaveWeb tramite softeasytransfer.
Invio dati a SlaveWeb ogni 55secondi - 60 reali.*
Dati inviati a SlaveWeb:
UnixTime, Anno, Mese, Giorno, Ora, Minuti, Secondi, t_out DHT, rh_out DH, t_in DHT, rh_in DHT,
th20, thot, mediaHz, statusSSR, tSSRMin, tSSRMax, resetMasterSen, flagSyncNTP
Dati ricevuti da SlaveWeb:
secsSince1900, tminviaweb, tmaxviawebIMPLEMENTATO 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 A2TERMOSTATO.
Relé SSR su pin D8
Le temperature di SetPoint sono salvate in EEPROM.
Nel caso gli indirizzi EEPROM fossero vergini, i setpoits vengono inizializzati con le temperature di
default ( tmin 16C° e tmax 18C° ).
Controlli di sicurezza implementati. Cfr CONTROLLI DI SICUREZZA.CONTROLLO TEMPERATURA TERMOSTATO VIA WEB PAGE.
Ricezione via seriale dei SetPoints per il termostato: tSSRMin e tSSRMax.
Display ad LCD dell'avvenuta ricezione: display Old Value e New Value.
Aggiornamento dei valori ricevuti, confronto ed eventuale salvataggio in EEPROM.CONTROLLO TEMPERATURA TERMOSTATO CON BOTTONI.
Menù per il controllo indipedente della temperatura di accensione e di spegnimento del termostato.
Uscita dal menu con goto outmenu: pressione di entrambi i tasti contemporaneamente.
Uscita automatica dal menu dopo 60 secondi di inattività.
UpPin D9 - DownPin D10SOFTWARE DEBOUNCE.
PIN D9 E D10LCD 2 WIRES CON SHIFREGISTER 74LS164.
DATAPIN D6 - CLKPIN D7 - Libreria aggiornata IDE 1.0 compatibile.
Aggiunto carattere speciale per il grado centigrado °
Aggiunti caratteri per animazione orologio alla ricezione della sincronizzazione NTP.SENDLOG.
Invio dei valori dei sensori e dello status generale a SlaveWeb ogni 60 secondi circa.
Contatore per il log basato sul numero di loops.
#define cicliSendLog 15 // cicli per il SendLog
Lag di trasferimento compensati al fine di avere su SlaveWeb una ricezione ogni 60secondi,
scarto < 10ms.SINCRONIZZAZIONE NTP.
Ricezione da SlaveWeb di secsSince1900ES, via NTP server.
Se il micro è appena stato resettato o se sono passate 24 ore dall'ultimo sync,
funzione di sincronizzazione RTC hardware con server NTP INRIM.
Compensazione fuso orario italiano.
Compensazione ora legale e solare.
Compensazione lag di sincronizzazione in secondi.
Invio flag di avvenuta sincronizzazione NTP a SlaveWeb per SD log.
Se non sono passate 24 ore dall'ultima sincronizzazione display ad LCD in posizione 2,0 di animazione
orologio con lancette.WATCHDOG.
Watchdog 8 secondi.
Reset del micro se sono passati DUE giorni, stabiliti con #define cicloresetwdt 2
Condizioni per il reset: ciclo di SendLog concluso ed orario tra mezzanotte e l'una di notte.
Aggiunto reset flag e disposto invio seriale a SlaveWeb per SD log e Pachube send.CONTROLLI DI SICUREZZA.
Controllo di sicurezza sulla temperatura interna: se troppo alta spegnimento relé.
Impostazione con #define temperaturadisicurezza 28
Inserito spegnimento di sicurezza del relè in caso di fail del sensore.OTTIMIZZAZIONI.
Codice per calcolare la media delle luminosità all'interno del periodo di log.
Inserita compensazione errore media frequenza luminosa: quando c'è un reset le prime due letture
spurie vengono ignorate nel calcolo della media da inviare a SlaveWeb.NOTE*.
Lo script viene eseguito con un loop di circa 4 secondi, delay incluso.
Questa versione richiede bootloader UNO.CREDITS.
ladyada, Rob Tillaart, Bernardo Giovanni, Martin Nawrath KHM LAB3, arduino forum.*/
Arduino che si occupa del web server, web client e dell'SD log: SlaveWeb.
/*
Greenhouse Project - SlaveWeb v 0.5 Final rev5 IDE 1.0FREERAM 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 A2SD.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, pachubeRspWEBSERVER.
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 viaWEBCLIENT.
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.*/
In allegato trovate:
- Gli sketch per MasterSen e SlaveWeb.
- Due grafici del funzionamento del controller, con un log di prova dei sensori ed il log degli eventi di status.
- Uno zip contenente gli eagle (brd e sch) per la shield dei sensori e il button pad. Inoltre ho allegato due librerie. Considerato che le nuove versioni di queste librerie stanno aumentando in dimensioni, aggiornare con le versioni recenti potrebbe non compilare per mancanza di spazio.
Un ringraziamento enorme a tutto il forum
MasterSen_0_5_IDE_1_FINAL_rev5.ino (41.2 KB)
SlaveWeb_0_5_IDE_1_FINALrev5.ino (37.4 KB)
Eagle_and_Libs.rar (143 KB)