- Diagramma a blocchi del misuratore di energia intelligente Raspberry Pi
- Componenti richiesti
- Preparare il Pi
- Schema del circuito del misuratore di energia Pi
- Codice Python per Pi Energy Meter
- Demo
I monitor energetici, sia che coprano l'intero appartamento sia che vengano utilizzati per monitorare un solo elettrodomestico, forniscono un modo per tenere traccia dei consumi e apportare le modifiche necessarie. Mentre stanno diventando sempre più disponibili sul mercato, il produttore che è in me ritiene ancora che sarà una grande idea costruire una versione fai-da-te che potrebbe essere adattata per soddisfare specifiche esigenze personali. Pertanto, per il tutorial di oggi, costruiremo un monitor del consumo di energia Raspberry Pi in grado di ottenere il consumo di energia e caricarlo su Adafruit.io.
Puoi anche controllare il contatore di energia IoT basato su Arduino e il contatore di energia GSM prepagato che abbiamo costruito in precedenza.
Diagramma a blocchi del misuratore di energia intelligente Raspberry Pi
Di seguito è mostrato un diagramma a blocchi che mostra come funziona il sistema.
Scegliere le unità una dopo l'altra;
Unità di rilevamento della corrente: l'unità di rilevamento della corrente è composta dal sensore di corrente SCT -013 che può misurare fino a 100 A, a seconda della versione acquistata. Il sensore trasforma la corrente che passa attraverso il filo su cui è bloccato in una piccola corrente che viene poi immessa nell'ADC tramite una rete di divisori di tensione.
Unità di rilevamento della tensione: anche se non sono stato in grado di mettere le mani su un modulo sensore di tensione, costruiremo un sensore di tensione senza trasformatore fai-da-te che misura la tensione utilizzando il principio dei divisori di tensione. Il sensore di tensione fai-da-te coinvolge lo stadio del partitore di tensione in cui l'alta tensione viene trasformata in un valore adatto per l'ingresso all'ADC.
Unità di elaborazione: l'unità di elaborazione comprende l'ADC e il Raspberry pi. L'ADC prende il segnale analogico e lo invia al raspberry pi, che quindi calcola la quantità esatta di energia consumata e la invia a un dispositivo cloud designato. Ai fini di questo tutorial, utilizzeremo Adafruit.io come il nostro Device Cloud. Ne abbiamo costruiti anche altri
Dichiarazione di non responsabilità: prima di iniziare, è importante ricordare che questo progetto prevede il collegamento a un'alimentazione CA che è pericolosa e potrebbe essere fatale se non gestita in modo sicuro. Assicurati di avere esperienza nel lavorare con AC prima di tentare questo.
Pronto? Immergiamoci.
Componenti richiesti
I seguenti componenti sono necessari per costruire questo progetto;
- Raspberry Pi 3 o 4 (il processo dovrebbe essere lo stesso per RPI2 con un dongle WiFi)
- ADS1115 ADC I2C a 16 bit
- YHDC SCT-013-000
- Adattatore di alimentazione microUSB da 2,5 A 5 V.
- Resistore 2W 10K (1)
- Resistore 1 / 2W 10K (2)
- Resistenza 33ohms (1)
- Resistore 2W 3,3k (1)
- Diodo IN4007 (4)
- Diodo Zener 3,6 v (1)
- Potenziometro 10k (o preimpostato) (1)
- Condensatore 50v 1uf
- Condensatore 50v 10uf (2)
- BreadBoard
- Cavo del ponticello
- Altri accessori per l'utilizzo di Raspberry Pi.
Oltre ai componenti hardware sopra elencati, il progetto richiede anche alcune dipendenze software e librerie che installeremo man mano che andremo avanti.
Mentre questo tutorial funzionerà indipendentemente dal sistema operativo raspberry pi utilizzato, userò il sistema operativo buster Raspberry Pi in esecuzione su un Pi 3 (dovrebbe funzionare anche su un Pi 4) e presumo che tu abbia familiarità con la configurazione del Raspberry Pi con il sistema operativo Raspbian Buster (più o meno lo stesso processo delle versioni precedenti), e sai come eseguire l'accesso SSH utilizzando un software terminale come hyper. Se hai problemi con uno di questi, ci sono tonnellate di tutorial Raspberry Pi su questo sito Web che possono aiutarti
Preparare il Pi
Prima di iniziare a cablare i componenti e la codifica, ci sono alcune semplici attività che dobbiamo eseguire sul raspberry pi per assicurarci di essere pronti per partire.
Passaggio 1: abilitazione del Pi I2C
Al centro del progetto di oggi non c'è solo il raspberry pi, ma l'ADC basato su I2C a 16 bit ADS1115. L'ADC ci consente di collegare sensori analogici al Raspberry Pi poiché il Pi stesso non ha un ADC integrato. Prende i dati tramite il proprio ADC e li inoltra al raspberry pi tramite I2C. Pertanto, dobbiamo abilitare la comunicazione I2C sul Pi in modo che possa comunicare con esso.
Il bus I2C del Pi può essere abilitato o disabilitato tramite la pagina di configurazione del raspberry pi. Per avviarlo, fare clic sull'icona Pi sul desktop e selezionare le preferenze seguite dalla configurazione di Raspberry pi.
Questo dovrebbe aprire la pagina di configurazione. Controlla il pulsante di opzione abilitato per I2C e fai clic su OK per salvarlo e riavviare il Pi per effettuare le modifiche.
Se stai eseguendo il Pi in modalità headless, è possibile accedere alla pagina di configurazione di Raspbian eseguendo sudo raspi-config.
Passaggio 2: installazione della libreria ADS11xx da Adafruit
La seconda cosa che dobbiamo fare è installare la libreria python ADS11xx che contiene funzioni e routine che ci rendono facile scrivere uno script python per recuperare i valori dall'ADC.
Segui i passaggi seguenti per farlo.
- Aggiorna il tuo pi greco eseguendo; sudo apt-get update seguito da sudo apt-get upgrade questo aggiornerà il pi assicurando che non ci siano problemi di compatibilità per qualsiasi nuovo software che scegli di installare.
- Quindi, esegui il comando cd ~ per assicurarti di essere nella directory home.
- Successivamente, installa i build-essentials eseguendo; sudo apt-get install build-essential python-dev python-smbus git
- Quindi, clonare la cartella git di Adafruit contenente la libreria ADS eseguendo; git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Passare alla directory del file clonato ed eseguire il file di installazione utilizzando; cd Adafruit_Python_ADS1x1z seguito da sudo python setup.py install
Fatto ciò, l'installazione dovrebbe essere completata.
È possibile testare l'installazione della libreria collegando ADS1115 come mostrato nella sezione degli schemi di seguito ed eseguire prima il codice di esempio fornito con la libreria, cambiando nella sua cartella usando; cd examples ed eseguire l'esempio utilizzando; python simpletest.py
Passaggio 3: installa il modulo Python Adafruit.IO
Come accennato durante le introduzioni, pubblicheremo le letture dai sensori di tensione e corrente all'Adafruit IO Cloud da cui può essere visualizzato da tutto il mondo o connesso con IFTTT per eseguire qualsiasi azione desideri.
Il modulo python Adafruit.IO contiene subroutine e funzioni su cui faremo leva per trasmettere facilmente i dati al cloud. Attenersi alla procedura seguente per installare il modulo.
- Eseguire il cd ~ per tornare alla directory home.
- Quindi, esegui il comando; sudo pip3 installa adafruit-io . Dovrebbe installare il modulo python IO di Adafruit.
Passaggio 4: imposta il tuo account Adafruit.io
Per utilizzare Adafruit IO sarà sicuramente necessario prima creare un account e ottenere una chiave AIO. Questa chiave AIO insieme al tuo nome utente verrà utilizzata dal tuo script Python per accedere al servizio cloud Adafruit IO. Per creare un account, visita; https://io.adafruit.com/, fai clic sul pulsante inizia gratuitamente e inserisci tutti i parametri richiesti. Una volta completata la registrazione, dovresti vedere il pulsante Visualizza chiave AIO sulla destra della tua home page.
Fare clic su di esso per ottenere la chiave AIO.
Con la chiave copiata, siamo pronti per partire. Tuttavia, per semplificare il processo di invio dei dati al servizio cloud, è anche possibile creare i feed a cui verranno inviati i dati. (maggiori informazioni su cosa sono i feed AIO possono essere trovate qui). Poiché fondamentalmente invieremo il consumo di energia, creeremo un feed per il potere. Per creare un feed, fare clic su "feed" nella parte superiore della pagina AIO e fare clic su aggiungi nuovo feed.
Dagli il nome che vuoi ma per mantenere le cose semplici, lo chiamerò consumo di energia. Puoi anche decidere di creare feed per tensione e corrente e adattare il codice per pubblicare i dati su di essi.
Con tutto questo in atto, ora siamo pronti per iniziare a costruire il progetto.
Schema del circuito del misuratore di energia Pi
Lo schema per il progetto Raspberry Pi Energy Monitor è relativamente complesso e prevede il collegamento a una tensione CA come accennato in precedenza, assicurarsi gentilmente di prendere tutte le precauzioni necessarie per evitare scosse elettriche. Se non hai familiarità con la gestione sicura delle tensioni CA, lascia che la gioia di implementarla su una breadboard, senza alimentarla, sia soddisfacente.
Gli schemi comportano il collegamento dei sensori di tensione e corrente all'ADC che quindi invia i dati dai sensori al Raspberry Pi. Per rendere i collegamenti più facili da seguire, gli schemi di ciascuna unità vengono presentati singolarmente.
Schema del sensore di corrente
Collegare i componenti per il sensore di corrente come mostrato negli schemi seguenti.
Il trasformatore di corrente utilizzato in questo progetto è mostrato di seguito, come puoi vedere abbiamo tre fili da esso, vale a dire terra, Cout e 3.3V
Schemi del sensore di tensione
Collegare i componenti per il sensore di tensione come mostrato negli schemi seguenti.
Schemi dell'unità di elaborazione
Collegare il tutto insieme all'ADC (ADS1115) collegato al raspberry pi e all'uscita dei sensori di corrente e tensione collegati rispettivamente ai pin A0 e A1 dell'ADS1115.
Assicurati che i pin GND di entrambe le unità di rilevamento siano collegati al GND dell'ADC o al raspberry pi.
Per rendere le cose un po 'meno traballanti, ho implementato i sensori di tensione e corrente su una Protoboard. Inoltre, non è consigliabile costruire un circuito di rete CA sulla breadboard. Se fai lo stesso, la configurazione finale potrebbe essere simile all'immagine qui sotto;
Con le connessioni completate, ora siamo pronti per scrivere il codice per il progetto.
Codice Python per Pi Energy Meter
Come al solito con i nostri progetti raspberry pi, svilupperemo il codice per il progetto usando python. Fare clic sull'icona raspberry pi sul desktop, selezionare la programmazione e avviare la versione di python che si desidera utilizzare. Userò Python 3 e alcune delle funzioni in Python 3 potrebbero non funzionare per Python 2.7. Quindi potrebbe essere necessario apportare alcune modifiche significative al codice se si desidera utilizzare python 2.7. Farò una suddivisione del codice in piccoli frammenti e condividerò il codice completo con te alla fine.
Pronto? Freddo.
L'algoritmo alla base del codice è semplice. Il nostro script Python interroga l'ADS1115 (su I2C) per le letture di tensione e corrente. Il valore analogico ricevuto viene ricevuto, campionato e si ottiene il valore quadratico medio radice della tensione e della corrente. La potenza in kilowatt viene calcolata e inviata all'alimentazione IO di Adafruit dopo intervalli specifici.
Iniziamo lo script includendo tutte le librerie che useremo. Ciò include le librerie integrate come la libreria time and math e le altre librerie installate in precedenza.
import time import Adafruit_ADS1x15 da Adafruit_IO import * import math
Successivamente, creiamo un'istanza della libreria ADS1115 che verrà utilizzata per indirizzare l'ADC fisico in futuro.
# Crea un'istanza ADS1115 ADC (16 bit).. adc1 = Adafruit_ADS1x15.ADS1115 ()
Successivamente, fornisci il tuo nome utente IO adafruit e la chiave "AIO".
username = 'inserisci il tuo nome utente tra queste virgolette' AIO_KEY = 'la tua chiave aio ' aio = Client (username, AIO_KEY)
Tieni la chiave al sicuro. Può essere utilizzato per accedere al tuo account adafruit io senza il tuo permesso.
Successivamente, creiamo alcune variabili come il guadagno per l'ADC, il numero di campioni che vogliamo e impostiamo l'arrotondamento che sicuramente non è critico.
GAIN = 1 # vedere la documentazione ads1015 / 1115 per i valori potenziali. campioni = 200 # numero di campioni presi da ads1115 posti = int (2) # imposta arrotondamento
Successivamente, creiamo un ciclo while per monitorare la corrente e la tensione e inviare i dati a Adafruit io a intervalli. Il ciclo while inizia impostando tutte le variabili a zero.
while True: # resetta le variabili count = int (0) datai = datav = maxIValue = 0 #max valore corrente nel campione maxVValue = 0 #max valore tensione nel campione IrmsA0 = 0 #root mean square current VrmsA1 = 0 # root mean square voltage ampA0 = 0 # volt di picco corrente A1 = 0 # voltaggio kilowatt = float (0)
Poiché stiamo lavorando con circuiti CA, l'uscita di SCT-013 e il sensore di tensione sarà un'onda sinusoidale, quindi per calcolare la corrente e la tensione dall'onda sinusoidale, avremo bisogno di ottenere i valori di picco. Per ottenere i valori di picco, campioneremo sia la tensione che la corrente (200 campioni) e troveremo i valori più alti (valori di picco).
per conteggio nell'intervallo (campioni): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN))))) # controlla se hai un nuovo maxValue print (datai) if datai> maxIValue: maxIValue = datai if datav> maxVValue: maxVValue = datav
Successivamente, standardizziamo i valori convertendoli dai valori ADC al valore effettivo, dopodiché utilizziamo l'equazione quadratica media radice per trovare la tensione e la corrente RMS.
# calcola la corrente utilizzando i dati campionati # lo sct-013 in uso è calibrato per un'uscita di 1000 mV a 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0, places) ampA0 = IrmsA0 / math.sqrt (2) ampA0 = round (ampA0, places) # Calcola la tensione VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = round (VrmsA1, places) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = round (voltsA1, places) print ('Voltage: {0}'. format (voltsA1)) print ('Current: {0} '. Formato (ampsA0))
Fatto ciò, la potenza viene calcolata e i dati vengono pubblicati su adafruit.io
#calculate power power = round (ampA0 * voltsA1, places) print ('Power: {0}'. format (power)) #post data to adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', potere)
Per gli account gratuiti, adafruit richiede che ci sia un certo ritardo tra le richieste o il caricamento dei dati.
# Attendi prima di ripetere il ciclo time.sleep (0)
Il codice completo del progetto è disponibile in fondo a questa pagina
Demo
Con il codice completo, salvalo e premi il pulsante Esegui sull'IDE Python. Prima di questo, assicurati che il Pi sia connesso a Internet tramite WiFi o LAN e che la tua chiave aio e il nome utente siano corretti. Dopo un po ', dovresti iniziare a vedere i dati energetici (potenza) visualizzati nel feed su Adafruit.io. La mia configurazione hardware durante la demo era così
Per andare oltre, puoi creare una dashboard su adafruit.io e aggiungere un componente grafico in modo da poter ottenere una visualizzazione grafica dei dati come mostrato nell'immagine sottostante.
È tutto ragazzi, ora puoi monitorare il tuo consumo energetico da qualsiasi parte del mondo. È importante notare che c'è sicuramente molto più messa a punto e calibrazioni da fare per trasformarlo in una soluzione davvero accurata, ma credo che questo ti dia quasi tutto ciò di cui hai bisogno per procedere.
Sentiti libero di farmi domande sul progetto tramite la sezione commenti. Cercherò di rispondere al maggior numero possibile. Fino alla prossima volta.