- Raspberry Pi intelligens energiamérő blokkdiagramja
- Szükséges alkatrészek
- A Pi előkészítése
- Pi energiamérő áramkör diagram
- Py-kód a Pi energiamérőhöz
- Demó
Az energiamonitorok, függetlenül attól, hogy lefedik-e az egész lakást, vagy csak egy készülék felügyeletére vannak-e telepítve, módot nyújtanak a fogyasztás nyomon követésére és a szükséges beállítások elvégzésére. Bár egyre inkább elérhetővé válnak a piacon, a bennem lévő gyártó mégis úgy érzi, hogy nagyszerű ötlet egy olyan barkácsverzió elkészítése, amely testre szabható, hogy megfeleljen a személyes igényeknek. Mint ilyen, a mai oktatóanyag számára elkészítünk egy Raspberry Pi energiafogyasztás-monitort, amely képes energiafogyasztásra és feltöltésre az Adafruit.io webhelyre.
Megtekintheti az Arduino-alapú IoT energiamérőt és a már előre elkészített előre fizetett GSM energiamérőt is.
Raspberry Pi intelligens energiamérő blokkdiagramja
Az alábbiakban a rendszer működését bemutató blokkvázlat látható.
AVálogatni az egységeket egymás után;
Áramérzékelő egység: Az áramérzékelő egységet az SCT -013 áramérzékelő alkotja, amely akár 100A-ig is képes mérni, a megvásárolt verziótól függően. Az érzékelő a befogott vezetéken átmenő áramot kisárammá alakítja, amelyet aztán feszültségosztók hálózatán keresztül táplálnak az ADC-be.
Feszültségérzékelő egység: Noha nem tudtam rátenni a kezemet egy feszültségérzékelő modulra, egy barkácsoláshoz egy transzformátor nélküli feszültségérzékelőt építünk, amely a feszültségosztók elve alapján méri a feszültséget. A barkácsfeszültség-érzékelő magában foglalja a feszültségosztó fázist, ahol a nagyfeszültséget átalakítják az ADC bemenetére alkalmas értékre.
Feldolgozó egység: A feldolgozó egység az ADC-t és a Raspberry pi-t tartalmazza. Az ADC veszi az analóg jelet, és elküldi a málna pi-nek, amely ezután kiszámolja az elfogyasztott energia pontos mennyiségét, és elküldi egy kijelölt eszközfelhőbe. A bemutató céljára az Adafruit.io fájlt fogjuk használni Eszközfelhőnkként. Építettünk másokat is
Jogi nyilatkozat: Mielőtt elkezdenénk, fontos megemlíteni, hogy ez a projekt egy veszélyes váltakozó áramú tápellátáshoz kapcsolódik, amely végzetes lehet, ha nem kezelik biztonságosan. Mielőtt megpróbálná, győződjön meg arról, hogy van tapasztalata az AC körül.
Kész? Merüljünk be.
Szükséges alkatrészek
A projekt felépítéséhez a következő összetevőkre van szükség:
- Raspberry Pi 3 vagy 4 (a folyamatnak meg kell egyeznie a WiFi kulcsgal rendelkező RPI2-vel)
- ADS1115 16bit I2C ADC
- YHDC SCT-013-000
- 2,5 A 5 V-os MicroUSB hálózati adapter
- 2W 10K ellenállás (1)
- 1 / 2W 10K ellenállás (2)
- 33ohmos ellenállás (1)
- 2W 3,3 k-os ellenállás (1)
- IN4007 dióda (4)
- 3.6v Zener dióda (1)
- 10k potenciométer (vagy előre beállított) (1)
- 50v 1uf kondenzátor
- 50v 10uf kondenzátor (2)
- Kenyérlap
- Jumper huzal
- Egyéb kiegészítők a Raspberry Pi használatához.
A fent felsorolt hardverkomponenseken kívül a projekt néhány szoftverfüggőséget és könyvtárat is igényel, amelyeket telepítés közben telepítünk.
Bár ez az oktatóprogram a használt málna pi operációs rendszertől függetlenül működik, a Pi 3-on futó Raspberry Pi buster operációs rendszert fogom használni (a Pi 4-nél is működnie kell), és feltételezem, hogy Ön ismeri a Raspberry Pi a Raspbian Buster OS (nagyjából ugyanaz a folyamat, mint az előző verziókban), és tudod, hogyan lehet SSH-t használni egy terminálszoftver, például a hyper segítségével. Ha bármilyen problémája merül fel, ezen a weboldalon rengeteg Raspberry Pi oktatóanyag segíthet
A Pi előkészítése
Mielőtt hozzákezdenénk az alkatrészek bekötéséhez és a kódoláshoz, néhány egyszerű feladatot kell elvégeznünk a málna pi-n, hogy megbizonyosodhassunk arról, hogy indulunk-e.
1. lépés: A Pi I2C engedélyezése
A mai projekt lényege nem csak a málna pi, hanem az ADS1115 16bit I2C alapú ADC. Az ADC lehetővé teszi számunkra, hogy analóg érzékelőket csatlakoztassunk a Raspberry Pi-hez, mivel a Pi-nek önmagában nincs beépített ADC-je. Az adatokat a saját ADC-jén keresztül veszi fel, és az I2C-n keresztül továbbítja a málna pi-be. Mint ilyen, engedélyeznünk kell az I2C kommunikációt a Pi-n, hogy az kommunikálni tudjon vele.
A Pi I2C buszát a málna pi konfigurációs oldalán keresztül lehet engedélyezni vagy letiltani. Indításához kattintson az asztalon lévő Pi ikonra, és válassza ki a beállításokat, majd a Raspberry pi konfigurációt.
Ezzel meg kell nyitnia a konfigurációs oldalt. Ellenőrizze az I2C engedélyezett választógombját, és kattintson az OK gombra a mentéshez, és indítsa újra a Pi-t a változtatások végrehajtásához.
Ha fej nélküli módban futtatja a Pi-t, a Raspbian konfigurációs oldal a sudo raspi-config futtatásával érhető el .
2. lépés: Az ADS11xx könyvtár telepítése az Adafruitból
A második dolog, amit meg kell tennünk, az az ADS11xx python könyvtár telepítése, amely olyan funkciókat és rutinokat tartalmaz, amelyek megkönnyítik számunkra a python szkript írását az ADC-ből az értékek lekéréséhez.
Ehhez kövesse az alábbi lépéseket.
- Frissítse a pi-t futással; sudo apt-get update , majd a sudo apt-get upgrade ez frissíti a pi biztosítva nincsenek kompatibilitási problémák az új szoftvert telepíteni kívánt.
- Ezután futtassa a cd ~ parancsot, hogy megbizonyosodjon arról, hogy a saját könyvtárban van-e.
- Ezután futtatással telepítse a build-essentials-t; sudo apt-get install build-essential python-dev python-smbus git
- Ezután klónozva futtassa az ADS-könyvtárat tartalmazó Adafruit git mappát; git klón https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Váltson át a klónozott fájl könyvtárába, és futtassa a telepítőfájlt a; cd Adafruit_Python_ADS1x1z, majd sudo python setup.py telepítés.
Ezzel a telepítésnek befejeződött.
Kipróbálhatja a könyvtár telepítését az ADS1115 csatlakoztatásával, ahogy az az alábbi sematikus részben látható, és futtassa a könyvtárhoz kapott mintakódot úgy, hogy először a mappába vált; cd példák és a példa futtatása a; python simpletest.py
3. lépés: Telepítse az Adafruit.IO Python modult
Amint a bevezetőben említettük, közzé fogjuk tenni a feszültség- és áramérzékelők olvasmányait az Adafruit IO Cloud-hoz, ahonnan a világ minden tájáról megtekinthető vagy összekapcsolható az IFTTT-vel, hogy bármilyen műveletet végezhessen.
Az Adafruit.IO python modul olyan szubrutinokat és funkciókat tartalmaz, amelyekkel kiaknázzuk az adatokat a felhőbe. Kövesse az alábbi lépéseket a modul telepítéséhez.
- A cd ~ futtatásával térjen vissza a saját könyvtárba.
- Ezután futtassa a parancsot; sudo pip3 telepítse az adafruit-io fájlt . Telepítenie kell az Adafruit IO python modult.
4. lépés: Állítsa be az Adafruit.io fiókot
Az Adafruit IO használatához mindenképpen előbb létre kell hoznia egy fiókot és be kell szereznie egy AIO kulcsot. Ezt az AIO kulcsot a felhasználónévvel együtt a python parancsfájlja fogja használni az Adafruit IO felhőszolgáltatás eléréséhez. Fiók létrehozásához látogasson el a; https://io.adafruit.com/, kattintson az ingyenes kezdés gombra, és töltse ki az összes szükséges paramétert. A Regisztráció befejezése után látnia kell az AIO kulcs megtekintése gombot a kezdőlap jobb oldalán.
Kattintson rá az AIO kulcs megszerzéséhez.
A kulcs átmásolásával készen állunk az indulásra. Azonban a felhőszolgáltatáshoz történő adatküldés folyamatának megkönnyítése érdekében létrehozhatja azokat a hírcsatornákat is, amelyekre az adatokat elküldik. (további információ az AIO-hírcsatornákról itt található). Mivel alapvetően áramfogyasztást fogunk küldeni, létrehozunk egy tápfeszültséget az áram számára. Táblázat létrehozásához kattintson az AIO oldal tetején található „hírcsatornák” elemre, majd az új hírcsatorna hozzáadása elemre.
Adj neki bármilyen nevet, amit szeretnél, de hogy a dolgok egyszerűek legyenek, energiafogyasztásnak fogom nevezni. Dönthet úgy is, hogy hozzon létre hírcsatornákat a feszültséghez és az áramhoz, és adaptálja a kódot az adatok közzétételéhez.
Mindezek meglétével készen állunk a projekt felépítésének megkezdésére.
Pi energiamérő áramkör diagram
A Raspberry Pi Energy Monitor projekt sematikája viszonylag összetett, és magában foglalja a váltakozó feszültségre való csatlakozást, amint azt korábban említettük, kérjük, hogy tegyen meg minden szükséges óvintézkedést az áramütés elkerülése érdekében. Ha még nem ismeri a váltakozó feszültség biztonságos kezelését, akkor legyen kielégítő annak öröme, hogy ezt áramellátás nélkül kenyérlapon alkalmazza.
A vázlatok magukban foglalják a feszültség- és áramérzékelők egységének az ADC-hez való csatlakoztatását, amely az adatokat az érzékelőkből elküldi a Raspberry Pi-nek. A kapcsolatok követhetőségének megkönnyítése érdekében az egyes egységek vázlatai önmagukban kerülnek bemutatásra.
Áramérzékelő vázlata
Csatlakoztassa az áramérzékelő alkatrészeit az alábbi ábra szerint.
Az ebben a projektben használt áramváltót az alábbiakban mutatjuk be, mivel láthatja, hogy három vezetékünk van belőle, mégpedig föld, Cout és 3.3V
Feszültségérzékelő vázlata
Csatlakoztassa a feszültségérzékelő alkatrészeit az alábbi ábra szerint.
Feldolgozó egység vázlata
Csatlakoztasson mindent a málna pi-hez csatlakoztatott ADC-vel (ADS1115), valamint az áram- és feszültségérzékelők kimenetével, amelyek az ADS1115 A0 és A1 csatlakozóihoz vannak csatlakoztatva.
Győződjön meg arról, hogy mindkét érzékelő egység GND csapjai össze vannak kötve az ADC vagy a málna pi GND-jével.
Annak érdekében, hogy a dolgok kissé kevésbé ingatagak legyenek, a Protoboardon implementáltam a feszültség és áram érzékelőket. Továbbá nem ajánlott hálózati áramkört építeni a kenyérlapra. Ha ugyanezt teszi, akkor a végső beállítás úgy nézhet ki, mint az alábbi kép;
A kapcsolatok elkészültével készen állunk a projekt kódjának megírására.
Py-kód a Pi energiamérőhöz
A málna pi projektjeinkhez hasonlóan a Python segítségével fejlesztjük ki a projekt kódját. Kattintson az asztalon található málna pi ikonra, válassza ki a programozást, és indítsa el a használni kívánt python bármelyik verzióját. A Python 3-at fogom használni, és előfordulhat, hogy a Python 3 néhány funkciója nem fog működni a Python 2.7 esetében. Tehát szükség lehet néhány jelentős változtatásra a kódban, ha a python 2.7-et szeretné használni. A kódot apró részletekre bontom, és a végén megosztom veled a teljes kódot.
Kész? Menő.
A kód mögött álló algoritmus egyszerű. Python szkriptünk az ADS1115 (I2C felett) lekérdezi a feszültség és az áram leolvasását. A kapott analóg értéket megkapja, mintavételezi, és megkapja a feszültség és az áram négyzetértékét. A kilowattban kifejezett teljesítmény kiszámításra kerül és meghatározott időközönként eljut az Adafruit IO tápanyaghoz.
A szkriptet úgy kezdjük, hogy belefoglaljuk az összes használni kívánt könyvtárat. Ez magában foglalja a beépített könyvtárakat, például az idő- és matematikai könyvtárat, valamint a korábban telepített többi könyvtárat.
import idő importálása Adafruit_ADS1x15 az Adafruit_IO importból * import matematika
Ezután létrehozunk egy példányt az ADS1115 könyvtárból, amelyet a fizikai ADC kezelésére fogunk használni.
# Hozzon létre egy ADS1115 ADC (16 bites) példányt. Adc1 = Adafruit_ADS1x15.ADS1115 ()
Ezután adja meg adafruit IO felhasználónevét és „AIO” kulcsát.
felhasználónév = 'írja be a felhasználónevét ebbe az idézőjelbe' AIO_KEY = 'az aio kulcsa' aio = Ügyfél (felhasználónév, AIO_KEY)
Kérjük, őrizze meg a kulcsot. Az Ön engedélye nélkül hozzáférhet adafruit io fiókjához.
Ezután létrehozunk néhány változót, például az ADC erősítését, a kívánt minták számát, és beállítjuk a kerekítést, amely határozottan nem kritikus.
GAIN = 1 # a lehetséges értékeket lásd az ads1015 / 1115 dokumentációban. minták = 200 # hirdetésekből vett minták száma1115 hely = int (2) # készlet kerekítés
Ezután létrehozunk egy darab hurokot az áram és a feszültség ellenőrzésére, és az adatokat időközönként elküldjük az Adafruit io-nak. A while ciklus az összes változó nullára állításával kezdődik.
míg True: # reset változók száma = int (0) datai = datav = maxIValue = 0 #max aktuális érték a mintán belül maxVValue = 0 #max feszültségérték a mintán belül IrmsA0 = 0 # root átlagos négyzetáram VrmsA1 = 0 # négyzet középérték amperek A0 = 0 # jelenlegi csúcsfeszültségek A1 = 0 # feszültség kilowattok = úszó (0)
Mivel váltakozó áramkörökkel dolgozunk, az SCT-013 kimenete és a feszültségérzékelő szinuszhullám lesz, így Az áram és a feszültség szinuszhullámból történő kiszámításához meg kell kapnunk a csúcsértékeket. A csúcsértékek megszerzéséhez mintát veszünk mind a feszültségről, mind az áramról (200 minta), és megtaláljuk a legmagasabb értékeket (csúcsértékek).
tartományban történő számoláshoz (minták): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # nézze meg, hogy van-e új maxValue nyomtatása (datai), ha datai> maxIValue: maxIValue = datai, ha datav> maxVValue: maxVValue = datav
Ezután szabványosítjuk az értékeket az ADC értékekből a tényleges értékekké történő átalakítással, majd ezt követően a gyökér négyzet egyenletet használjuk az RMS feszültség és áram megtalálásához.
# kiszámítja az áramot a mintavételezett adatok felhasználásával # az alkalmazott sct-013 kalibrálva van 1000mV kimenetre @ 30A. IrmsA0 = lebeg (maxIValue / float (2047) * 30) IrmsA0 = kerek (IrmsA0, helyek) amperekA0 = IrmsA0 / math.sqrt (2) amperekA0 = kerek (ampsA0, helyek) # Számolja ki a feszültséget VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = kerek (VrmsA1, helyek) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = kerek (voltsA1, helyek) print ('Feszültség: {0}'. format (voltsA1)) print ('Aktuális: {0} '. Format (ampsA0))
Ezzel elkészül a teljesítmény kiszámítása és az adatok közzététele az adafruit.io oldalon
# számolja ki az energiát = kerek (amperek A0 * voltok1, helyek) nyomtatás ('Teljesítmény: {0}'. formátum (teljesítmény)) # adattovábbítás az adafruit.io számára EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', teljesítmény)
Ingyenes fiókok esetén az adafruit megköveteli, hogy legyen némi késés a kérések vagy az adatok feltöltése között.
# Várjon, mielőtt megismételné a ciklusidőt. Alvás (0)
A projekt teljes kódja az oldal alján található
Demó
Ha elkészült a kód, mentse el, és nyomja meg a futtatás gombot a python IDE-n. Ezt megelőzően ellenőrizze, hogy a Pi csatlakozik-e az internethez Wi-Fi-n vagy LAN-on keresztül, és hogy az aio-kulcs és a felhasználónév helyesek-e. Egy idő után el kell kezdenie látni az Adafruit.io hírcsatornáján megjelenő energiaadatokat (teljesítmény). A hardver beállításom a bemutató alatt ilyen volt
A dolgok továbbfejlesztése érdekében létrehozhat egy irányítópultot az adafruit.io webhelyen, és hozzáadhat egy grafikonösszetevőt, így grafikus képet kaphat az adatokról, az alábbi képen látható módon.
Ennyit srácok, mostantól figyelemmel kísérheti energiafogyasztását a világ bármely pontjáról. Fontos megjegyezni, hogy mindenképpen sokkal több finomhangolást és kalibrálást kell elvégezni annak érdekében, hogy valóban pontos megoldássá váljon, de úgy gondolom, hogy ez szinte mindent megad Önnek, amire szüksége van a folytatáshoz.
Nyugodtan tegyen fel kérdéseket a projekttel kapcsolatban a megjegyzés részben. Megpróbálok minél többre válaszolni. A következő alkalomig.