- Diagrama de blocs del comptador d’energia intel·ligent Raspberry Pi
- Components necessaris
- Preparant el Pi
- Diagrama del circuit del comptador d'energia Pi
- Codi Python per al mesurador d'energia Pi
- Demostració
Els monitors d’energia, ja sigui que cobreixin tot l’apartament o estiguin desplegats per supervisar només un aparell, us proporcionen una manera de fer un seguiment del vostre consum i fer els ajustos necessaris. Tot i que cada vegada estan més disponibles al mercat, el fabricant de mi encara sent que serà una gran idea construir una versió de bricolatge que es pugui adaptar a les necessitats personals específiques. Com a tal, per al tutorial d’avui, crearem un monitor de consum d’energia Raspberry Pi capaç d’obtenir consum d’energia i carregar-lo a Adafruit.io.
També podeu consultar el mesurador d’energia IoT basat en Arduino i el mesurador d’energia GSM prepagat que hem construït anteriorment.
Diagrama de blocs del comptador d’energia intel·ligent Raspberry Pi
A continuació es mostra un diagrama de blocs que mostra el funcionament del sistema.

Triar les unitats una darrere l’altra;
Unitat de detecció de corrent: la unitat de detecció de corrent es compon del sensor de corrent SCT -013 que pot mesurar fins a 100 A, segons la versió que compreu. El sensor transforma el corrent que passa pel cable sobre el qual està fixat en un petit corrent que després s’alimenta a l’ADC a través d’una xarxa de divisors de tensió.
Unitat de detecció de tensió: tot i que no vaig poder posar les mans sobre un mòdul de sensor de tensió, construirem un bricolatge, un sensor de tensió sense transformador que mesuri la tensió mitjançant el principi dels divisors de tensió. El sensor de tensió de bricolatge consisteix en l’etapa de divisió de tensió on l’alt voltatge es transforma en un valor adequat per a l’entrada a l’ADC.
Unitat de processament: la unitat de processament comprèn l'ADC i el Raspberry pi. L’ADC agafa el senyal analògic i l’envia al raspberry pi, que calcula la quantitat exacta d’energia que es consumeix i l’envia a un núvol de dispositiu designat. Als efectes d’aquest tutorial, utilitzarem Adafruit.io com a Cloud de dispositius. També n'hem construït d'altres
Exempció de responsabilitat: Abans de començar, és important esmentar que aquest projecte implica la connexió a un subministrament de corrent altern que és perillós i pot resultar mortal si no es maneja amb seguretat. Assegureu-vos que tingueu experiència treballant amb AC abans d’intentar-ho.
A punt? Anem a bussejar.
Components necessaris
Els components següents són necessaris per construir aquest projecte;
- Raspberry Pi 3 o 4 (el procés hauria de ser el mateix per al RPI2 amb un dongle WiFi)
- ADS1115 ADC I2C de 16 bits
- YHDC SCT-013-000
- Adaptador d'alimentació MicroUSB 2,5A 5V
- Resistència 2W 10K (1)
- 1 / 2W 10K resistència (2)
- Resistència de 33 ohms (1)
- Resistència de 2W 3,3k (1)
- Diodo IN4007 (4)
- Diodo Zener de 3,6 v (1)
- Potenciòmetre (o predefinit) de 10 k (1)
- Condensador de 50v 1uf
- Condensador de 50v 10uf (2)
- BreadBoard
- Jumper Wire
- Altres accessoris per a l'ús de Raspberry Pi.
A part dels components de maquinari esmentats anteriorment, el projecte també requereix algunes biblioteques i dependències de programari que instal·larem a mesura que avancem.
Tot i que aquest tutorial funcionarà independentment del sistema operatiu raspberry pi utilitzat, faré servir el sistema operatiu buster de Raspberry Pi que s’executa en un Pi 3 (també hauria de funcionar en un Pi 4) i suposo que esteu familiaritzat amb la configuració de Raspberry Pi amb el sistema operatiu Raspbian Buster (pràcticament el mateix procés que les versions anteriors), i ja sabeu com fer-ho mitjançant SSH mitjançant un programari de terminal com hyper. Si teniu problemes amb això, hi ha un munt de tutorials de Raspberry Pi en aquest lloc web que us poden ajudar
Preparant el Pi
Abans de començar a connectar els components i codificar, hi ha algunes tasques senzilles que hem de realitzar al raspberry pi per assegurar-nos que estem preparats.
Pas 1: habilitació del Pi I2C
El nucli del projecte actual no és només el raspberry pi, sinó l’ADC basat en I2C de 16 bits ADS1115. L’ADC ens permet connectar sensors analògics al Raspberry Pi, ja que el Pi no té un ADC integrat. Agafa les dades a través del seu propi ADC i les reenvia al raspberry pi mitjançant I2C. Com a tal, hem d’habilitar la comunicació I2C al Pi perquè pugui comunicar-s’hi.
El bus I2C del Pi es pot habilitar o desactivar mitjançant la pàgina de configuració del raspberry pi. Per iniciar-lo, feu clic a la icona Pi de l'escriptori i seleccioneu les preferències seguides de la configuració de Raspberry pi.

Això hauria d'obrir la pàgina de configuració. Comproveu el botó d'opció habilitat per a l'I2C i feu clic a D'acord per desar-lo i reinicieu el Pi per efectuar els canvis.

Si esteu executant el Pi en mode sense cap, es pot accedir a la pàgina de configuració de Raspbian executant sudo raspi-config.
Pas 2: Instal·lació de la biblioteca ADS11xx des d'Adafruit
El segon que hem de fer és instal·lar la biblioteca python ADS11xx que conté funcions i rutines que ens faciliten l’escriptura d’un script python per obtenir valors de l’ADC.
Seguiu els passos següents per fer-ho.
- Actualitzeu el vostre pi executant; sudo apt-get update seguit de sudo apt-get upgrade , s'actualitzarà el pi garantint que no hi hagi problemes de compatibilitat per a cap programari nou que trieu instal·lar.
- A continuació, executeu l' ordre cd ~ per assegurar-vos que esteu al directori inicial.
- A continuació, instal·leu els build-essentials executant; sudo apt-get install build-essential python-dev python-smbus git
- A continuació, cloneu la carpeta git Adafruit que conté la biblioteca ADS executant; git clon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Canvieu al directori del fitxer clonat i executeu el fitxer de configuració amb; cd Adafruit_Python_ADS1x1z seguit de sudo python setup.py install
Amb això fet, la instal·lació hauria de completar-se.
Podeu provar la instal·lació de la biblioteca connectant l'ADS1115 tal com es mostra a la secció esquemàtica següent i executar el codi de mostra que s'inclou amb la biblioteca primer, canviant a la seva carpeta mitjançant; exemples de cd i executant l'exemple amb; python simpletest.py
Pas 3: Instal·leu el mòdul Adafruit.IO Python
Com es va esmentar durant les presentacions, publicarem lectures dels sensors de tensió i corrent a Adafruit IO Cloud des de la qual es pot veure des de tot el món o connectar-se amb IFTTT per realitzar les accions que desitgeu.
El mòdul Adafruit.IO python conté subrutines i funcions que aprofitarem per transmetre fàcilment dades al núvol. Seguiu els passos següents per instal·lar el mòdul.
- Executeu el CD ~ per tornar al directori inicial.
- A continuació, executeu l'ordre; sudo pip3 instal·la adafruit-io . Hauria d’instal·lar el mòdul Adafruit IO python.
Pas 4: configureu el vostre compte d'Adafruit.io
Per utilitzar Adafruit IO definitivament haurà de crear un compte i obtenir una clau AIO. Aquesta clau AIO juntament amb el vostre nom d’usuari l’utilitzarà el vostre script python per accedir al servei en núvol Adafruit IO. Per crear un compte, visiteu; https://io.adafruit.com/, feu clic al botó d'inici gratuït i empleneu tots els paràmetres necessaris. Amb el registre completat, hauríeu de veure el botó Visualitza la clau AIO a la dreta de la pàgina d'inici.

Feu-hi clic per obtenir la vostra clau AIO.

Amb la clau copiada, ja estem a punt. Tot i això, per facilitar el procés d’enviament de dades al servei al núvol, també podeu crear els canals d'informació a què s'enviaran les dades. (Podeu trobar més informació sobre els feeds AIO aquí). Com que bàsicament enviarem consum d'energia, crearem una font d'alimentació. Per crear un canal d'informació, feu clic a "canals d'informació" a la part superior de la pàgina AIO i feu clic a Afegeix un canal d'informació nou.
Poseu-li el nom que vulgueu, però per simplificar les coses, l'anomenaré consum d'energia. També podeu decidir crear canals de tensió i corrent i adaptar el codi per publicar-hi dades.
Amb tot això al seu lloc, ara estem preparats per començar a construir el projecte.
Diagrama del circuit del comptador d'energia Pi
Els esquemes del projecte Raspberry Pi Energy Monitor són relativament complexos i consisteixen a connectar-se a una tensió de corrent altern com s’ha esmentat anteriorment. Assegureu-vos de prendre totes les precaucions necessàries per evitar descàrregues elèctriques. Si no esteu familiaritzat amb la manipulació segura de tensions de corrent altern, deixeu que l’alegria d’implementar-la en una placa de configuració sense alimentar-la sigui satisfactòria.
Els esquemes consisteixen a connectar la unitat de sensors de tensió i corrent a l'ADC, que després envia les dades dels sensors al Raspberry Pi. Per fer les connexions més fàcils de seguir, els esquemes de cada unitat es presenten sols.
Esquema del sensor de corrent
Connecteu els components del sensor actual tal com es mostra als esquemes següents.

El transformador de corrent utilitzat en aquest projecte es mostra a continuació, com podeu veure, en tenim tres cables, a terra, Cout i 3,3 V

Esquemes del sensor de tensió
Connecteu els components del sensor de tensió tal com es mostra als esquemes següents.

Unitat de processament Esquemes
Connecteu-ho tot junt amb l'ADC (ADS1115) connectat al raspberry pi i la sortida dels sensors de corrent i tensió connectats als pins A0 i A1 de l'ADS1115 respectivament.

Assegureu-vos que els passadors GND de les dues unitats de detecció estan connectats al GND de l’ADC o al raspberry pi.
Per fer les coses una mica menys inestables, vaig implementar els sensors de tensió i corrent en un Protoboard. A més, no es recomana crear un circuit de corrent altern a la placa de control. Si feu el mateix, la vostra configuració final pot semblar la imatge següent;

Amb les connexions completes, ja estem preparats per escriure el codi del projecte.
Codi Python per al mesurador d'energia Pi
Com és habitual amb els nostres projectes de raspberry pi, desenvoluparem el codi per al projecte mitjançant python. Feu clic a la icona de raspberry pi a l'escriptori, seleccioneu la programació i inicieu la versió de python que vulgueu utilitzar. Faré servir Python 3 i és possible que algunes de les funcions de Python 3 no funcionin per a Python 2.7. Per tant, pot ser que calgui fer algun canvi significatiu al codi si voleu utilitzar Python 2.7. Faré un desglossament del codi en petits fragments i compartiré el codi complet amb vosaltres al final.
A punt? Guai.
L’algorisme darrere del codi és senzill. El nostre script Python consulta l’ADS1115 (sobre I2C) per obtenir lectures de tensió i corrent. Es rep el valor analògic rebut, es mostra i es obté el valor quadrat mitjà de la tensió i del corrent. La potència en quilowatts es calcula i s’envia a l’alimentació d’Adafruit IO després d’intervals específics.
Comencem el script incloent totes les biblioteques que farem servir. Això inclou biblioteques integrades, com ara la biblioteca de temps i matemàtiques, i la resta de biblioteques que hem instal·lat anteriorment.
temps d' importació importació Adafruit_ADS1x15 d'Adafruit_IO import * import matemàtiques
A continuació, creem una instància de la biblioteca ADS1115 que s'utilitzarà per abordar l'ADC físic en el futur.
# Creeu una instància ADS1115 ADC (16 bits).. adc1 = Adafruit_ADS1x15.ADS1115 ()
A continuació, proporcioneu el vostre nom d’usuari d’Adafruit IO i la clau “AIO”.
nom d'usuari = 'introduïu el vostre nom d'usuari entre aquestes cometes' AIO_KEY = 'la vostra clau aio ' aio = Client (nom d'usuari, AIO_KEY)
Mantingueu la clau segura. Es pot utilitzar per accedir al vostre compte adafruit io sense el vostre permís.
A continuació, creem algunes variables com el guany per l'ADC, el nombre de mostres que volem i establim l'arrodoniment que definitivament no és crític.
GAIN = 1 # veure documentació ads1015 / 1115 per obtenir valors potencials. samples = 200 # nombre de mostres preses de ads1115 places = int (2) # arrodoniment definit
A continuació, creem un bucle de temps per controlar el corrent i el voltatge i enviar les dades a Adafruit io a intervals. El bucle while comença establint totes les variables a zero.
mentre és cert: # restabliment de les variables count = int (0) datai = datav = maxIValue = 0 #valor actual màxim dins de la mostra maxVValue = 0 #valor de tensió màxima dins de la mostra IrmsA0 = 0 #arrel corrent mitjà VrmsA1 = 0 # tensió quadrada ampsA0 = 0 # volts màxims actuals A1 = 0 # quilowatts de tensió = flotant (0)
Com que estem treballant amb circuits de corrent altern, la sortida de SCT-013 i el sensor de tensió seran una ona sinusoïdal, per tant, per calcular el corrent i el voltatge de l’ona sinusoïdal, haurem d’obtenir els valors màxims. Per obtenir els valors de pic, mostrarem tant el voltatge com el corrent (200 mostres) i trobarem els valors més alts (valors de pic).
per al recompte en l'interval (mostres): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # veure si teniu una nova impressió maxValue (datai) si datai> maxIValue: maxIValue = datai si datav> maxVValue: maxVValue = datav
A continuació, estandarditzem els valors mitjançant la conversió dels valors ADC al valor real, després del qual utilitzem l’equació del quadrat de la mitjana arrel per trobar el voltatge i el corrent RMS.
#calcula el corrent mitjançant les dades mostrejades # el sct-013 que s’utilitza està calibrat per a una sortida de 1000 mV @ 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0, places) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0, places) # Calcula la tensió VrmsA1 = float (maxValue * 1100 / float (2047)) VrmsA1 = round (VrmsA1, places) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = round (voltsA1, places) print ('Voltage: {0}'. format (voltsA1)) print ('Current: Format {0} '. (AmpsA0))
Amb això, es calcula la potència i es publiquen les dades a adafruit.io
#calculate power power = round (ampsA0 * voltsA1, places) print ('Power: {0}'. format (power)) #post data to adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', potència)
Per als comptes gratuïts, adafruit demana que hi hagi un retard de temps entre les sol·licituds o la càrrega de dades.
# Espereu abans de repetir el bucle time.sleep (0)
El codi complet del projecte està disponible a la part inferior d’aquesta pàgina
Demostració
Amb el codi complet, deseu-lo i premeu el botó d'execució de l'IDE de Python. Abans d’això, assegureu-vos que el Pi estigui connectat a Internet mitjançant WiFi o LAN i que la vostra clau aio i el vostre nom d’usuari siguin correctes. Al cap d’un temps, hauríeu de començar a veure les dades d’energia (potència) que es mostren al feed a Adafruit.io. La meva configuració de maquinari durant la demostració va ser així

Per anar més enllà, podeu crear un tauler a adafruit.io i afegir un component gràfic perquè pugueu obtenir una vista gràfica de les dades tal com es mostra a la imatge següent.

Ja està, nois, ara podeu controlar el vostre consum d'energia des de qualsevol part del món. És important tenir en compte que definitivament hi ha molt més ajustament i calibratge que cal fer per transformar-lo en una solució realment precisa, però crec que això us proporciona gairebé tot el que necessiteu per continuar.

No dubteu a fer-me preguntes sobre el projecte a través de la secció de comentaris. Intentaré respondre al màxim possible. Fins la propera.
