- Blokové schéma inteligentního měřiče energie Raspberry Pi
- Požadované komponenty
- Příprava Pi
- Schéma zapojení měřiče energie pí
- Pythonský kód pro měřič energie Pi
- Ukázka
Energetické monitory, ať už pokrývají celý byt, nebo jsou nasazeny ke sledování pouze jednoho spotřebiče, poskytují způsob, jak sledovat vaši spotřebu a provádět nezbytná nastavení. I když se stále více stávají dostupnými na trhu, tvůrce ve mně stále cítí, že bude skvělý nápad vytvořit verzi pro kutily, která by mohla být přizpůsobena konkrétním osobním požadavkům. Proto pro dnešní výukový program sestavíme monitor Raspberry Pi Power Consumption, který je schopen získávat spotřebu energie a nahrávat na Adafruit.io.
Můžete si také prohlédnout měřič energie IoT na bázi Arduino a předplacený měřič energie GSM, který jsme dříve postavili.
Blokové schéma inteligentního měřiče energie Raspberry Pi
Níže je uvedeno blokové schéma ukazující, jak systém funguje.
Zloženie: 100% bavlna.Vybírat jednotky jeden po druhém;
Jednotka pro snímání proudu: Jednotku pro snímání proudu tvoří proudový snímač SCT -013, který může měřit až 100 A, v závislosti na verzi, kterou si koupíte. Senzor transformuje proud procházející vodičem, na kterém je upnut, na malý proud, který je poté přiváděn do ADC prostřednictvím sítě děličů napětí.
Jednotka snímání napětí: Zatímco jsem nemohl položit ruce na modul snímače napětí, postavíme DIY beztransformátorový snímač napětí, který měří napětí pomocí principu děliče napětí. DIY napěťový senzor zahrnuje fázi děliče napětí, kde je vysoké napětí transformováno na hodnotu vhodnou pro vstup do ADC.
Procesorová jednotka: Procesorová jednotka obsahuje ADC a Raspberry pi. ADC převezme analogový signál a odešle jej malinové pí, která poté vypočítá přesné množství spotřebované energie a odešle jej do určeného cloudu zařízení. Pro účely tohoto tutoriálu budeme používat Adafruit.io jako náš Cloud zařízení. Postavili jsme také další
Zřeknutí se odpovědnosti: Než začneme, je důležité zmínit, že tento projekt zahrnuje připojení k napájení střídavým proudem, které je nebezpečné a může být smrtelné, pokud nebude bezpečně zacházeno. Než se o to pokusíte, ujistěte se, že máte zkušenosti s prací s AC.
Připraven? Pojďme se ponořit.
Požadované komponenty
K sestavení tohoto projektu jsou vyžadovány následující komponenty;
- Raspberry Pi 3 nebo 4 (proces by měl být stejný pro RPI2 s WiFi Dongle)
- ADS1115 16bitový I2C ADC
- YHDC SCT-013-000
- 2.5A 5V MicroUSB napájecí adaptér
- 2W 10K rezistor (1)
- 1 / 2W 10K rezistor (2)
- 33ohmový rezistor (1)
- 2W 3,3k rezistor (1)
- Dioda IN4007 (4)
- Zenerova dioda 3,6 V (1)
- 10k potenciometr (nebo přednastavený) (1)
- 50v 1uf kondenzátor
- 50v 10uf kondenzátor (2)
- BreadBoard
- Propojovací drát
- Další příslušenství pro použití Raspberry Pi.
Kromě výše uvedených hardwarových komponent projekt vyžaduje také určité softwarové závislosti a knihovny, které budeme průběžně instalovat.
I když tento tutoriál bude fungovat bez ohledu na použitý Raspberry Pi OS, budu používat Raspberry Pi Buster OS běžící na Pi 3 (měl by také fungovat na Pi 4) a předpokládám, že jste obeznámeni s nastavením Raspberry Pi s Raspbian Buster OS (téměř stejný proces jako předchozí verze) a víte, jak do něj SSH použít pomocí terminálového softwaru, jako je hyper. Pokud máte problémy s něčím z toho, na tomto webu najdete spoustu návodů pro Raspberry Pi, které vám mohou pomoci
Příprava Pi
Než začneme zapojovat komponenty a kódovat, je třeba provést na Raspberry Pi několik jednoduchých úkolů, abychom se ujistili, že jsme připraveni.
Krok 1: Povolení Pi I2C
Jádrem dnešního projektu není jen malinová pí, ale 16bitový ADC ADS1115 založený na I2C. ADC nám umožňuje připojit analogové senzory k Raspberry Pi, protože samotný Pi nemá vestavěný ADC. Přijímá data prostřednictvím vlastního ADC a předává je malinové pí prostřednictvím I2C. Proto musíme povolit komunikaci I2C na Pi, aby s ním mohl komunikovat.
Sběrnici I2C Pi lze aktivovat nebo deaktivovat prostřednictvím konfigurační stránky Raspberry Pi. Chcete-li jej spustit, klikněte na ikonu Pi na ploše a vyberte předvolby následované konfigurací Raspberry pi.
Tím by se měla otevřít konfigurační stránka. Zkontrolujte povolený přepínač u I2C a kliknutím na OK jej uložte a restartujte Pi, aby se změny projevily.
Pokud používáte Pi v bezhlavém režimu, na stránku konfigurace Raspbian se dostanete spuštěním sudo raspi-config.
Krok 2: Instalace knihovny ADS11xx z Adafruit
Druhá věc, kterou musíme udělat, je nainstalovat knihovnu pythonů ADS11xx, která obsahuje funkce a rutiny, které nám usnadňují psaní skriptu pythonu pro načítání hodnot z ADC.
Postupujte podle následujících pokynů.
- Aktualizujte své pi spuštěním; sudo apt-get update a následně pomocí sudo apt-get upgrade to bude aktualizovat pi zajišťující nejsou žádné problémy s kompatibilitou jakéhokoli nového softwaru se rozhodnete nainstalovat.
- Dále spusťte příkaz cd ~, abyste se ujistili, že jste v domovském adresáři.
- Dále nainstalujte build-essentials spuštěním; sudo apt-get install build-essential python-dev python-smbus git
- Dále klonujte složku Adafruit git obsahující knihovnu ADS spuštěním; git klon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Přejděte do adresáře klonovaného souboru a spusťte instalační soubor pomocí; cd Adafruit_Python_ADS1x1z následovaný sudo python setup.py install
Poté je instalace hotová.
Instalaci knihovny můžete otestovat připojením ADS1115, jak je znázorněno v sekci schémat níže, a spuštěním ukázkového kódu, který byl dodán s knihovnou, nejprve změnou do její složky pomocí; příklady cd a spuštění příkladu pomocí; python simpletest.py
Krok 3: Nainstalujte modul Adafruit.IO Python
Jak již bylo zmíněno v úvodu, budeme publikovat údaje ze snímačů napětí a proudu do cloudu Adafruit IO, ze kterého je možné je zobrazit z celého světa nebo propojit s IFTTT a provádět jakékoli akce, které si přejete.
Pythonový modul Adafruit.IO obsahuje podprogramy a funkce, které využijeme pro snadné streamování dat do cloudu. Při instalaci modulu postupujte podle následujících pokynů.
- Spusťte cd ~ pro návrat do domovského adresáře.
- Dále spusťte příkaz; sudo pip3 install adafruit-io . Měl by nainstalovat modul python IO Adafruit IO.
Krok 4: Nastavte svůj účet Adafruit.io
Abyste mohli používat Adafruit IO, určitě si musíte nejprve vytvořit účet a získat klíč AIO. Tento klíč AIO spolu s vaším uživatelským jménem použije váš skript pythonu pro přístup ke cloudové službě Adafruit IO. Chcete-li vytvořit účet, navštivte; https://io.adafruit.com/, klikněte na tlačítko Začínáme zdarma a vyplňte všechny požadované parametry. Po dokončení registrace by se na pravé straně domovské stránky mělo zobrazit tlačítko Zobrazit klíč AIO.
Kliknutím na něj získáte klíč AIO.
Po zkopírování klíče jsme připraveni vyrazit. Chcete-li však usnadnit proces odesílání dat do cloudové služby, můžete také vytvořit kanály, na které budou data odeslána. (více informací o zdrojích AIO naleznete zde). Protože v zásadě budeme odesílat spotřebu energie, vytvoříme zdroj energie. Chcete-li vytvořit zdroj, klikněte na „zdroje“ v horní části stránky AIO a klikněte na přidat nový zdroj.
Pojmenujte ho jakkoli chcete, ale aby to nebylo jednoduché, nazvu to spotřeba energie. Můžete se také rozhodnout vytvořit zdroje pro napětí a proud a přizpůsobit kód tak, aby k nim mohl publikovat data.
Když je vše v pořádku, jsme nyní připraveni zahájit projekt.
Schéma zapojení měřiče energie pí
Schémata projektu Raspberry Pi Energy Monitor jsou poměrně složitá a zahrnují připojení k střídavému napětí, jak již bylo zmíněno dříve, laskavě zajistěte, abyste přijali veškerá nezbytná opatření, abyste zabránili úrazu elektrickým proudem. Pokud nejste obeznámeni s bezpečnou manipulací se střídavým napětím, nechte se uspokojit radostí z jeho implementace na prkénku, aniž byste jej napájeli.
Schémata zahrnují připojení jednotky senzorů napětí a proudu k ADC, který pak odesílá data ze senzorů na Raspberry Pi. Aby bylo připojení snadnější sledovat, jsou schémata pro každou jednotku uvedena samostatně.
Aktuální schéma senzoru
Připojte komponenty proudového snímače, jak je znázorněno na níže uvedených schématech.
Proudový transformátor použitý v tomto projektu je uveden níže, jak vidíte, máme od něj tři vodiče, a to zem, Cout a 3,3 V
Schémata snímače napětí
Připojte komponenty snímače napětí, jak je znázorněno na níže uvedených schématech.
Schémata procesní jednotky
Připojte vše společně s ADC (ADS1115) připojeným k malinové pí a výstupem proudových a napěťových senzorů připojených ke kolíku A0 a A1 ADS1115.
Zajistěte, aby piny GND obou snímacích jednotek byly připojeny k GND ADC nebo malinové pí.
Aby to bylo trochu neklidné, implementoval jsem senzory napětí a proudu na Protoboardu. Rovněž se nedoporučuje budovat síťový obvod střídavého proudu na prkénku. Pokud uděláte totéž, vaše konečné nastavení může vypadat jako na obrázku níže;
Po dokončení připojení jsme nyní připraveni napsat kód pro projekt.
Pythonský kód pro měřič energie Pi
Jako obvykle u našich projektů Raspberry Pi budeme vyvíjet kód projektu pomocí pythonu. Klikněte na ikonu maliny pi na ploše, vyberte programování a spusťte libovolnou verzi pythonu, kterou chcete použít. Budu používat Python 3 a některé funkce v Pythonu 3 nemusí fungovat pro Python 2.7. Pokud tedy chcete použít python 2.7, může být potřeba provést nějakou významnou změnu kódu. Udělám rozpis kódu na malé úryvky a na konci s vámi sdílím celý kód.
Připraven? Chladný.
Algoritmus za kódem je jednoduchý. Náš pythonovský skript dotazuje ADS1115 (přes I2C) na hodnoty napětí a proudu. Přijímá se analogová hodnota, vzorkuje se a získá se střední kvadratická hodnota napětí a proudu. Vypočte se výkon v kilowattech a po určitých intervalech se odešle do krmiva Adafruit IO.
Skript spustíme zahrnutím všech knihoven, které budeme používat. To zahrnuje vestavěné knihovny, jako je knihovna času a matematiky, a další knihovny, které jsme nainstalovali dříve.
čas importu import Adafruit_ADS1x15 z Adafruit_IO import * import matematika
Dále vytvoříme instanci knihovny ADS1115, která bude použita k adresování fyzického ADC do budoucna.
# Vytvořte instanci ADS1115 ADC (16bitovou).. adc1 = Adafruit_ADS1x15.ADS1115 ()
Dále zadejte své uživatelské jméno adafruit IO a klíč „AIO“.
username = 'zadejte své uživatelské jméno mezi tyto uvozovky' AIO_KEY = 'váš klíč aio ' aio = Klient (uživatelské jméno, AIO_KEY)
Uchovávejte prosím klíč v bezpečí. Lze jej použít k přístupu k vašemu účtu adafruit io bez vašeho svolení.
Dále vytvoříme některé proměnné, jako je zisk pro ADC, počet vzorků, které chceme, a nastavíme zaokrouhlování, které rozhodně není kritické.
GAIN = 1 # viz potenciální hodnoty v dokumentaci ads1015 / 1115. sample = 200 # počet vzorků odebraných z reklam 1115 míst = int (2) # set zaokrouhlování
Dále vytvoříme while smyčku pro monitorování proudu a napětí a odesílání dat do Adafruit io v intervalech. Smyčka while začíná nastavením všech proměnných na nulu.
while True: # reset variables count = int (0) datai = datav = maxIValue = 0 #max aktuální hodnota ve vzorku maxVValue = 0 #max hodnota napětí ve vzorku IrmsA0 = 0 #root střední kvadratický proud VrmsA1 = 0 # střední kvadratické napětí ampsA0 = 0 #proudové špičkové napětíA1 = 0 #voltové kilowatty = plovák (0)
Protože pracujeme s AC obvody, výstupem SCT-013 a napěťovým senzorem bude sinusová vlna, takže Abychom mohli vypočítat proud a napětí ze sinusové vlny, budeme potřebovat získat špičkové hodnoty. Chcete-li získat špičkové hodnoty, budeme vzorkovat napětí i proud (200 vzorků) a najdeme nejvyšší hodnoty (špičkové hodnoty).
pro 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)))) # zjistěte, zda máte nový tisk maxValue (datai), pokud datai> maxIValue: maxIValue = datai if datav> maxVValue: maxVValue = datav
Dále standardizujeme hodnoty převedením z hodnot ADC na skutečnou hodnotu a poté pomocí rovnice Root Mean Square vyhledáme napětí a proud RMS.
# vypočítat proud pomocí vzorkovaných dat # použitý sct-013 je kalibrován pro výstup 1000mV @ 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = kulatý (IrmsA0, míst) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = kulatý (ampsA0, míst) # Vypočítat napětí VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = kulatý (VrmsA1, místa) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = kulatý (voltsA1, místa) print ('Voltage: {0}'. format (voltsA1)) print ('Current: {0} '. Format (ampsA0))
Tímto způsobem se vypočítá výkon a data se zveřejní 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 ', power)
U bezplatných účtů adafruit požaduje, aby mezi žádostmi nebo nahráním dat byla určitá časová prodleva.
# Počkejte před opakováním času smyčky. Spánek (0)
Kompletní kód pro tento projekt je k dispozici na spodní části této stránky
Ukázka
Po dokončení kódu jej uložte a stiskněte tlačítko spuštění na IDE pythonu. Před tím se ujistěte, že je Pi připojen k internetu přes WiFi nebo LAN a že váš aio klíč a uživatelské jméno jsou správné. Po chvíli byste měli začít vidět energetická data (výkon) zobrazená na zdroji na Adafruit.io. Moje hardwarové nastavení během dema bylo takové
Chcete-li pokračovat dále, můžete vytvořit řídicí panel na adafruit.io a přidat komponentu grafu, abyste získali grafický pohled na data, jak je znázorněno na obrázku níže.
To je vše, chlapci, nyní můžete sledovat svoji spotřebu energie odkudkoli na světě. Je důležité si uvědomit, že je určitě třeba udělat mnohem více dolaďování a kalibrací, aby se to proměnilo ve skutečně přesné řešení, ale věřím, že vám to dá téměř vše, co musíte udělat.
Neváhejte mi natočit dotazy týkající se projektu prostřednictvím sekce komentářů. Pokusím se odpovědět co nejvíce. Do příště.