- Blokovni diagram pametnega merilnika energije Raspberry Pi
- Zahtevane komponente
- Priprava Pi
- Shema vezja merilnika energije Pi
- Pythonova koda za merilnik energije Pi
- Demo
Energijski monitorji, ne glede na to, ali pokrivajo celo stanovanje ali so nameščeni za nadzor samo ene naprave, vam omogočajo, da spremljate svojo porabo in izvedete potrebne prilagoditve. Čeprav so vedno bolj dostopni na trgu, proizvajalec v meni še vedno meni, da bo odlična ideja izdelati različico DIY, ki bi jo lahko prilagodili posebnim osebnim zahtevam. Kot taki bomo za današnjo vadnico izdelali monitor porabe energije Raspberry Pi, ki bo lahko porabil energijo in naložil na Adafruit.io.
Ogledate si lahko tudi merilnik energije IoT na osnovi Arduina in predplačniški merilnik energije GSM, ki smo ga zgradili že prej.
Blokovni diagram pametnega merilnika energije Raspberry Pi
Blokovni diagram, ki prikazuje delovanje sistema, je prikazan spodaj.
UIzbrati enote eno za drugo;
Enota za zaznavanje toka: Enota za zaznavanje toka je sestavljena iz toka SCT -013, ki lahko meri do 100A, odvisno od različice, ki jo kupite. Senzor pretvori tok, ki poteka skozi žico, na kateri je vpeta, v majhen tok, ki se nato prek omrežja napetostnih delilnikov napaja v ADC.
Enota za zaznavanje napetosti: Čeprav nisem mogel položiti roke na modul napetostnega senzorja, bomo izdelali DIY brez transformatorja napetostni senzor, ki meri napetost po principu delilnikov napetosti. Senzor napetosti DIY vključuje stopnjo delilnika napetosti, kjer se visoka napetost pretvori v vrednost, primerno za vhod v ADC.
Procesorska enota: Procesorska enota vključuje ADC in Raspberry pi. ADC sprejme analogni signal in ga pošlje na malino pi, ki nato izračuna natančno porabljeno moč in jo pošlje v določen oblak naprave. Za namen te vadnice bomo Adafruit.io uporabljali kot oblak naprav. Zgradili smo tudi druge
Omejitev odgovornosti: Preden začnemo, je treba omeniti, da ta projekt vključuje povezavo z napajalnikom, ki je nevaren in bi lahko bil usoden, če z njim ne bi varno ravnali. Preden poskusite to storiti, se prepričajte, da imate izkušnje z delom okoli AC.
Pripravljeni? Potopimo se noter.
Zahtevane komponente
Za gradnjo tega projekta so potrebne naslednje komponente;
- Raspberry Pi 3 ali 4 (postopek mora biti enak za RPI2 z WiFi Dongle)
- ADS1115 16-bitni I2C ADC
- YHDC SCT-013-000
- 2,5A 5V napajalnik MicroUSB
- 2W 10K upor (1)
- 1 / 2W 10K upor (2)
- 33ohmski upor (1)
- 2W 3.3k upor (1)
- IN4007 dioda (4)
- 3.6v Zener dioda (1)
- 10k potenciometer (ali prednastavitev) (1)
- 50v 1uf kondenzator
- 50v 10uf kondenzator (2)
- BreadBoard
- Jumper žica
- Drugi dodatki za uporabo Raspberry Pi.
Poleg zgoraj naštetih komponent strojne opreme projekt zahteva tudi nekatere programske odvisnosti in knjižnice, ki jih bomo namestili v nadaljevanju.
Medtem ko bo ta vadnica delovala ne glede na uporabljeni OS Raspberry Pi, bom uporabil OS Raspberry Pi Buster, ki deluje na Pi 3 (moral bi delovati tudi na Pi 4), in predvidevam, da ste seznanjeni z nastavitvijo Raspberry Pi z OS Raspbian Buster (skoraj enak postopek kot prejšnje različice) in veste, kako SSH vanj vstaviti s pomočjo terminalske programske opreme, kot je hyper. Če imate težave s katerim koli od tega, je na tej spletni strani na voljo veliko vadnic Raspberry Pi, ki vam lahko pomagajo
Priprava Pi
Preden začnemo povezovati komponente in kodiranje, moramo na malinijevem piju opraviti nekaj preprostih nalog, da se prepričamo, da smo pripravljeni na delo.
1. korak: Omogočanje Pi I2C
V jedru današnjega projekta ni le malina pi, ampak ADS1115 16-bitni AD2 na osnovi I2C. ADC nam omogoča, da analogne senzorje priključimo na Raspberry Pi, saj Pi sam nima vgrajenega ADC. Podatke prevzame prek lastnega ADC-ja in jih prek I2C posreduje v malino pi. Kot tak moramo omogočiti komunikacijo I2C na Pi, da lahko komunicira z njo.
Vodilo I2C Pi-ja lahko omogočite ali onemogočite prek strani za konfiguracijo maline pi. Če ga želite zagnati, kliknite ikono Pi na namizju in izberite nastavitve, ki jim sledi konfiguracija Raspberry pi.
To bi moralo odpreti konfiguracijsko stran. Preverite omogočen izbirni gumb za I2C in kliknite V redu, da ga shranite, in znova zaženite Pi, da izvede spremembe.
Če Pi izvajate v brezglavem načinu, lahko do konfiguracijske strani Raspbian dostopate tako, da zaženete sudo raspi-config.
2. korak: Namestitev knjižnice ADS11xx iz podjetja Adafruit
Druga stvar, ki jo moramo storiti, je namestitev pytonske knjižnice ADS11xx, ki vsebuje funkcije in rutine, ki nam olajšajo pisanje skripta python za pridobivanje vrednosti iz ADC.
Če želite to narediti, sledite spodnjim korakom.
- Posodobite svoj pi tako, da zaženete; sudo apt-get update sledi s sudo apt-get nadgradnjo bo to posodobitev pi zagotavlja, da ni težave z združljivostjo za vsako novo programsko opremo, ki jo izberete za namestitev.
- Nato zaženite ukaz cd ~ in se prepričajte, da ste v domačem imeniku.
- Nato z zagonom namestite osnove gradnje; sudo apt-get namestite bistveno gradnjo python-dev python-smbus git
- Nato klonirajte mapo Adafruit git, ki vsebuje knjižnico ADS, tako da zaženete; klon git https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Preklopite v imenik klonirane datoteke in zaženite namestitveno datoteko z uporabo; cd Adafruit_Python_ADS1x1z, čemur sledi sudo python setup.py install
Ko končate, mora biti namestitev končana.
Namestitev knjižnice lahko preizkusite tako, da povežete ADS1115, kot je prikazano v spodnjem razdelku za sheme, in zaženete vzorčno kodo, ki je bila priložena knjižnici, tako da jo najprej spremenite v njeno mapo; cd primeri in izvajanje primera z uporabo; python simpletest.py
3. korak: Namestite modul Adafruit.IO Python
Kot smo že omenili med predstavitvami, bomo odčitke napetosti in tokovnih senzorjev objavljali v oblaku Adafruit IO Cloud, s katerega si ga bomo lahko ogledali z vsega sveta ali povezali z IFTTT za izvajanje kakršnih koli dejanj, ki jih želite.
Python modul Adafruit.IO vsebuje podprograme in funkcije, ki jih bomo uporabili za enostavno pretakanje podatkov v oblak. Za namestitev modula sledite spodnjim korakom.
- Zaženite cd ~, da se vrnete v domači imenik.
- Nato zaženite ukaz; sudo pip3 namesti adafruit-io . Namestiti bi moral modul Adafruit IO python.
4. korak: Nastavite svoj račun Adafruit.io
Če želite uporabljati Adafruit IO, boste zagotovo morali najprej ustvariti račun in pridobiti ključ AIO. Ta ključ AIO skupaj z vašim uporabniškim imenom bo vaš skript python uporabil za dostop do oblačne storitve Adafruit IO. Če želite ustvariti račun, obiščite; https://io.adafruit.com/, kliknite gumb za začetek brezplačno in izpolnite vse zahtevane parametre. Ko je Prijava končana, boste na desni strani domače strani videli gumb Ogled tipke AIO.
Kliknite nanj, da dobite ključ AIO.
S kopiranim ključem smo že pripravljeni. Za lažji postopek pošiljanja podatkov v oblačno storitev pa lahko ustvarite tudi vire, v katere bodo podatki poslani. (več informacij o tem, kaj so viri AIO, najdete tukaj). Ker bomo v osnovi pošiljali porabo energije, bomo ustvarili napajanje. Če želite ustvariti vir, kliknite »viri« na vrhu strani AIO in kliknite na dodajanje novega vira.
Dajte mu poljubno ime, ampak da stvari ostanejo preproste, bom temu rekel poraba energije. Lahko se odločite tudi za ustvarjanje virov napetosti in toka ter prilagodite kodo tako, da jim objavite podatke.
Z vsem tem smo zdaj pripravljeni začeti graditi projekt.
Shema vezja merilnika energije Pi
Sheme za projekt Raspberry Pi Energy Monitor so razmeroma zapletene in vključujejo priključitev na izmenično napetost, kot smo že omenili. Prosimo vas, da sprejmete vse potrebne ukrepe, da se izognete električnemu udarcu. Če niste seznanjeni z varnim ravnanjem z izmeničnimi napetostmi, naj bo veselje, če to izvedete na plošči, ne da bi jo napajali, zadovoljivo.
Sheme vključujejo priključitev enote senzorjev napetosti in toka na ADC, ki nato podatke s senzorjev pošlje na Raspberry Pi. Za lažje sledenje povezavam so sheme za vsako enoto predstavljene same.
Shema trenutnega senzorja
Priključite komponente za trenutni senzor, kot je prikazano v spodnjih shemah.
Trenutni transformator, uporabljen v tem projektu, je prikazan spodaj, kot vidite, imamo od njega tri žice, in sicer ozemljitev, Cout in 3.3V
Sheme napetostnih senzorjev
Priključite komponente za napetostni senzor, kot je prikazano v spodnjih shemah.
Shema procesne enote
Vse skupaj povežite z ADC (ADS1115), priključenim na malino pi, in izhodom tokovnih in napetostnih senzorjev, priključenih na nožice A0 in A1 ADS1115.
Prepričajte se, da so zatiči GND obeh senzorskih enot priključeni na GND ADC ali maline pi.
Da so stvari postale nekoliko manj stresne, sem napetostne in tokovne senzorje namestil na protoboard. Prav tako ni priporočljivo zgraditi omrežnega tokokroga na plošči. Če storite enako, bo vaša končna nastavitev morda videti kot na spodnji sliki;
Ko so povezave končane, smo zdaj pripravljeni napisati kodo za projekt.
Pythonova koda za merilnik energije Pi
Kot ponavadi pri naših projektih malina pi, bomo tudi za projekt razvili kodo s pomočjo pythona. Kliknite ikono malina pi na namizju, izberite programiranje in zaženite katero koli različico pythona, ki jo želite uporabiti. Uporabljal bom Python 3 in nekatere funkcije v pythonu 3 morda ne bodo delovale za python 2.7. Torej bo morda treba nekaj spremeniti v kodo, če želite uporabiti python 2.7. Kodo bom razčlenil na majhne delčke in na koncu z vami delil celotno kodo.
Pripravljeni? Kul.
Algoritem za kodo je preprost. Naš skript python poizveduje ADS1115 (prek I2C) glede odčitkov napetosti in toka. Prejeta analogna vrednost je sprejeta, vzorčena in dobljena je srednja kvadratna vrednost napetosti in toka. Moč v kilovatih se izračuna in pošlje krmi Adafruit IO po določenih intervalih.
Skript začnemo z vključitvijo vseh knjižnic, ki jih bomo uporabljali. Sem spadajo vgrajene knjižnice, kot so knjižnica časa in matematike, ter druge knjižnice, ki smo jih namestili prej.
čas uvoza uvoz Adafruit_ADS1x15 iz Adafruit_IO uvoz * uvoz matematika
Nato ustvarimo primerek knjižnice ADS1115, ki bo uporabljen za naslavljanje fizičnega ADC-ja naprej.
# Ustvari primerek ADS1115 ADC (16-bitni).. adc1 = Adafruit_ADS1x15.ADS1115 ()
Nato navedite svoje uporabniško ime adafruit IO in ključ »AIO«.
username = 'med temi narekovaji vnesite svoje uporabniško ime' AIO_KEY = 'vaš aio ključ' aio = Client (uporabniško ime, AIO_KEY)
Ključ shranite na varnem. Z njim lahko brez vašega dovoljenja dostopate do vašega računa adafruit io.
Nato ustvarimo nekaj spremenljivk, kot so dobiček za ADC, število vzorcev, ki jih želimo, in nastavimo zaokroževanje, ki zagotovo ni kritično.
GAIN = 1 # za možne vrednosti glejte dokumentacijo ads1015 / 1115. vzorci = 200 # število vzorcev, odvzetih iz oglasov1115 mest = int (2) # niz zaokroževanja
Nato ustvarimo časovno zanko za spremljanje toka in napetosti ter podatke v intervalih pošljemo podjetju Adafruit io. Zanka while se začne z nastavitvijo vseh spremenljivk na nič.
while True: # ponastavitev spremenljivk count = int (0) datai = datav = maxIValue = 0 #max trenutna vrednost znotraj vzorca maxVValue = 0 #max vrednost napetosti v vzorcu IrmsA0 = 0 # root root kvadratni tok VrmsA1 = 0 # korenska srednja kvadratna napetost amper A0 = 0 # trenutni vršni volti A1 = 0 # napetost kilovatov = plovec (0)
Ker delamo z izmeničnimi tokokrogi, bo izhod SCT-013 in napetostnega senzorja sinusni val, zato bomo za izračun toka in napetosti iz sinusnega vala morali dobiti najvišje vrednosti. Da bi dobili vršne vrednosti, bomo vzorčili napetost in tok (200 vzorcev) in našli najvišje vrednosti (vršne vrednosti).
za štetje v obsegu (vzorci): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # preverite, ali imate nov izpis maxValue (datai), če datai> maxIValue: maxIValue = datai, če datav> maxVValue: maxVValue = datav
Nato vrednosti standardiziramo s pretvorbo vrednosti ADC v dejansko vrednost, po kateri nato uporabimo enačbo koreninskega srednjega kvadrata za iskanje efektivne napetosti in toka.
# izračunaj tok z vzorčenimi podatki # uporabljeni sct-013 je kalibriran za izhod 1000 mV pri 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = okrogli (IrmsA0, mesta) ampersA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0, places) # Izračunaj napetost VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = okrogel (VrmsA1, kraji) voltiA1 = VrmsA1 / math.sqrt (2) voltiA1 = okrogli (voltiA1, mesta) print ('Napetost: {0}'. format (voltsA1)) print ('Current: {0} '. Format (ampsA0))
S tem se izračuna moč in podatki se objavijo na 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 ', moč)
Za brezplačne račune Adafruit zahteva, da med zahtevami ali prenosom podatkov zakasni nekaj časa.
# Počakajte, preden ponovite zanko time.sleep (0)
Popolna koda za projekt je na voljo na dnu te strani
Demo
Ko je koda končana, jo shranite in pritisnite gumb za zagon na IDE python. Pred tem se prepričajte, da je Pi povezan z internetom prek WiFi ali LAN in da sta ključ in uporabniško ime aio pravilna. Čez nekaj časa bi morali začeti videti podatke o energiji (moč), prikazane v viru na Adafruit.io. Moja namestitev strojne opreme med predstavitvijo je bila taka
Če želite nadaljevati stvari, lahko na adafruit.io ustvarite nadzorno ploščo in dodate komponento grafa, tako da lahko dobite grafični prikaz podatkov, kot je prikazano na spodnji sliki.
To je to, fantje, zdaj lahko spremljate porabo energije od koder koli na svetu. Pomembno je omeniti, da je vsekakor treba opraviti še veliko natančnejših nastavitev in kalibracij, da se to spremeni v resnično natančno rešitev, vendar verjamem, da vam to daje skoraj vse, kar potrebujete za nadaljevanje.
Vprašajte me o projektu v oddelku za komentarje. Poskusil bom odgovoriti na čim več. Do naslednjič.