- Diagrama blocului contorului de energie inteligent Raspberry Pi
- Componente necesare
- Pregătirea Pi
- Diagrama circuitului contorului de energie Pi
- Cod Python pentru contorul de energie Pi
- Demo
Monitoarele de energie, indiferent dacă acoperă întregul apartament sau sunt instalate pentru a monitoriza un singur aparat, vă oferă o modalitate de a vă urmări consumul și de a face ajustările necesare. În timp ce acestea devin din ce în ce mai disponibile pe piață, producătorul din mine consideră că va fi o idee minunată să construiți o versiune DIY care să poată fi adaptată pentru a satisface cerințele personale specifice. Ca atare, pentru tutorialul de astăzi, vom construi un monitor Raspberry Pi Consum de energie capabil să obțină consumul de energie și să îl încarce pe Adafruit.io.
Puteți verifica, de asemenea, contorul de energie IoT bazat pe Arduino și contorul de energie GSM preplătit pe care le-am construit mai devreme.
Diagrama blocului contorului de energie inteligent Raspberry Pi
O diagramă bloc care arată cum funcționează sistemul este prezentată mai jos.
(…)A alege unitățile una după alta;
Unitate de detectare a curentului: Unitatea de detectare a curentului este alcătuită din senzorul de curent SCT -013 care poate măsura până la 100A, în funcție de versiunea pe care o cumpărați. Senzorul transformă curentul care trece prin firul pe care este prins într-un curent mic care este apoi alimentat în ADC printr-o rețea de divizoare de tensiune.
Unitate de detectare a tensiunii: În timp ce nu am putut pune mâinile pe un modul de senzor de tensiune, vom construi un DIY un senzor de tensiune fără transformator care măsoară tensiunea folosind principiul divizoarelor de tensiune. Senzorul de tensiune DIY implică etapa divizorului de tensiune în care tensiunea înaltă este transformată într-o valoare adecvată pentru intrarea în ADC.
Unitate de procesare: Unitatea de procesare cuprinde ADC și Raspberry pi. ADC preia semnalul analogic și îl trimite către zmeura pi, care apoi calculează cantitatea exactă de energie consumată și îl trimite către un cloud de dispozitiv desemnat. În scopul acestui tutorial, vom folosi Adafruit.io ca dispozitiv Cloud. Am construit și altele
Declinare de responsabilitate: Înainte de a începe, este important să menționăm că acest proiect implică conectarea la o sursă de curent alternativ care este periculoasă și ar putea fi fatală dacă nu este manipulată în siguranță. Asigurați-vă că aveți experiență în lucrul cu AC înainte de a încerca acest lucru.
Gata? Hai să ne scufundăm.
Componente necesare
Următoarele componente sunt necesare pentru a construi acest proiect;
- Raspberry Pi 3 sau 4 (procesul ar trebui să fie același pentru RPI2 cu un Dongle WiFi)
- ADS1115 16 biți I2C ADC
- YHDC SCT-013-000
- Adaptor de alimentare MicroUSB 2,5A 5V
- Rezistor 2W 10K (1)
- Rezistor 1 / 2W 10K (2)
- Rezistor de 33 ohmi (1)
- Rezistor 2W 3.3k (1)
- Diodă IN4007 (4)
- Diodă Zener 3.6v (1)
- Potențiometru 10k (sau presetat) (1)
- 50v 1uf Condensator
- Condensator 50v 10uf (2)
- BreadBoard
- Jumper Wire
- Alte accesorii pentru utilizarea Raspberry Pi.
În afară de componentele hardware enumerate mai sus, proiectul necesită și unele dependențe de software și biblioteci pe care le vom instala pe măsură ce vom continua.
În timp ce acest tutorial va funcționa indiferent de sistemul de operare raspberry pi utilizat, voi folosi sistemul de operare Raspberry Pi care rulează pe un Pi 3 (ar trebui să funcționeze și pe un Pi 4) și voi presupune că sunteți familiarizat cu configurarea Raspberry Pi cu sistemul de operare Raspbian Buster (cam același proces ca și versiunile anterioare) și știi cum să SSH în el folosind un software terminal ca hyper. Dacă aveți probleme cu oricare dintre acestea, există o mulțime de tutoriale Raspberry Pi pe acest site web care vă pot ajuta
Pregătirea Pi
Înainte de a începe să conectăm componentele și codificarea, există câteva sarcini simple pe care trebuie să le îndeplinim pe raspberry pi pentru a ne asigura că suntem gata de pornire.
Pasul 1: Activarea Pi I2C
La baza proiectului de astăzi se află nu doar raspberry pi, ci ADC-ul ADS1115 pe 16 biți, bazat pe I2C. ADC ne permite să conectăm senzori analogici la Raspberry Pi, deoarece Pi în sine nu are un ADC încorporat. Prinde datele prin ADC propriu și le transmite către raspberry pi prin I2C. Ca atare, trebuie să activăm comunicarea I2C pe Pi, astfel încât să poată comunica cu acesta.
Autobuzul I2C al lui Pi poate fi activat sau dezactivat prin pagina de configurare a raspberry pi. Pentru ao lansa, faceți clic pe pictograma Pi de pe desktop și selectați preferințele urmate de configurația Raspberry pi.
Aceasta ar trebui să deschidă pagina de configurare. Verificați butonul radio activat pentru I2C și faceți clic pe OK pentru a-l salva și reporniți Pi pentru a efectua modificările.
Dacă rulați Pi în modul fără cap, pagina de configurare Raspbian poate fi accesată executând sudo raspi-config.
Pasul 2: Instalarea bibliotecii ADS11xx de la Adafruit
Al doilea lucru pe care trebuie să-l facem este să instalăm biblioteca ADS11xx python care conține funcții și rutine care ne facilitează scrierea unui script python pentru a prelua valori din ADC.
Urmați pașii de mai jos pentru a face acest lucru.
- Actualizați-vă pi rulând; sudo apt-get update urmat de sudo apt-get upgrade acesta va actualiza pi-ul asigurându-vă că nu există probleme de compatibilitate pentru niciun software nou pe care alegeți să îl instalați.
- Apoi, executați comanda cd ~ pentru a vă asigura că vă aflați în directorul principal.
- Apoi, instalați esențialele de construire rulând; sudo apt-get install build-essential python-dev python-smbus git
- Apoi, clonați folderul Adafruit git care conține biblioteca ADS rulând; git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Treceți în directorul fișierului clonat și rulați fișierul de configurare folosind; cd Adafruit_Python_ADS1x1z urmat de sudo python setup.py install
După ce s-a făcut, instalarea ar trebui să fie completă.
Puteți testa instalarea bibliotecii conectând ADS1115 așa cum se arată în secțiunea schemelor de mai jos și rulați exemplul de cod care a venit împreună cu biblioteca mai întâi, schimbându-l în folderul său folosind; exemple de cd și rularea exemplului folosind; python simpletest.py
Pasul 3: Instalați modulul Adafruit.IO Python
După cum sa menționat în timpul introducerilor, vom publica citiri de la senzorii de tensiune și curent pe Adafruit IO Cloud de la care poate fi vizualizat din întreaga lume sau conectat cu IFTTT pentru a efectua orice acțiuni doriți.
Modulul Adafruit.IO python conține subrutine și funcții pe care le vom folosi pentru a transmite cu ușurință datele în cloud. Urmați pașii de mai jos pentru a instala modulul.
- Rulați cd ~ pentru a reveni la directorul de start.
- Apoi, executați comanda; sudo pip3 instalează adafruit-io . Ar trebui să instaleze modulul Adafruit IO python.
Pasul 4: Configurați-vă contul Adafruit.io
Pentru a utiliza Adafruit IO va trebui cu siguranță să creați mai întâi un cont și să obțineți o cheie AIO. Această cheie AIO împreună cu numele dvs. de utilizator vor fi folosite de scriptul dvs. python pentru a accesa serviciul cloud Adafruit IO. Pentru a crea un cont, vizitați; https://io.adafruit.com/, faceți clic pe butonul de început gratuit și completați toți parametrii necesari. Cu Înregistrare completă, ar trebui să vedeți butonul Vizualizați cheia AIO din partea dreaptă a paginii dvs. de pornire.
Faceți clic pe acesta pentru a obține cheia AIO.
Cu cheia copiată, suntem gata de plecare. Totuși, pentru a facilita procesul de trimitere a datelor către serviciul cloud, puteți crea și fluxurile către care vor fi trimise datele. (mai multe informații despre fluxurile AIO pot fi găsite aici). Întrucât practic vom trimite consumul de energie, vom crea un feed pentru energie. Pentru a crea un flux, faceți clic pe „fluxuri” în partea de sus a paginii AIO și faceți clic pe adăugați un flux nou.
Dați-i orice nume doriți, dar pentru a simplifica lucrurile, îl voi numi consum de energie. Puteți decide, de asemenea, să creați fluxuri de tensiune și curent și să adaptați codul pentru a le publica date.
Cu toate acestea la locul lor, suntem acum gata să începem construirea proiectului.
Diagrama circuitului contorului de energie Pi
Schemele pentru proiectul Raspberry Pi Energy Monitor sunt relativ complexe și implică conectarea la o tensiune de curent alternativ, așa cum am menționat anterior, asigurați-vă că luați toate măsurile de precauție necesare pentru a evita șocurile electrice. Dacă nu sunteți familiarizați cu manipularea în siguranță a tensiunilor de curent alternativ, lăsați bucuria de a implementa acest lucru pe o placă de calcul, fără a o alimenta, să fie satisfăcătoare.
Schemele implică conectarea unității senzorilor de tensiune și curent la ADC, care apoi trimite datele de la senzori la Raspberry Pi. Pentru a face conexiunile mai ușor de urmărit, schemele pentru fiecare unitate sunt prezentate singure.
Schema senzorului de curent
Conectați componentele pentru senzorul de curent așa cum se arată în schemele de mai jos.
Transformatorul de curent utilizat în acest proiect este prezentat mai jos, după cum puteți vedea, avem trei fire din acesta, și anume masă, Cout și 3.3V
Schema senzorului de tensiune
Conectați componentele pentru senzorul de tensiune așa cum se arată în schemele de mai jos.
Unitatea de procesare Scheme
Conectați totul împreună cu ADC (ADS1115) conectat la raspberry pi și la ieșirea senzorilor de curent și tensiune conectați la pinii A0 și respectiv A1 ai ADS1115.
Asigurați-vă că pinii GND ai ambelor unități de detectare sunt conectați la GND al ADC sau pi zmeură.
Pentru a face lucrurile puțin mai puțin tremurate, am implementat senzorii de tensiune și curent pe un Protoboard. De asemenea, nu este recomandat să construiți un circuit de rețea de curent alternativ pe placa. Dacă procedați la fel, configurarea dvs. finală ar putea arăta ca imaginea de mai jos;
Cu conexiunile terminate, suntem acum gata să scriem codul pentru proiect.
Cod Python pentru contorul de energie Pi
Ca de obicei cu proiectele noastre de raspberry pi, vom dezvolta codul proiectului folosind python. Faceți clic pe pictograma raspberry pi de pe desktop, selectați programarea și lansați orice versiune de python doriți să utilizați. Voi folosi Python 3 și este posibil ca unele dintre funcțiile din Python 3 să nu funcționeze pentru Python 2.7. Deci, ar putea fi necesară modificarea semnificativă a codului dacă doriți să utilizați python 2.7. Voi face o defalcare a codului în fragmente mici și vă voi împărtăși codul complet la final.
Gata? Misto.
Algoritmul din spatele codului este simplu. Scriptul nostru Python interogă ADS1115 (peste I2C) pentru citiri de tensiune și curent. Se recepționează valoarea analogică primită, eșantionată și se obține valoarea pătrată medie a rădăcinii tensiunii și curentului. Puterea în kilowați este calculată și trimisă la alimentarea Adafruit IO după intervale specifice.
Începem scriptul prin includerea tuturor bibliotecilor pe care le vom folosi. Aceasta include bibliotecile încorporate, cum ar fi biblioteca de timp și matematică și celelalte biblioteci pe care le-am instalat anterior.
import timp import Adafruit_ADS1x15 din Adafruit_IO import * import matematică
Apoi, creăm o instanță a bibliotecii ADS1115 care va fi utilizată pentru a aborda ADC fizic în viitor.
# Creați o instanță ADS1115 ADC (16 biți).. adc1 = Adafruit_ADS1x15.ADS1115 ()
Apoi, furnizați numele de utilizator IO adafruit și cheia „AIO”.
nume de utilizator = 'introduceți numele de utilizator între aceste ghilimele' AIO_KEY = 'cheia dvs. aio ' aio = Client (nume de utilizator, AIO_KEY)
Vă rugăm să păstrați cheia în siguranță. Poate fi folosit pentru a accesa contul dvs. adafruit io fără permisiunea dvs.
Apoi, creăm câteva variabile precum câștigul pentru ADC, numărul de eșantioane pe care le dorim și setăm rotunjirea care cu siguranță nu este critică.
GAIN = 1 # consultați documentația ads1015 / 1115 pentru valorile potențiale. mostre = 200 # numărul de eșantioane prelevate din anunțuri 1115 locuri = int (2) # set rotunjire
Apoi, creăm o buclă de timp pentru a monitoriza curentul și tensiunea și trimitem datele la Adafruit io la intervale de timp. Bucla while începe prin setarea tuturor variabilelor la zero.
în timp ce este adevărat: # resetează variabilele = int (0) datei = datav = maxIValue = 0 #max valoare curentă în eșantion maxVValue = 0 #max tensiune valoare în eșantion IrmsA0 = 0 # rădăcină curent mediu pătrat VrmsA1 = 0 # rădăcină medie tensiune pătrată ampsA0 = 0 #tensiune de vârf curentA1 = 0 # kilowați de tensiune = plutitor (0)
Deoarece lucrăm cu circuite de curent alternativ, ieșirea SCT-013 și senzorul de tensiune vor fi o undă sinusoidală, astfel încât, pentru a calcula curentul și tensiunea din unde sinusoidale, va trebui să obținem valorile de vârf. Pentru a obține valorile de vârf, vom testa atât tensiunea, cât și curentul (200 de probe) și vom găsi cele mai mari valori (valorile de vârf).
pentru număr în interval (eșantioane): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # vezi dacă ai o nouă imprimare maxValue (datai) dacă datai> maxIValue: maxIValue = datai dacă datav> maxVValue: maxVValue = datav
Apoi, standardizăm valorile prin conversia valorilor ADC la valoarea reală, după care folosim apoi ecuația Root Mean Square pentru a găsi tensiunea și curentul RMS.
#calculați curentul utilizând datele eșantionate # sct-013 utilizat este calibrat pentru ieșire 1000mV @ 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0, places) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0, places) # Calculați tensiunea 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} '. Format (ampsA0))
Odată realizat acest lucru, puterea este calculată și datele sunt publicate pe 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 ', putere)
Pentru conturile gratuite, adafruit solicită o întârziere între solicitări sau încărcarea datelor.
# Așteptați înainte de a repeta bucla time.sleep (0)
Codul complet pentru proiect este disponibil în partea de jos a acestei pagini
Demo
Odată ce codul este complet, salvați-l și apăsați butonul Executare de pe IDE-ul python. Înainte de aceasta, asigurați-vă că Pi este conectat la internet prin WiFi sau LAN, iar cheia aio și numele de utilizator sunt corecte. După un timp, ar trebui să începeți să vedeți datele energetice (putere) afișate pe fluxul de pe Adafruit.io. Configurarea mea hardware în timpul demonstrației a fost așa
Pentru a duce lucrurile mai departe, puteți crea un tablou de bord pe adafruit.io și adăugați o componentă grafică, astfel încât să puteți obține o vizualizare grafică a datelor, așa cum se arată în imaginea de mai jos.
Gata, băieți, acum vă puteți monitoriza consumul de energie de oriunde din lume. Este important să rețineți că există cu siguranță mult mai multe reglaje fine și calibrări pentru a-l transforma într-o soluție cu adevărat precisă, dar cred că acest lucru vă oferă aproape tot ce aveți nevoie pentru a continua.
Nu ezitați să-mi trageți întrebări despre proiect prin secțiunea de comentarii. Voi încerca să răspund cât mai multe. Până la data viitoare.