- Blok shema pametnog mjerača energije Raspberry Pi
- Potrebne komponente
- Priprema Pi
- Dijagram kruga mjerača energije Pi
- Python kod za Pi mjerač energije
- Demo
Energetski monitori, bilo da pokrivaju cijeli stan ili su postavljeni za nadgledanje samo jednog uređaja, pružaju vam način da pratite svoju potrošnju i izvršite potrebne prilagodbe. Iako postaju sve dostupniji na tržištu, proizvođač u meni još uvijek osjeća da će biti izvrsna ideja napraviti DIY verziju koja bi mogla biti prilagođena osobnim zahtjevima. Kao takvi, za današnji ćemo vodič izraditi monitor potrošnje energije Raspberry Pi sposoban za postizanje potrošnje energije i prijenos na Adafruit.io.
Također možete provjeriti IoT mjerač energije temeljen na Arduinu i pretplaćeni GSM mjerač energije koje smo ranije izradili.
Blok shema pametnog mjerača energije Raspberry Pi
Blok dijagram koji prikazuje kako sustav funkcionira prikazan je u nastavku.

Da biraju jedinice jednu za drugom;
Jedinica osjetnika struje: Jedinica osjetnika struje sastoji se od strujnog osjetnika SCT -013 koji može mjeriti do 100A, ovisno o verziji koju kupujete. Senzor pretvara struju koja prolazi kroz žicu na kojoj je stegnuta u malu struju koja se zatim u ADC dovodi mrežom razdjelnika napona.
Jedinica za osjetnik napona: Iako nisam uspio položiti ruku na modul osjetnika napona, izradit ćemo „uradi sam“ transformator bez transformatora koji mjeri napon koristeći princip razdjelnika napona. DIY osjetnik napona uključuje stupanj razdjelnika napona gdje se visoki napon transformira u vrijednost prikladnu za ulaz u ADC.
Jedinica za obradu: Procesorska jedinica sadrži ADC i Raspberry pi. ADC uzima analogni signal i šalje ga na Raspberry Pi, koji zatim izračunava točnu količinu energije koja se troši i šalje ga u određeni oblak uređaja. U svrhu ovog vodiča koristit ćemo Adafruit.io kao naš oblak uređaja. Izgradili smo i druge
Izjava o odricanju odgovornosti: Prije nego što započnemo, važno je napomenuti da ovaj projekt uključuje spajanje na opskrbu izmjeničnom strujom koja je opasna i može biti fatalna ako se s njom ne postupa sigurno. Prije ovog pokušaja provjerite imate li iskustva s radom oko AC-a.
Spreman? Uronimo.
Potrebne komponente
Za izgradnju ovog projekta potrebne su sljedeće komponente;
- Raspberry Pi 3 ili 4 (postupak bi trebao biti isti za RPI2 s WiFi ključem)
- ADS1115 16-bitni I2C ADC
- YHDC SCT-013-000
- 2,5A 5V MicroUSB adapter za napajanje
- Otpornik 2W 10K (1)
- Otpornik 1 / 2W 10K (2)
- Otpor od 33 oma (1)
- Otpornik snage 2W 3,3k (1)
- IN4007 dioda (4)
- Zener dioda 3.6v (1)
- 10k potenciometar (ili unaprijed postavljeno) (1)
- Kondenzator 50v 1uf
- Kondenzator 50v 10uf (2)
- Daska za kruh
- Žica kratkospojnika
- Ostali pribor za upotrebu Raspberry Pi-a.
Uz gore navedene hardverske komponente, projekt također zahtijeva neke softverske ovisnosti i knjižnice koje ćemo instalirati tijekom nastavka.
Iako će ovaj vodič raditi bez obzira na korišteni OS Raspberry Pi, ja ću koristiti OS Busberry Raspberry Pi koji radi na Pi 3 (trebao bi raditi i na Pi 4) i pretpostavit ću da ste upoznati s postavljanjem Raspberry Pi s OS Raspbian Buster (gotovo isti postupak kao i prethodne verzije), a znate kako SSH ući u njega pomoću terminalnog softvera kao što je hyper. Ako imate problema s bilo čim od ovoga, na ovom web mjestu postoji mnoštvo tutorijala za Raspberry Pi koji vam mogu pomoći
Priprema Pi
Prije nego što započnemo spajanje komponenata i kodiranje, postoji nekoliko jednostavnih zadataka koje moramo obaviti na Raspberry Pi kako bismo bili sigurni da smo spremni.
Korak 1: Omogućavanje Pi I2C
U srži današnjeg projekta nije samo malina pi već i ADS1115 16bitni I2C-bazirani ADC. ADC nam omogućuje spajanje analognih senzora na Raspberry Pi jer sam Pi nema ugrađeni ADC. Podaci preuzimaju putem vlastitog ADC-a i prosljeđuju ih na Raspberry Pi putem I2C. Kao takvi, moramo omogućiti I2C komunikaciju na Pi kako bi mogao komunicirati s njim.
I2C sabirnica Pi-a može se omogućiti ili onemogućiti putem stranice za konfiguriranje malina pi. Da biste ga pokrenuli, kliknite ikonu Pi na radnoj površini i odaberite postavke praćene konfiguracijom Raspberry pi.

Ovo bi trebalo otvoriti stranicu za konfiguraciju. Provjerite omogućen radio gumb za I2C i kliknite U redu da biste ga spremili i ponovno pokrenite Pi da izvrši promjene.

Ako Pi pokrećete u načinu bez glave, stranici konfiguracije Raspbian možete pristupiti pokretanjem sudo raspi-config.
Korak 2: Instaliranje biblioteke ADS11xx iz tvrtke Adafruit
Druga stvar koju trebamo učiniti je instalirati ADS11xx python biblioteku koja sadrži funkcije i rutine koje nam olakšavaju pisanje python skripte za dohvaćanje vrijednosti iz ADC-a.
Slijedite korake u nastavku da biste to učinili.
- Ažurirajte svoj pi pokretanjem; sudo apt-get ažuriranje slijedi po sudo apt-get upgrade će ažurirati pi osigurava da nema problema s kompatibilnošću za bilo koji novi softver odlučite instalirati.
- Zatim pokrenite naredbu cd ~ kako biste bili sigurni da ste u početnom direktoriju.
- Zatim instalirajte osnovno gradivo pokretanjem; sudo apt-get instalirati graditi-bitno python-dev python-smbus git
- Zatim klonirajte mapu Adafruit git koja sadrži biblioteku ADS pokretanjem; git klon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Promijenite se u direktorij klonirane datoteke i pokrenite instalacijsku datoteku pomoću; cd Adafruit_Python_ADS1x1z nakon čega slijedi sudo python setup.py install
Nakon toga, instalacija bi sada trebala biti gotova.
Možete testirati instalaciju knjižnice povezivanjem ADS1115 kao što je prikazano u odjeljku shema dolje i pokrenuti uzorak koda koji je isporučen s knjižnicom prvo, promijenivši se u njezinu mapu pomoću; cd primjeri i pokretanje primjera koristeći; python simpletest.py
Korak 3: Instalirajte Adafruit.IO Python modul
Kao što je spomenuto tijekom uvoda, objavit ćemo očitanja s osjetnika napona i struje na oblaku Adafruit IO iz kojeg se može gledati iz cijelog svijeta ili povezati s IFTTT-om za obavljanje bilo kakvih radnji koje želite.
Python modul Adafruit.IO sadrži potprograme i funkcije kojima ćemo se poslužiti za lakši prijenos podataka u oblak. Slijedite korake u nastavku za instalaciju modula.
- Pokrenite cd ~ za povratak u početni direktorij.
- Zatim pokrenite naredbu; sudo pip3 instalirati adafruit-io . Trebao bi instalirati modul Adafruit IO python.
Korak 4: Postavite svoj račun Adafruit.io
Da biste koristili Adafruit IO, svakako ćete morati prvo stvoriti račun i dobiti AIO ključ. Ovaj AIO ključ, zajedno s vašim korisničkim imenom, vaša će python skripta koristiti za pristup usluzi oblaka Adafruit IO. Da biste stvorili račun, posjetite; https://io.adafruit.com/, kliknite gumb za početak rada i ispunite sve potrebne parametre. Kada se Prijava završi, trebali biste vidjeti gumb Prikaz AIO tipke s desne strane početne stranice.

Kliknite ga da biste dobili svoj AIO ključ.

S kopiranim ključem, spremni smo za polazak. Međutim, da biste olakšali postupak slanja podataka na uslugu u oblaku, možete stvoriti i feedove na koje će se podaci slati. (više informacija o tome što su AIO feedovi možete pronaći ovdje). Budući da ćemo u osnovi slati potrošnju energije, stvorit ćemo napajanje za napajanje. Da biste stvorili feed, kliknite "feedovi" na vrhu AIO stranice i kliknite na dodaj novi feed.
Dajte mu kako god želite ime, ali da stvari budu jednostavne, nazvat ću to potrošnjom energije. Također možete odlučiti stvoriti izvore napona i struje i prilagoditi kod za objavljivanje podataka na njima.
Uz sve ovo na mjestu, sada smo spremni započeti izgradnju projekta.
Dijagram kruga mjerača energije Pi
Sheme za projekt Raspberry Pi Energy Monitor relativno su složene i uključuju spajanje na izmjenični napon kao što je ranije spomenuto, ljubazno osigurajte da poduzmete sve mjere predostrožnosti potrebne da biste izbjegli električni udar. Ako niste upoznati sa sigurnim rukovanjem izmjeničnim naponima, neka zadovoljstvo u provedbi ovoga na ploči, bez napajanja, bude zadovoljavajuće.
Sheme uključuju povezivanje jedinice osjetnika napona i struje s ADC-om koji zatim šalje podatke sa senzora na Raspberry Pi. Da bi se veze lakše pratile, sheme za svaku jedinicu predstavljene su same.
Shema trenutnog osjetnika
Spojite komponente za trenutni senzor kako je prikazano u donjim shemama.

Strujni transformator korišten u ovom projektu prikazan je u nastavku, kao što vidite od njega imamo tri žice, i to masu, Cout i 3,3 V

Sheme osjetnika napona
Spojite komponente za osjetnik napona kako je prikazano u donjim shemama.

Shema procesne jedinice
Spojite sve zajedno s ADC-om (ADS1115) spojenim na malina pi i izlazom osjetnika struje i napona spojenih na pin A0 odnosno A1 na ADS1115.

Osigurajte da su GND klinovi obje osjetne jedinice povezani s GND ADC-a ili maline pi.
Kako bi stvari bile malo manje klimave, implementirao sam senzore napona i struje na Protoboard. Također, ne preporučuje se izrada mrežnog kruga izmjenične struje na ploči. Ako učinite isto, vaše konačno postavljanje može izgledati kao na slici ispod;

Kad su veze dovršene, sada smo spremni napisati kod za projekt.
Python kod za Pi mjerač energije
Kao i obično s našim Raspberry Pi projektima, razvit ćemo kod za projekt pomoću pythona. Kliknite ikonu raspberry pi na radnoj površini, odaberite programiranje i pokrenite koju god verziju pythona želite koristiti. Koristit ću Python 3, a neke funkcije u pythonu 3 možda neće raditi za python 2.7. Dakle, možda će trebati izvršiti neke značajne promjene u kodu ako želite koristiti python 2.7. Napravit ću raščlambu koda na male isječke i na kraju podijeliti s vama cijeli kôd.
Spreman? U redu.
Algoritam iza koda je jednostavan. Naša python skripta pita ADS1115 (preko I2C) za očitanje napona i struje. Primljena analogna vrijednost se prima, uzorkuje i dobiva se srednja kvadratna vrijednost napona i struje. Snaga u kilovatima izračunava se i šalje u feed Adafruit IO nakon određenih intervala.
Skriptu započinjemo uključivanjem svih knjižnica koje ćemo koristiti. To uključuje ugrađene knjižnice poput knjižnice vremena i matematike i ostale knjižnice koje smo ranije instalirali.
vrijeme uvoza import Adafruit_ADS1x15 iz Adafruit_IO import * import math
Dalje, kreiramo instancu biblioteke ADS1115 koja će se koristiti za adresiranje fizičkog ADC-a prema naprijed.
# Stvorite ADS1115 ADC (16-bitnu) instancu.. adc1 = Adafruit_ADS1x15.ADS1115 ()
Dalje, unesite svoje korisničko ime za AI Adafruit i ključ „AIO“.
username = 'unesite svoje korisničko ime između ovih navodnika' AIO_KEY = 'vaš aio ključ' aio = Klijent (korisničko ime, AIO_KEY)
Molimo vas da ključ sačuvate na sigurnom. Može se koristiti za pristup vašem računu adafruit io bez vašeg dopuštenja.
Dalje, kreiramo neke varijable poput pojačanja za ADC, broja uzoraka koje želimo i postavimo zaokruživanje koje definitivno nije kritično.
GAIN = 1 # potencijalne vrijednosti potražite u dokumentaciji ads1015 / 1115. uzorci = 200 # broj uzoraka uzetih iz oglasa1115 mjesta = int (2) # set zaokruživanja
Dalje, Stvaramo while petlju za praćenje struje i napona i u intervalima šaljemo podatke tvrtki Adafruit io. Petlja while započinje postavljanjem svih varijabli na nulu.
while True: # reset varijabli count = int (0) datai = datav = maxIValue = 0 #max trenutna vrijednost unutar uzorka maxVValue = 0 #max vrijednost napona unutar uzorka IrmsA0 = 0 # root root kvadratna struja VrmsA1 = 0 # root root kvadratni napon ampersA0 = 0 # trenutni vršni voltiA1 = 0 # napon kilovata = plutajuće (0)
Budući da radimo s izmjeničnim krugovima, izlaz SCT-013 i naponski osjetnik bit će sinusni val, pa ćemo, kako bismo izračunali struju i napon sinusnog vala, trebati dobiti vršne vrijednosti. Da bismo dobili vršne vrijednosti, uzorkovat ćemo i napon i struju (200 uzoraka) i pronaći najviše vrijednosti (vršne vrijednosti).
za brojanje u rasponu (uzorci): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, dobitak = GAIN)))) # pogledajte imate li novi ispis maxValue (datai) ako je datai> maxIValue: maxIValue = datai ako je datav> maxVValue: maxVValue = datav
Dalje, vrijednosti standardiziramo pretvaranjem iz ADC vrijednosti u stvarnu vrijednost nakon čega koristimo jednadžbu korijenskog srednjeg kvadrata za pronalaženje efektivnog napona i struje.
# izračunajte struju pomoću uzorkovanih podataka # korišteni sct-013 kalibriran je za izlaz od 1000 mV pri 30A. IrmsA0 = plutajuće (maxIValue / float (2047) * 30) IrmsA0 = okruglo (IrmsA0, mjesta) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = okruglo (ampsA0, mjesta) # Izračunajte napon VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = okrugli (VrmsA1, mjesta) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = okrugli (voltsA1, mjesta) print ('Napon: {0}'. format (voltsA1)) print ('Current: {0} '. Format (ampsA0))
Nakon toga se izračuna snaga i podaci se objavljuju na adafruit.io
#kalculate power power = round (ampsA0 * voltsA1, places) print ('Power: {0}'. format (power)) # post data to adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' Korištenje energije ', snaga)
Za besplatne račune, adafruit zahtijeva određeno vremensko kašnjenje između zahtjeva ili prijenosa podataka.
# Pričekajte prije ponavljanja time loop.sleep (0)
Kompletan kod za ovaj projekt je dostupan na dnu ove stranice
Demo
S dovršenim kodom spremite ga i pritisnite gumb za pokretanje na python IDE-u. Prije toga provjerite je li Pi povezan s internetom putem Wi-Fi-ja ili LAN-a i jesu li vaš aio ključ i korisničko ime točni. Nakon nekog vremena trebali biste početi vidjeti energetske podatke (snagu) prikazane na feedu na Adafruit.io. Moje postavljanje hardvera tijekom demonstracije bilo je ovako

Da biste stvari nastavili dalje, možete stvoriti nadzornu ploču na adafruit.io i dodati komponentu grafikona tako da možete dobiti grafički prikaz podataka kao što je prikazano na donjoj slici.

To je to, momci, sada možete pratiti potrošnju energije s bilo kojeg mjesta na svijetu. Važno je napomenuti da definitivno treba još puno finog podešavanja i kalibracije kako bi se to pretvorilo u stvarno točno rješenje, ali vjerujem da vam ovo daje gotovo sve što je potrebno za nastavak.

Slobodno mi upucajte pitanja o projektu putem odjeljka za komentare. Pokušat ću odgovoriti na što veći broj. Do sljedećeg puta.
