Come promesso nel precedente post, dopo aver descritto a grandi linee l'obbiettivo dei miei esperimenti con Arduino cerco di entrare nei dettagli di come ho fatto i collegamenti elettrici e di come ho implementato la logica di comando, suddivisa tra Arduino e una parte PHP che sta su un web server con cui Arduino comunica. 

Per comandare le due zone riscaldamento con la centralina climatica  la mia caldaia utilizza una scheda di controllo esterna di cui riporto lo schema originale:

 

 

 

In funzione dei dati raccolti da Arduino, ovvero la temperatura nel bollitore e se il solare sta producendo il primo obbiettivo che mi sono posto è stato quello di verificare se le mie ipotesi di partenza erano vere (sto facendo un passo indietro perché ancora non avevo idea se veramente attivando contemporaneamente  la pompa di carico ACS,quella indicata con 2 nella schema sopra, mentre è attiva una  o entrambe le pompe di riscaldamento,la 3 e la 5 nello schema, avrei integrato il riscaldamento con il calore sottratto dal bollitore, a sua volta fornito dal solare).  I primi test li ho fatti scollegando la pompa 2 dalla scheda di controllo della caldaia e comandandola indipendentemente  da Arduino e lasciando che le pompe riscaldamento fossero attivate dalla scheda di controllo su comando della centralina climatica che fa anche da termostato ambiente. Una volta fatta questa verifica ho pensato a come fare un collegamento definitivo per poter lasciare le pompe sempre sotto il controllo delle scheda ma occasionalmente poterle attivare indipendentemente da Arduino, la soluzione che ho trovato è stato l'inserimento di 2 relè, ho provato prima solo con la pompa ACS e poi verificato che funzionava ne ho inserito uno anche sulla pompa di riscaldamento della zona notte:

In questo modo, quando la centralina attiva l'uscita per una pompa attiva il relè alimentando la pompa, altrimenti l'alimentazione della pompa è subordinata al relè comandato da Arduino. I rele' che ho utilizzato sono indicati nello schema (qui un'immagine, sul catalogo finder è indicato in blu ma il il mio è arancio), hanno una bobina che lavora a 220V che è l'uscita della scheda di controllo della caldaia per le pompe. I relè hanno un doppio scambio, uno l'ho usato per il collegamento indicato nello schema, l'altro per deviare un ingresso digitale dell'arduino verso massa o verso +5V, in questo modo da Arduino posso anche sapere quando la caldaia attiva una delle due pompe.

I rele' comandati da Arduino invece sono questi

Nel frattempo ho apportato le varie modifiche allo sketch Arduino ed ho fatto delle ottimizzazioni, la più significativa è l'utilizzo della flash memory per risparmarie SRAM come indicato nella documentazione Arduino. Il risultato di tutti i miei copia e incolla è questa versione dello sketch.

Oltre all'utilizzo estensivo di PROGMEM per mettere in flash tutte le stringhe risparmiando così qualche decina di byte di RAM ho ristrutturato un po' anche lo sketch risparmiando anche un paio di KB sul compilato dello sketch che occupa circa 28 KB, mentre prima ero sui 30 KB, molto vicino al limite massimo di 32 KB - circa 500 B.

L'Arduino spara tutti i dati verso una pagina PHP su un web server che salva i dati su un database MySQL (classico server LAMP), la pagina PHP interroga poi un'altra tabellina che viene popolata da un'altra pagina PHP con cui per ora manualmente io decido se inviare il comando di attivazione delle pompe, tale comando viene mandato codificato dalla pagina PHP in risposta all'arduino quando questo spedisce i dati sulle letture. 

Qui c'è il codice della pagina PHP invocata dal mio Arduino. Nel mio codice c'è anche una specie di controllo di sicurezza basato su un codice (che ovviamente non è quello che ho pubblicato), il codice PHP legge i parametri e li salva sulla tabella "letture" del database MySQL,  poi interroga la tabella in cui vengono inseriti i codici per abilitare o disabilitare le pompe, fa un piccolo controllo di sanità dei dati e in particolare che la temperatura nel bollitore sia almeno 40 °C, altrimenti non restituisce ad Arduino il comando di attivazione delle pompe, per evitare di raffreddare l'ACS sotto i 40 °C che è la temperatura minima che l'ACS deve avere per essere degna di questo nome. Quindi, ho scelto di spostare quanta più logica possibile da Arduino al server WEB/PHP, Arduino rimane un esecutore, viste le limitate risorse.

Questa invece è una copia della pagina per comandare l'accensione delle pompe, semplicemente un form che al submit va a inserire un record opportunamente valorizzato nella tabella commandhistory interrogata dalla pagina php uploaddata.php