Analisi della realtà

Negli incontri precedenti, abbiamo analizzato come poter visualizzare le informazioni energetiche in un’abitazione domestica in cui coesistevano sia l’apparato di produzione energia, sia l’apparato di consumo energia.

Nell’edificio scolastico, non esiste l’apparato di produzione energia ma solo il contatore dei consumi.

Inoltre, essendo una struttura in cui è installato un impianto trifase, bisogna reingegnerizzare sia gli strumenti hardware sia la struttura software.

—Il sistema trifase, è un sistema combinato di più circuiti a corrente alternata aventi la stessa frequenza e tre tensioni ugualmente alternate ma sfasate fra di loro di 120°

Quindi per calcolare l’energia assorbita dall’impianto, vanno calcolate le singole fasi, sommate fra di loro, ed aggiunto lo sfasamento (cos-fi).

Ora, essendo lo sfasamento = 1, basta solo calcolare la somma delle singole fasi.

Le nuove informazioni hardware

Per poter analizzare le singole fasi, la procedura è la medesima vista nell’analisi del progetto MED procedente.

Dal punto di vista hardware, si avranno sempre le seguenti componentistiche:

  1. pinza amperometrica;
  2. convertitore analogico-digitale;
  3. circuito amplificatore di segnale/raddrizzatore di precisione;
  4. raspberry.

L’unico apparato hardware che rimane identico al progetto MED visto negli incontri precedenti è il raspberry.

1. Pinza amperometrica (current sensor):

I current sensor utilizzati per il monitoring energetico hanno caratteristiche diverse rispetto al progetto MED, in quanto sia i fili che compongono la singola fase sia il flusso di corrente nel filo hanno capacità maggiori.

Infatti il nuovo current sensor avrà diametro di “pinzaggio” di 1,9cm. e una capacità di misurazione che arriva a 100A.

—Per prelevare le informazioni energetiche dell’edificio sono necessarie 3 “current sensor” aventi le caratteristiche elencate.

Current sensor SCT-019

Current sensor SCT-019

2. Convertitore A/D

—Se nel progetto MED erano sufficienti due ingressi, in quanto l’analisi andava fatta sull’energia prodotta e quella consumata, in questo progetto sono necessari 3 ingressi in quanto l’analisi va fatta sulle singole monofasi.

—Quindi al posto del MCP3002 bisogna utilizzare l’MCP3008, con la differenza che il primo era integrato in un circuito che faceva diverse cose oltre che la conversione, mentre il secondo è stato integrato direttamente nel circuito raddrizzatore/amplificatore.

mcp3008

mcp3008

3. Il circuito raddrizzatore di precisione / amplificatore di segnale

Il nuovo circuito quindi avrà anche la presenza del MCP3008, ma lo schema ed il principio di funzionamento è identico al circuito realizzato nel progetto MED.

Circuito Raddrizzatore/Amplificatore

Circuito Raddrizzatore/Amplificatore

Le nuove informazioni software

Le variazioni python sulla lettura su MCP3008:

Lettura su MCP3008

Lettura su MCP3008

In realtà, rispetto alla procedura python che permetteva la lettura su MCP3002, è cambiato poco. Il principio di funzionamento è lo stesso solo che abbiamo fino ad otto canali.

La procedura chiamante ovviamente passerà come parametro solo tre canali.

Per quanto riguarda la procedura di scrittura info su DB è molto simile al progetto MED, solo che, come abbiamo visto in precedenza, vanno sommate le fasi ed aggiunto lo sfasamento.

Scrittura info su DB (1)

Scrittura info su DB (1)

Scrittura info su DB (2)

Scrittura info su DB (2)

Il codice PHP del progetto attuale:

Rispetto al progetto precedente:

  1. Non c’è produzione energia;
  2. Ci sono tre linee monofase di consumo;
  3. Non c’è l’invio informazioni su sito remoto.

L’output su browser sarà quindi il seguente:

Output su browser

Output su browser

Frammento di codice php

Frammento di codice php

Il Progetto MED (Monitoraggio Energia Domestica)

Introduzione

Il progetto MED (Monitoraggio Energia Domestica) è finalizzato alla progettazione e realizzazione di un apparato, sia hardware che software, in grado di effettuare un monitoraggio sul consumo e produzione dell‟energia in una qualsiasi abitazione dove sia stato installato un “impianto di produzione energia ecosostenibile”. L’idea è nata dall’esigenza reale di conoscere quanta energia viene prodotta dal pannello fotovoltaico o microeolico, quanta energia viene consumata in tutto l’apparato domestico, e quale è la differenza produzione-consumo in tempo reale e a fine giornata.

Lo Schema funzionale è il seguente:

L2_S2_Schema funzionale MED

  1. Il progetto MED si prefigge un triplice obiettivo:
    creare un dispositivo in grado di acquisire le informazioni dal contatore di produzione e dal contatore di rete e, in tempo reale, visualizzare le stesse su dispositivi vari (PC, laptop o “Mobile”), verificando ed evidenziando se si sta prelevando maggiormente dalla rete elettrica o dall’impianto eco-sostenibile, effettuare una media produzione ed una media consumi in tempo reale e effettuare un consuntivo produzione ed un consuntivo consumi progressivi;
  2. creare un sito in grado di ricevere da ogni dispositivo MED installato nelle varie abitazioni (nel caso del progetto attuale la rilevazione è stata ovviamente effettuata solamente sui dati provenienti dal dispositivo MED messo in produzione nell‟abitazione test ma può essere estesa ad ogni dispositivo simile installato presso altre abitazioni) le informazioni relative alla produzione e consumo ogni circa 10/15 minuti e visualizzare le stesse in un‟area predefinita di una pagina web. Ogni dispositivo avrà su internet un proprio codice identificativo, il quale sarà legato univocamente al dispositivo MED in una particolare abitazione. Lo stesso codice sarà legato all‟utente il quale potrà visualizzare le informazioni della propria abitazione solo inserendo le credenziali di registrazione. Lo stesso sito dovrà permettere di leggere le statistiche di produzione e consumo giornaliere e mensili sempre legate a quel codice abitazione;
  3. realizzare un dispositivo che faccia da “base” su cui successivamente implementare altre estensioni, come, ad esempio: le “prese intelligenti”, in grado di “aprirsi” nel momento in cui c’è una produzione generosa di energia dal proprio impianto.

Progetto MED: l’hardware

 Dispositivi hardware necessari alla realizzazione del progetto

Oltre al Raspberry Pi, di cui abbiamo ampiamente parlato negli incontri precedenti, i dispositivi necessari alla realizzazione del progetto sono 3:

  1. Pinze amperometriche (o current sensor): le quali, connesse al contatore di produzione e a quello dei consumi. E’ uno strumento di misura che viene utilizzato per rilevare l’intensità di corrente che percorre una sezione di un conduttore sfruttando i principi dell’elettromagnetismo.
    In particolare il cavo passante nella per la pinza induce un campo magnetico (Legge di Ampere-Maxwell) e sul corpo della pinza è avvolto un filo, ai capi del quale s’induce una f.e.m. a causa della variazione del flusso d’induzione magnetica nella pinza (legge di Faraday-Neumann-Lenz).

    L2_S3_1_CURRSENS

    Current sensor SCT-013

    Quindi: corrente nel filo passante per la pinza → campo magnetico nella pinza → tensione ai capi delle spire avvolte sulla pinza → strumento di misura

  2. Convertitore analogico-digitale: in grado di ricevere un segnale analogico dalla PA e restituire, al PC, un segnale fruibile in digitale per poter essere poi manipolato.
    Esistono diverse soluzioni in commercio. Nello specifico è stata adottata una scheda che permette molteplici funzionalità fra le quali la possibilità di restituire un segnale digitale da un segnale analogico attraverso l’integrato MCP3002.Scheda con integrato MCP3002
    – scheda con integrato MCP3002
  3. Circuito raddrizzatore di precisione / amplificatore di segnale: L’ingresso che dovrà essere fornito al convertitore AD posizionato sul Raspberry, dovrà essere però in corrente continua (CC), in quanto dovrà essere un segnale stabile. Per ottenere questa trasformazione si deve creare un circuito ad-hoc.
    Il circuito dovrà essere un “Operazionale in configurazione superdiodo o raddrizzatore di precisione”. Il circuito avrà quindi una doppia funzionalità:
    a) come “raddrizzatore di precisione” in quanto raddrizza la semionda fornita dal segnale del trasduttore (current sensor);
    b) come “amplificatore di segnale” in quanto amplifica la tensione di ingresso fino a 3 Volts.
    Per dettagliare maggiormente gli elementi elettronici utilizzati nel circuito, il “Raddrizzatore di precisione”, (o superdiodo) è un elemento circuitale formato da un amplificatore operazionale ed un diodo. La loro combinazione è al fine di avere circuito funzionante da raddrizzatore o da diodo ideale; l’amplificazione di segnale, ottenuta mediante la rete di reazione creata dal potenziometro R2 e dalla resistenza R1 (con rapporto R2/R1) permette di aver maggiore sensibilità di segnale.
    La scelta di questa tipologia di circuito rispetto ad un normale “ponte di Graetz” sta nel seguente aspetto negativo: si ha una caduta di tensione elevata rispetto piccolo valore di tensione che restituisce la PA.

    Raddrizzatore di precisione/amplificatore di segnale

    Raddrizzatore di precisione/amplificatore di segnale

    Schema circuito

    Schema circuito

Il Progetto MED: il software, schema logico e la basedati

Per poter far dialogare tutti gli elementi presenti nel progetto, sono state adottate le seguenti soluzioni software:

  1. Un progetto basedati fatto in SQlite per poter memorizzare tutte le informazioni prelevate e manipolate;
  2. un progetto “python” per poter prelevare le informazioni dal current sensor e trasferirle nella basedati;
  3. un progetto “Apache + php” per poter presentare le informazioni sui vari browser e rendere quindi la soluzione fruibile dalla rete.

schema logico sw

Il DBMS “SQlite” come soluzione basedati

—Ricordiamo che SQLite non è un server e che un database SQLite è costituito da un file binario accessibile direttamente. —Un peculiarità di SQLite è la quasi totale assenza di tipi di dato: non siamo obbligati a specificare il tipo di dato per i campi di una tabella, anche se l’uso dei “data type” rimane una pratica consigliabile, allo scopo di mantenere la compatibilità con altri database.

La struttura dati (ER):

Lo schema ER (Entity Relationship) della struttura db è il seguente:

ER

ER

In cui possiamo vedere tre diverse entità tra di loro collegate “relazionalmente”:

  1. hwd: tabella che memorizza le informazioni generali dell’apparato installato nell’abitazione, questo per poter eventualmente implementare “n” apparati su “n” abitazioni diverse e quindi di associare un codice univoco ad ognuno di essi;
  2. power: tabella che memorizza le informazioni inerenti la rilevazione in tempo reale, aggiornata dal python attraverso la rilevazione effettuata con i current sensor;
  3. total: tabella aggiornata ogni 15 minuti che riporta il totale della produzione / consumo dell’apparato.

La visualizzazione della rilevazione informazioni su mobile

Rilevazione informazioni energetiche in tempo reale

Rilevazione informazioni energetiche del 11/02/2015 ore 15:26

Progetto MED: il software, python per dialogare con le pinze

Per poter prelevare le informazioni dai current sensor e memorizzare le stesse su db, abbiamo utilizzato il python, già descritto nelle “puntate precedenti”.

Nello specifico abbiamo utilizzato il protocollo “SPI”: Serial Peripheral Interface, un protocollo di comunicazione utilizzato per trasferire i dati tra i micro-computer e le periferiche come sensori o attuatori.
—L’utilizzo più comune di quest’interfaccia è il collegamento di microcontrollori e convertitori analogico-digitale o digitale-analogico. In pratica l’SPI è l’interfaccia tra il mondo digitale della Raspberry Pi e quello analogico di moltissimi sensori, servomotori e dispositivi vari.

Fondamentalmente abbiamo utilizzato due programmi:

  1. rile.py: un codice python standard per prelevare le informazioni dal convertitore analogico-digitale MCP3002;
  2. insert_energy.py: attraverso il quale preleviampo ogni 10 secondi l’informazione del current sensor, facciamo delle proporzioni energetiche e memorizziamo il tutto nel db.

rile.py

rile.py: codice

rile.py: codice

Il codice non fa altro che prelevare i 10 bit significativi di ogni canale effettuando degli shift e restituendo l’informazione.

insert_energy.py

insert_energy.py(01): codice

insert_energy.py(01): codice

Successivamente viene racchiuso in un ciclo infinito la lettura delle informazioni dalla pinza con un tempo di ritardo di 10 secondi:
“while true”, ad inizio pagina; “time.sleep(10)”: alla fine del ciclo.
le istruzioni:
– digitalEneProd=rile.get_adc(0);
– digitalEneUsed=rile.get_adc(1);
richiamano il file rile.py ed effettuano il prelievo rispettivamente dalla prima pinza e dalla seconda secondo la modalità descritta precedentemente.

A questo punto vengono effettuate le seguenti conversioni:
anaEneProd = float((3.3 * digitalEneProd)/1023) per convertire da digitale ad analogico.
Viene effettuata questa proporzione in quanto il convertitore Analogico/Digitale fornisce in uscita una stringa di 10 bit, quindi (2^10-1) = (1024-1); essendo il valore massimo di ingresso a 3,3V ed effettuando la proporzione “3,3:1023 = X:digitalEneProd” si ottiene il risultato che verrà memorizzato nella variabile “anaEneProd”.
anaEneProd= float((30 * anaEneProd)/3,3) per convertire il valore ottenuto dalla formula precedente in Ampere.
Viene effettuata questa operazione in quanto il trasduttore ad un valore di 30 Ampere massimo restituisce un valore di 1V.
Con l’amplificazione di segnale ottenuto dalla catena di reazione descritta nella spiegazione dell’hardware, si deve considerare un valore massimo di 3,3 V.
Quindi, come la precedente, si deve effettuare la seguente proporzione: “30:3,3 = X:anaEneProd” ottenendo la formula descritta.
eneProd=str(230 * ampEneProd) per convertire il valore da Ampere in Watt. Questa è una formula basilare dell’ingegneria elettrica13. Il “Volt” è l’unità di misura che indica la “differenza di potenziale” o “potenziale elettrico”. Moltiplicando la differenza di potenziale (espresso in Volt) per l’intensità della corrente (espressa in ampere) si otterrà la potenza (espressa in watt).
Nota:Sarebbe stato meglio avere anche il Voltaggio della rete domestica in “real time” per una maggior precisione ma essendo gli input sul convertitore AD limitati ed avendo nell’abitazione di testing una tensione di buona stabilità misurata intorno ai 230 V per lo scopo del progetto si è considerata questa grandezza come una costante.

memorizzazione informazioni su db: codice

memorizzazione informazioni su db: codice

In seguito effettuiamo una memorizzazione nella tabella power attraverso il codice mostrato in figura ogni 10 secondi.

Progetto MED: il software, struttura sito PHP e script fondamentali

Come descritto in precedenza, per poter visualizzare le informazioni memorizzate su db grazie al codice python, utilizziamo degli script php visualizzati su browser grazie al web server “Apache” installato sul nostro Raspberry Pi.

Viene quindi realizzato un vero e proprio local-site attraverso la seguente struttura memorizzata su sd di Raspberry Pi nella directory “/var/www/med“.

Struttura local-site

Struttura local-site

Come si evince dallo schema, il file “med.db”, evidenziato in rosso, contiene le informazioni aggiornate dal python come visto in precedenza.

Nella struttura è possibile vedere le quattro cartelle fondamentali:
–  /db: contiene la basedati “med.db”, come appena accennato;
–  /include: contiene dei file in “php” utilizzati come classi, metodi e funzioni di supporto all’acquisizione dati;
– /utility: contiene il file JQuerymin.js il quale viene utilizzato per la visualizzazione delle informazioni;
– /img: contenente tutte le immagini

L’entry-point del sito sarà ovviamente “index.html”, il quale che effettua un redirect al file “visual_e.php”, il quale non fa altro che richiamare il file “out_dati.php” ogni 10 secondi, oltre che importare il file “/utility/JQueryMin.js”, un utility fondamentale per la chiamata “AJAX” che serve ad aggiornare solo i dati che variano all’interno della pagina visualizzata su browser.

Analizziamo (abbastanza sommariamente) i seguenti file:

Il file “definedb.php”

define.php: codice

define.php: codice

Il file “definedb.php” non fa altro che creare la classe “myDb” che, attraverso il costruttore, si connette ed apre la basedati “med.db”.

Il file “out_dati.php”

In modalità descrittiva il file “out_dati.php” effetua le seguenti operazioni (per avere il codice sorgente php potete contattarmi attraverso il presente blog).

Il file “out_dati.php” è il cuore dell’applicazione e svolge nel dettaglio i seguenti passi:

  1. effettua un istanza della classe “monitor()” assegnandola a “$myMonitor”, la quale non fa altro che dichiarare una struttura dati nella quale assegnare le informazioni prelevate da “med.db”;
  2. effettua un istanza, all’interno della variabile “$obj”, della classe “checkenergy()”, la quale è composta da dichiarazioni di variabili e metodi che sono all’interno del file “/include/functions.php”;
  3. l’istruzione “$resource=$obj->visual_info_hwd()” va a richiamare una funzione della classe checkenergy attraverso la quale preleva le informazioni del dispositivo memorizzate nella tabella “hwd” vista in precedenza;
  4. l’istruzione “$nowminus10=$obj->slideM(’10’)” permette di memorizzare nella variabile “$nowminus10” l’ora attuale slittata nei 10 minuti precedenti. La funzione “slideM(time)” serve a effettuare il controllo se il dispositivo è in funzione da almeno 10 minuti;
  5. l’istruzione “$myMonitor->get_last_power()”, chiama una funzione fondamentale del monitoring (immagine XX). Quest’ultima effettua tre diverse operazioni:
    a) interroga la tabella “power” nella basedati “med.db” per prelevare l’ultima informazione energetica memorizzata;
    b) effettua delle operazioni sulla tabella di rilevazione per determinare la mediana giornaliera;
    c) effettua delle operazioni sulla tabella di rilevazione (total) per determinare la produzione ed il consumo totale giornaliero;

Inoltre la funzione si avvale di una serie di sottofunzioni che effettuano interrogazioni varie per impostare il formato data e ora nella modalità più idonea e per stabilire a che ora c’è stato il picco giornaliero di produzione e di consumo.

  1. l’istruzione “if(strtotime($myMonitor->a)<=strtotime($nowminus10))” permette di controllare se la rilevazione è in tempo reale o se da almeno 10 minuti è ferma;
  2. le seguenti istruzioni vanno a delineare l’aspetto grafico del box visualizzato: se la prima condizione è esatta, cioè la rilevazione è “off-line”, viene assegnata alla variabile “$bkg” un contorno grigio ed un immagine di “off-line”;
    altrimenti, se la produzione è maggiore del consumo, viene assegnata alla variabile “$bkg” il bordo verde e l’immagine di “produzione”; tale controllo viene effettuato attraverso l’istruzione ” if (($myMonitor->b)>($myMonitor->c))”;
  3. le linee che seguono, non fanno altro che costruire la tabella di uscita e disegnare il box rilevazione. Nell’immagine di MED su mobile vista in precedenza, è evidentemente soddisfatta la relazione “energia prodotta” > “energia consumata”.