- Bloková schéma inteligentného merača energie Raspberry Pi
- Požadované komponenty
- Príprava pí
- Schéma zapojenia merača energie pí
- Pythonský kód pre merač energie Pi
- Ukážka
Energetické monitory, či už pokrývajú celý byt, alebo sú nasadené na monitorovanie iba jedného spotrebiča, vám poskytujú spôsob, ako sledovať vašu spotrebu a robiť potrebné úpravy. Aj keď sú čoraz viac dostupné na trhu, tvorca podľa mňa stále cíti, že bude skvelým nápadom vytvoriť verziu pre domácich majstrov, ktorá by mohla byť šitá na mieru konkrétnym osobným požiadavkám. Preto pre dnešný výukový program zostavíme monitor spotreby energie Raspberry Pi, ktorý dokáže získavať spotrebu energie a nahrávať ju na server Adafruit.io.
Môžete sa tiež pozrieť na merač energie IoT založený na Arduine a predplatený merač energie GSM, ktorý sme vytvorili skôr.
Bloková schéma inteligentného merača energie Raspberry Pi
Bloková schéma ukazujúca fungovanie systému je uvedená nižšie.
Zloženie: 100% bavlna.Vyberať jednotky jednu za druhou;
Jednotka snímania prúdu: Jednotka snímania prúdu je tvorená prúdovým snímačom SCT -013, ktorý môže merať až 100 A, v závislosti od verzie, ktorú si kúpite. Senzor transformuje prúd prechádzajúci vodičom, na ktorom je upnutý, na malý prúd, ktorý sa potom dodáva do ADC pomocou siete rozdeľovačov napätia.
Jednotka snímania napätia: Aj keď som nemohol položiť ruky na modul snímača napätia, zostrojíme DIY beztransformátorový snímač napätia, ktorý meria napätie pomocou princípu rozdeľovačov napätia. DIY napäťový senzor zahŕňa fázový delič napätia, kde sa vysoké napätie transformuje na hodnotu vhodnú pre vstup do ADC.
Procesorová jednotka: Procesorová jednotka obsahuje ADC a Raspberry pi. ADC prevezme analógový signál a odošle ho malinovej pí, ktorá potom vypočíta presné množstvo spotrebovanej energie a odošle ho do určeného cloudu zariadenia. Na účely tohto tutoriálu budeme používať Adafruit.io ako náš Cloud zariadení. Postavili sme aj ďalšie
Zrieknutie sa zodpovednosti: Skôr ako začneme, je dôležité spomenúť, že tento projekt zahŕňa pripojenie k zdroju striedavého prúdu, ktorý je nebezpečný a môže byť smrteľný, ak sa s ním nebude manipulovať bezpečne. Predtým, ako sa o to pokúsite, skontrolujte, či máte skúsenosti s prácou okolo AC.
Pripravený? Poďme sa ponoriť.
Požadované komponenty
Na zostavenie tohto projektu sú potrebné nasledujúce komponenty;
- Raspberry Pi 3 alebo 4 (postup by mal byť rovnaký pre RPI2 s WiFi kľúčom)
- ADS1115 16bitový I2C ADC
- YHDC SCT-013-000
- 2,5 A 5 V MicroUSB napájací adaptér
- 2W 10K rezistor (1)
- 1 / 2W 10K rezistor (2)
- 33ohmový rezistor (1)
- 2W 3,3k rezistor (1)
- Dióda IN4007 (4)
- Zenerova dióda 3,6 V (1)
- 10k potenciometer (alebo predvoľba) (1)
- 50v 1uf kondenzátor
- 50v 10uf kondenzátor (2)
- BreadBoard
- Prepojovací drôt
- Ostatné príslušenstvo pre použitie Raspberry Pi.
Okrem vyššie uvedených hardvérových komponentov projekt vyžaduje aj určité softvérové závislosti a knižnice, ktoré budeme inštalovať postupne.
Aj keď tento tutoriál bude fungovať bez ohľadu na použitý Raspberry Pi OS, budem používať Raspberry Pi Buster OS bežiaci na Pi 3 (mal by fungovať aj na Pi 4) a budem predpokladať, že ste oboznámení s nastavením Raspberry Pi s operačný systém Raspbian Buster (takmer rovnaký proces ako predchádzajúce verzie) a viete, ako sa do neho zapojiť pomocou terminálového softvéru ako hyper. Ak máte problémy s niečím z toho, na tomto webe nájdete množstvo návodov na Raspberry Pi, ktoré vám môžu pomôcť
Príprava pí
Predtým, ako začneme pripájať komponenty a kódovať, je potrebné na Raspberry Pi vykonať niekoľko jednoduchých úloh, aby sme sa uistili, že sme pripravení vyraziť.
Krok 1: Povolenie Pi I2C
Jadrom dnešného projektu nie je iba malina pi, ale aj 16bitový ADC ADS1115 založený na I2C. ADC nám umožňuje pripojiť analógové snímače k Raspberry Pi, pretože samotné Pi nemá zabudovaný ADC. Dáta prijíma cez svoj vlastný ADC a cez I2C ich preposiela na malinovú pí. Preto musíme na Pi povoliť komunikáciu I2C, aby s ním mohla komunikovať.
Zbernicu Pi I2C je možné povoliť alebo zakázať prostredníctvom konfiguračnej stránky maliny pí. Ak ju chcete spustiť, kliknite na ikonu Pi na pracovnej ploche a vyberte preferencie nasledované konfiguráciou Raspberry pi.
Týmto by sa mala otvoriť konfiguračná stránka. Skontrolujte zapnutý prepínač pre I2C a kliknutím na OK ho uložte a reštartujte Pi, aby sa zmeny vykonali.
Ak používate Pi v bezhlavom režime, na konfiguračnú stránku Raspbian sa dostanete spustením sudo raspi-config.
Krok 2: Inštalácia knižnice ADS11xx z Adafruit
Druhá vec, ktorú musíme urobiť, je nainštalovať si knižnicu python ADS11xx, ktorá obsahuje funkcie a rutiny, ktoré nám uľahčujú písanie skriptu pythonu na načítanie hodnôt z ADC.
Postupujte podľa pokynov uvedených nižšie.
- Aktualizujte svoju pí spustením; sudo apt-get update a následne pomocou sudo apt-get upgrade to bude aktualizovať pi zaisťujúce nie sú žiadne problémy s kompatibilitou akéhokoľvek nového softvéru sa rozhodnete nainštalovať.
- Ďalej spustite príkaz cd ~, aby ste sa uistili, že sa nachádzate v domovskom adresári.
- Ďalej nainštalujte základné prvky spustením; sudo apt-get install build-essential python-dev python-smbus git
- Ďalej klonujte priečinok Adafruit git obsahujúci knižnicu ADS spustením; git klon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Prejdite do adresára klonovaného súboru a spustite inštalačný súbor pomocou; cd Adafruit_Python_ADS1x1z nasledované sudo python setup.py install
Týmto je inštalácia hotová.
Inštaláciu knižnice môžete otestovať pripojením ADS1115, ako je to znázornené v časti so schémami nižšie, a spustením ukážkového kódu, ktorý bol dodaný s knižnicou, najskôr pomocou priečinka; príklady cd a spustenie príkladu pomocou; python simpletest.py
Krok 3: Nainštalujte modul Python modulu Adafruit.IO
Ako už bolo spomenuté v úvodoch, budeme publikovať údaje z napäťových a prúdových senzorov do cloudu Adafruit IO, z ktorého ich možno sledovať z celého sveta alebo spájať s IFTTT, aby ste mohli vykonať čokoľvek, po čom túžite.
Pythonový modul Adafruit.IO obsahuje podprogramy a funkcie, ktoré využijeme na ľahké streamovanie údajov do cloudu. Pri inštalácii modulu postupujte podľa nasledujúcich pokynov.
- Spustením cd ~ sa vráťte do domovského adresára.
- Ďalej spustite príkaz; sudo pip3 nainštalovať adafruit-io . Mal by nainštalovať modul python IO Adafruit IO.
Krok 4: Vytvorte si účet Adafruit.io
Ak chcete používať Adafruit IO, budete si určite musieť najskôr vytvoriť účet a získať kľúč AIO. Tento kľúč AIO spolu s vašim používateľským menom použije váš skript v jazyku python na prístup k cloudovej službe Adafruit IO. Ak si chcete vytvoriť účet, navštívte stránku; https://io.adafruit.com/, kliknite na tlačidlo Začíname zadarmo a vyplňte všetky požadované parametre. Po dokončení registrácie by ste mali vidieť tlačidlo Zobraziť kľúč AIO vpravo od domovskej stránky.
Kliknutím na ňu získate kľúč AIO.
Po skopírovaní kľúča sme pripravení vyraziť. Aby ste však uľahčili proces odosielania údajov do cloudovej služby, môžete tiež vytvoriť informačné kanály, na ktoré sa budú údaje odosielať. (viac informácií o informačných kanáloch AIO nájdete tu). Pretože v zásade budeme odosielať spotrebu energie, vytvoríme zdroj energie. Ak chcete vytvoriť informačný kanál, kliknite na „informačné kanály“ v hornej časti stránky AIO a potom na položku Pridať nový informačný kanál.
Dajte tomu ľubovoľný názov, ale pre zjednodušenie budem hovoriť spotreba energie. Môžete sa tiež rozhodnúť vytvoriť napájacie zdroje pre napätie a prúd a prispôsobiť kód tak, aby sa k nim zverejňovali údaje.
Keď je toto všetko v poriadku, sme teraz pripravení začať stavať projekt.
Schéma zapojenia merača energie pí
Schémy projektu Raspberry Pi Energy Monitor sú pomerne zložité a zahŕňajú pripojenie k striedavému napätiu, ako už bolo spomenuté, nezabudnite vykonať všetky potrebné opatrenia, aby ste predišli úrazu elektrickým prúdom. Ak nie ste oboznámení s bezpečnou manipuláciou so striedavým napätím, je uspokojivá radosť z implementácie tohto riešenia na dosku bez napájania.
Schémy zahŕňajú pripojenie jednotky snímačov napätia a prúdu k ADC, ktorý potom posiela dáta zo snímačov na Raspberry Pi. Pre uľahčenie sledovania pripojení sú schémy pre každú jednotku uvedené samostatne.
Schéma súčasného snímača
Pripojte komponenty pre snímač prúdu, ako je znázornené na nižšie uvedených schémach.
Prúdový transformátor použitý v tomto projekte je zobrazený nižšie, pretože môžete vidieť, že z neho máme tri vodiče, a to zem, Cout a 3,3 V.
Schémy snímača napätia
Pripojte komponenty pre snímač napätia, ako je znázornené na nižšie uvedených schémach.
Schéma procesnej jednotky
Pripojte všetko spolu s ADC (ADS1115) pripojeným k malinovej pí a výstupom prúdových a napäťových senzorov pripojených k pólu A0 a A1 ADS1115.
Uistite sa, že kolíky GND oboch snímacích jednotiek sú pripojené k GND ADC alebo malinovej pí.
Aby som bol o niečo menej roztrasený, implementoval som senzory napätia a prúdu na protoboarde. Tiež sa neodporúča budovať sieťový obvod striedavého prúdu na nepájivej doske. Ak urobíte to isté, vaše konečné nastavenie môže vyzerať ako na obrázku nižšie;
Po dokončení pripojení sme teraz pripravení napísať kód projektu.
Pythonský kód pre merač energie Pi
Ako to už býva s našimi projektmi maliny pi, vyvinieme kód projektu pomocou pythonu. Kliknite na ikonu malina pi na pracovnej ploche, vyberte programovanie a spustite ktorúkoľvek verziu pythonu, ktorú chcete použiť. Budem používať Python 3 a niektoré funkcie v Pythone 3 nemusia fungovať pre Python 2.7. Možno budete musieť urobiť niekoľko významných zmien v kóde, ak chcete používať python 2.7. Rozdelím kód na malé úryvky a na konci sa s vami podelím o celý kód.
Pripravený? V pohode
Algoritmus za kódom je jednoduchý. Náš skript v jazyku python vyhľadáva ADS1115 (cez I2C) na hodnoty napätia a prúdu. Prijatá analógová hodnota sa prijme, vzorkuje sa a získa sa stredná kvadratická hodnota napätia a prúdu. Vypočíta sa výkon v kilowattoch a po konkrétnych intervaloch sa odošle do krmiva Adafruit IO.
Skript začíname zahrnutím všetkých knižníc, ktoré budeme používať. Patria sem vstavané knižnice, ako sú knižnica času a matematiky, a ďalšie knižnice, ktoré sme nainštalovali skôr.
čas importu import Adafruit_ADS1x15 z Adafruit_IO import * import matematika
Ďalej vytvoríme inštanciu knižnice ADS1115, ktorá sa bude v budúcnosti používať na adresovanie fyzického ADC.
# Vytvorte inštanciu ADS1115 ADC (16-bit). Adc1 = Adafruit_ADS1x15.ADS1115 ()
Ďalej zadajte svoje používateľské meno a vstupné heslo adafruit IO a kľúč „AIO“.
username = 'zadajte svoje používateľské meno medzi tieto úvodzovky' AIO_KEY = 'váš kľúč aio ' aio = Klient (používateľské meno, AIO_KEY)
Kľúč si uschovajte. Môže sa použiť na prístup k vášmu účtu adafruit io bez vášho súhlasu.
Ďalej vytvoríme niektoré premenné, ako je zisk pre ADC, počet vzoriek, ktoré chceme, a nastavíme zaokrúhľovanie, ktoré určite nie je kritické.
ZISK = 1 # potenciálne hodnoty nájdete v dokumentácii k reklamám 1015/1115. vzorky = 200 # počet vzoriek odobratých z reklám 1115 miest = int (2) # nastaviť zaokrúhlenie
Ďalej vytvoríme while slučku na sledovanie prúdu a napätia a odosielanie údajov do Adafruit io v intervaloch. Smyčka while začína nastavením všetkých premenných na nulu.
while True: # reset variables count = int (0) datai = datav = maxIValue = 0 #max aktuálna hodnota vo vzorke maxVValue = 0 #max. hodnota napätia vo vzorke IrmsA0 = 0 # koreňový priemerný štvorcový prúd VrmsA1 = 0 # stredné štvorcové napätie ampsA0 = 0 #prúdové špičkové voltyA1 = 0 #voltové kilowatty = plavák (0)
Pretože pracujeme s obvodmi striedavého prúdu, výstupom SCT-013 a napäťovým snímačom bude sínusová vlna, takže na výpočet prúdu a napätia zo sínusovej vlny bude potrebné získať špičkové hodnoty. Ak chcete získať špičkové hodnoty, odoberieme vzorky napätia aj prúdu (200 vzoriek) a nájdeme najvyššie hodnoty (špičkové hodnoty).
pre počet v rozsahu (vzorky): datai.insert (count, (abs (adc1.read_adc (0, zisk = GAIN)))) datav.insert (počet, (abs (adc1.read_adc (1, zisk = GAIN)))) # uvidíme, či máte novú tlač maxValue (datai), ak datai> maxIValue: maxIValue = datai, ak datav> maxVValue: maxVValue = datav
Ďalej štandardizujeme hodnoty prevodom z hodnôt ADC na skutočnú hodnotu, po ktorej potom pomocou rovnice Root Mean Square nájdeme napätie a prúd RMS.
#vypočítajte prúd pomocou vzorkovaných údajov # použitý sct-013 je kalibrovaný na výstup 1000mV pri 30A. IrmsA0 = plavák (maxIValue / float (2047) * 30) IrmsA0 = okrúhly (IrmsA0, miest) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = okrúhly (ampsA0, miest) # Vypočítajte napätie VrmsA1 = plavák (maxVValue * 1100 / float (2047)) VrmsA1 = guľatý (VrmsA1, miest) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = okrúhly (voltsA1, miest) print ('Napätie: {0}'. format (voltsA1)) print ('Current): {0} '. Format (ampsA0))
Keď sa to urobí, vypočíta sa výkon a údaje sa zverejnia 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 ', napájanie)
V prípade bezplatných účtov adafruit požaduje, aby medzi žiadosťami alebo nahraním údajov došlo k určitému časovému oneskoreniu.
# Počkajte pred opakovaním času slučky. Spánok (0)
Kompletné kód pre tento projekt je k dispozícii na spodnej časti tejto stránky
Ukážka
Po dokončení kódu ho uložte a stlačte tlačidlo spustenia v prostredí python IDE. Predtým sa uistite, že je Pi pripojené k internetu cez WiFi alebo LAN a či je váš aio kľúč a používateľské meno správne. Po chvíli by ste mali začať vidieť energetické údaje (výkon) zobrazené na feede na Adafruit.io. Moje hardvérové nastavenie počas ukážky bolo také
Ak chcete ísť ďalej, mohli by ste vytvoriť informačný panel na adafruit.io a pridať komponent grafu, aby ste mohli získať grafické zobrazenie údajov, ako je znázornené na obrázku nižšie.
To je všetko, chlapci, teraz môžete sledovať svoju spotrebu energie odkiaľkoľvek na svete. Je dôležité poznamenať, že je určite potrebné urobiť oveľa viac dolaďovania a kalibrácií, aby sa transformovala do skutočne presného riešenia, ale domnievam sa, že tým získate takmer všetko, čo potrebujete, aby ste mohli pokračovať.
Neváhajte a napíšte mi otázky týkajúce sa projektu prostredníctvom sekcie komentárov. Pokúsim sa odpovedať čo najviac. Až nabudúce.