- Schemat blokowy inteligentnego licznika energii Raspberry Pi
- Wymagane komponenty
- Przygotowanie Pi
- Schemat obwodu licznika energii Pi
- Kod Pythona dla licznika energii Pi
- Próbny
Monitory energii, niezależnie od tego, czy obejmują całe mieszkanie, czy też są rozmieszczone w celu monitorowania tylko jednego urządzenia, umożliwiają śledzenie zużycia i dokonywanie niezbędnych regulacji. Chociaż stają się one coraz bardziej dostępne na rynku, producent we mnie nadal uważa, że dobrym pomysłem będzie zbudowanie wersji DIY, która mogłaby być dostosowana do indywidualnych wymagań. W związku z tym, na potrzeby dzisiejszego samouczka, zbudujemy monitor zużycia energii Raspberry Pi, który będzie w stanie uzyskać informacje o zużyciu energii i przesłać do Adafruit.io.
Możesz również sprawdzić licznik energii IoT oparty na Arduino i licznik energii Prepaid GSM, który zbudowaliśmy wcześniej.
Schemat blokowy inteligentnego licznika energii Raspberry Pi
Schemat blokowy przedstawiający sposób działania systemu przedstawiono poniżej.
WcześniejszeAby wybrać jednostki jedna po drugiej;
Jednostka pomiaru prądu: Jednostka pomiaru prądu składa się z czujnika prądu SCT -013, który może mierzyć do 100A, w zależności od kupowanej wersji. Czujnik przekształca prąd przepływający przez drut, na którym jest zaciśnięty, na mały prąd, który jest następnie podawany do przetwornika ADC za pośrednictwem sieci dzielników napięcia.
Jednostka wykrywania napięcia: Chociaż nie mogłem położyć rąk na module czujnika napięcia, zbudujemy samodzielnie beztransformatorowy czujnik napięcia, który mierzy napięcie za pomocą zasady dzielników napięcia. Czujnik napięcia DIY obejmuje stopień dzielnika napięcia, w którym wysokie napięcie jest przekształcane do wartości odpowiedniej do wejścia do przetwornika ADC.
Jednostka przetwarzająca: Jednostka przetwarzająca składa się z ADC i Raspberry pi. ADC pobiera sygnał analogowy i przesyła go do raspberry pi, która następnie oblicza dokładną ilość zużywanej energii i wysyła ją do chmury wyznaczonego urządzenia. Na potrzeby tego samouczka będziemy używać Adafruit.io jako naszej chmury urządzeń. Zbudowaliśmy też inne
Zastrzeżenie: Zanim zaczniemy, ważne jest, aby wspomnieć, że ten projekt obejmuje podłączenie do źródła prądu przemiennego, które jest niebezpieczne i może być śmiertelne, jeśli nie będzie obsługiwane bezpiecznie. Zanim spróbujesz, upewnij się, że masz doświadczenie w obchodzeniu się z AC.
Gotowy? Zanurzmy się.
Wymagane komponenty
Do zbudowania tego projektu wymagane są następujące składniki;
- Raspberry Pi 3 lub 4 (proces powinien być taki sam dla RPI2 z kluczem WiFi)
- ADS1115 16-bitowy I2C ADC
- YHDC SCT-013-000
- Zasilacz 2.5A 5V MicroUSB
- Rezystor 2W 10K (1)
- Rezystor 1 / 2W 10K (2)
- Rezystor 33ohms (1)
- Rezystor 2W 3,3k (1)
- Dioda IN4007 (4)
- Dioda Zenera 3,6 V (1)
- Potencjometr 10k (lub Preset) (1)
- Kondensator 50v 1uf
- Kondensator 50v 10uf (2)
- BreadBoard
- Przewód połączeniowy
- Inne akcesoria do użytku Raspberry Pi.
Oprócz wymienionych powyżej komponentów sprzętowych, projekt wymaga również pewnych zależności oprogramowania i bibliotek, które będziemy instalować w miarę postępów.
Chociaż ten samouczek będzie działał niezależnie od używanego systemu operacyjnego Raspberry Pi, będę używał systemu operacyjnego Raspberry Pi buster działającego na Pi 3 (powinien również działać na Pi 4) i zakładam, że znasz konfigurację Raspberry Pi z Raspbian Buster OS (prawie taki sam proces jak poprzednie wersje) i wiesz, jak połączyć się z nim SSH za pomocą oprogramowania terminalowego, takiego jak hyper. Jeśli masz z tym jakiekolwiek problemy, na tej stronie znajdziesz mnóstwo poradników Raspberry Pi, które mogą pomóc
Przygotowanie Pi
Zanim zaczniemy okablowanie komponentów i kodowanie, jest kilka prostych zadań, które musimy wykonać na raspberry pi, aby upewnić się, że jesteśmy gotowi do pracy.
Krok 1: Włączanie Pi I2C
Rdzeniem dzisiejszego projektu jest nie tylko raspberry pi, ale 16-bitowy przetwornik ADC oparty na I2C ADS1115. ADC pozwala nam podłączyć czujniki analogowe do Raspberry Pi, ponieważ samo Pi nie ma wbudowanego ADC. Pobiera dane przez własny ADC i przekazuje je do raspberry pi przez I2C. W związku z tym musimy włączyć komunikację I2C na Pi, aby mógł się z nim komunikować.
Magistralę I2C Pi można włączyć lub wyłączyć za pośrednictwem strony konfiguracyjnej raspberry pi. Aby go uruchomić, kliknij ikonę Pi na pulpicie i wybierz preferencje, a następnie konfigurację Raspberry pi.
Powinno to otworzyć stronę konfiguracji. Sprawdź włączony przycisk radiowy dla I2C i kliknij OK, aby go zapisać i ponownie uruchom Pi, aby wprowadzić zmiany.
Jeśli używasz Pi w trybie bezgłowym, dostęp do strony konfiguracji Raspbian można uzyskać, uruchamiając sudo raspi-config.
Krok 2: Instalacja biblioteki ADS11xx firmy Adafruit
Drugą rzeczą, którą musimy zrobić, jest zainstalowanie biblioteki python ADS11xx, która zawiera funkcje i procedury, które ułatwiają nam pisanie skryptu w języku Python do pobierania wartości z ADC.
Aby to zrobić, wykonaj poniższe czynności.
- Zaktualizuj swoje pi, uruchamiając; sudo apt-get update, a następnie sudo apt-get upgrade, spowoduje to zaktualizowanie pi, zapewniając brak problemów ze zgodnością dla żadnego nowego oprogramowania, które zdecydujesz się zainstalować.
- Następnie uruchom polecenie cd ~, aby upewnić się, że jesteś w katalogu domowym.
- Następnie zainstaluj podstawowe elementy kompilacji, uruchamiając; sudo apt-get install build-essential python-dev python-smbus git
- Następnie sklonuj folder Adafruit git zawierający bibliotekę ADS, uruchamiając; klon git https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Przejdź do katalogu sklonowanego pliku i uruchom plik instalacyjny za pomocą; cd Adafruit_Python_ADS1x1z, a następnie sudo python setup.py install
Po wykonaniu tej czynności instalacja powinna być zakończona.
Możesz przetestować instalację biblioteki, podłączając ADS1115, jak pokazano w sekcji schematów poniżej i uruchamiając przykładowy kod dołączony do biblioteki, przechodząc najpierw do jej folderu za pomocą; przykłady cd i uruchamianie przykładu przy użyciu; python simpletest.py
Krok 3: Zainstaluj moduł Adafruit.IO Python
Jak wspomniano podczas wstępów, będziemy publikować odczyty z czujników napięcia i prądu do Adafruit IO Cloud, z którego można je oglądać z całego świata lub połączone z IFTTT, aby wykonywać dowolne czynności.
Moduł python Adafruit.IO zawiera podprogramy i funkcje, z których będziemy korzystać, aby łatwo przesyłać dane do chmury. Aby zainstalować moduł, wykonaj poniższe czynności.
- Uruchom cd ~, aby powrócić do katalogu domowego.
- Następnie uruchom polecenie; sudo pip3 zainstaluj adafruit-io . Powinien zainstalować moduł Adafruit IO python.
Krok 4: Skonfiguruj swoje konto Adafruit.io
Aby korzystać z Adafruit IO na pewno trzeba najpierw założyć konto i uzyskać klucz AIO. Ten klucz AIO wraz z nazwą użytkownika zostanie użyty przez skrypt Pythona w celu uzyskania dostępu do usługi chmury Adafruit IO. Aby utworzyć konto, odwiedź; https://io.adafruit.com/, kliknij przycisk Rozpocznij za darmo i wypełnij wszystkie wymagane parametry. Po zakończeniu rejestracji po prawej stronie strony głównej powinien pojawić się przycisk Wyświetl klucz AIO.
Kliknij go, aby uzyskać klucz AIO.
Po skopiowaniu klucza jesteśmy gotowi do pracy. Aby jednak ułatwić proces wysyłania danych do usługi w chmurze, możesz także tworzyć feedy, do których dane będą przesyłane. (więcej informacji o kanałach AIO można znaleźć tutaj). Ponieważ zasadniczo będziemy przesyłać zużycie energii, utworzymy kanał dla mocy. Aby utworzyć kanał, kliknij „kanały” u góry strony AIO i kliknij dodaj nowy kanał.
Nadaj mu dowolną nazwę, ale aby wszystko było proste, będę nazywać to zużyciem energii. Możesz także zdecydować się na tworzenie kanałów dla napięcia i prądu oraz dostosować kod do publikowania do nich danych.
Mając to wszystko na swoim miejscu, jesteśmy teraz gotowi do rozpoczęcia budowy projektu.
Schemat obwodu licznika energii Pi
Schematy projektu Raspberry Pi Energy Monitor są stosunkowo złożone i obejmują podłączenie do napięcia zmiennego, jak wspomniano wcześniej, uprzejmie upewnij się, że podjęto wszelkie niezbędne środki ostrożności, aby uniknąć porażenia prądem. Jeśli nie jesteś zaznajomiony z bezpieczną obsługą napięć przemiennych, pozwól, aby radość z zastosowania tego na płytce stykowej bez jej zasilania była satysfakcjonująca.
Schematy obejmują podłączenie zespołu czujników napięcia i prądu do ADC, który następnie wysyła dane z czujników do Raspberry Pi. Aby ułatwić śledzenie połączeń, schematy dla każdej jednostki są prezentowane osobno.
Schemat czujnika prądu
Podłączyć komponenty czujnika prądu, jak pokazano na schemacie poniżej.
Przekładnik prądowy użyty w tym projekcie pokazano poniżej, jak widać mamy z niego trzy przewody, a mianowicie uziemienie, Cout i 3,3V
Schemat czujnika napięcia
Podłączyć komponenty czujnika napięcia zgodnie z poniższym schematem.
Jednostka przetwarzania Schemat
Połącz wszystko razem z ADC (ADS1115) podłączonym do raspberry pi i wyjściem czujników prądu i napięcia podłączonych odpowiednio do pinów A0 i A1 ADS1115.
Upewnij się, że styki GND obu czujników są podłączone do GND ADC lub raspberry pi.
Aby było trochę mniej chwiejnie, zaimplementowałem czujniki napięcia i prądu na Protoboardzie. Nie zaleca się również tworzenia obwodu sieciowego prądu przemiennego na płytce stykowej. Jeśli zrobisz to samo, ostateczna konfiguracja może wyglądać jak na poniższym obrazku;
Po zakończeniu połączeń jesteśmy teraz gotowi do napisania kodu projektu.
Kod Pythona dla licznika energii Pi
Jak zwykle w przypadku naszych projektów raspberry pi, będziemy rozwijać kod projektu przy użyciu języka Python. Kliknij ikonę raspberry pi na pulpicie, wybierz programowanie i uruchom dowolną wersję Pythona, której chcesz użyć. Będę używać Pythona 3, a niektóre funkcje w Pythonie 3 mogą nie działać w Pythonie 2.7. Może więc zaistnieć potrzeba wprowadzenia znaczących zmian w kodzie, jeśli chcesz używać Pythona 2.7. Zrobię podział kodu na małe fragmenty i na końcu udostępnię Ci cały kod.
Gotowy? Fajne.
Algorytm kodu jest prosty. Nasz skrypt w Pythonie odpytuje ADS1115 (przez I2C) o odczyty napięcia i prądu. Odebrana wartość analogowa jest odbierana, próbkowana i otrzymywana jest średnia kwadratowa napięcia i prądu. Moc w kilowatach jest obliczana i wysyłana do źródła danych Adafruit IO po określonych odstępach czasu.
Rozpoczynamy skrypt od uwzględnienia wszystkich bibliotek, których będziemy używać. Obejmuje to wbudowane biblioteki, takie jak biblioteka czasu i matematyki oraz inne biblioteki, które zainstalowaliśmy wcześniej.
czas importu import Adafruit_ADS1x15 z Adafruit_IO import * import matematyki
Następnie tworzymy instancję biblioteki ADS1115, która będzie używana do adresowania fizycznego ADC w przyszłości.
# Utwórz instancję ADS1115 ADC (16-bitową). Adc1 = Adafruit_ADS1x15.ADS1115 ()
Następnie podaj nazwę użytkownika IO adafruit i klucz „AIO”.
nazwa użytkownika = 'wprowadź swoją nazwę użytkownika między tymi cudzysłowami' AIO_KEY = 'twój klucz aio ' aio = Klient (nazwa użytkownika, AIO_KEY)
Proszę zachować klucz w bezpiecznym miejscu. Można go używać do uzyskiwania dostępu do konta adafruit io bez Twojej zgody.
Następnie tworzymy pewne zmienne, takie jak wzmocnienie dla ADC, liczba próbek, które chcemy, i ustawiamy zaokrąglenie, które zdecydowanie nie jest krytyczne.
GAIN = 1 # patrz dokumentacja ads1015 / 1115 dla potencjalnych wartości. próbki = 200 # liczba próbek pobranych z ads1115 miejsc = int (2) # ustawione zaokrąglenie
Następnie tworzymy pętlę while do monitorowania prądu i napięcia i wysyłamy dane do Adafruit io w określonych odstępach czasu. Pętla while rozpoczyna się od ustawienia wszystkich zmiennych na zero.
while True: # resetowanie zmiennych count = int (0) datai = datav = maxIValue = 0 #max wartość prądu w próbce maxVValue = 0 #max wartość napięcia w próbce IrmsA0 = 0 # root średni prąd kwadratowy VrmsA1 = 0 # pierwiastek średni kwadratowy napięcie ampsA0 = 0 # napięcie szczytowe prądu A1 = 0 # kilowaty napięcia = zmiennoprzecinkowe (0)
Ponieważ pracujemy z obwodami prądu przemiennego, wyjście SCT-013 i czujnika napięcia będzie sinusoidą, dlatego w celu obliczenia prądu i napięcia z fali sinusoidalnej będziemy musieli uzyskać wartości szczytowe. Aby uzyskać wartości szczytowe, będziemy próbkować zarówno napięcie, jak i prąd (200 próbek) i znajdziemy najwyższe wartości (wartości szczytowe).
dla count in range (samples): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # sprawdź, czy masz nowe maxValue print (datai) if datai> maxIValue: maxIValue = datai if datav> maxVValue: maxVValue = datav
Następnie standaryzujemy wartości, konwertując z wartości ADC na rzeczywistą wartość, po czym używamy równania średniej kwadratowej, aby znaleźć napięcie i prąd skuteczny.
# obliczyć prąd przy użyciu próbkowanych danych # używany sct-013 jest skalibrowany na wyjście 1000mV przy 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0, places) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0, places) # Oblicz napięcie VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = round (VrmsA1, places) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = round (voltsA1, places) print ('Voltage: {0}'. format (voltsA1)) print ('Current: {0} '. Format (ampsA0))
Po wykonaniu tej czynności obliczana jest moc, a dane są publikowane 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 ', moc)
W przypadku kont bezpłatnych, adafruit żąda pewnego opóźnienia między żądaniami lub przesyłaniem danych.
# Poczekaj przed powtórzeniem czasu pętli. Sen (0)
Kompletny kod projektu jest dostępny na dole tej strony
Próbny
Po ukończeniu kodu zapisz go i naciśnij przycisk uruchamiania w środowisku Python IDE. Wcześniej upewnij się, że Pi jest podłączone do Internetu przez Wi-Fi lub LAN, a twój klucz aio i nazwa użytkownika są poprawne. Po chwili powinieneś zacząć widzieć dane dotyczące energii (moc) wyświetlane w kanale Adafruit.io. Moja konfiguracja sprzętu podczas demo była taka
Aby pójść dalej, możesz utworzyć pulpit nawigacyjny na adafruit.io i dodać komponent wykresu, aby uzyskać graficzny widok danych, jak pokazano na poniższym obrazku.
To wszystko, możesz teraz monitorować zużycie energii z dowolnego miejsca na świecie. Ważne jest, aby pamiętać, że jest zdecydowanie więcej dostrojenia i kalibracji do wykonania, aby przekształcić go w naprawdę dokładne rozwiązanie, ale uważam, że daje to prawie wszystko, czego potrzebujesz, aby kontynuować.
Zapraszam do zadawania mi pytań dotyczących projektu za pośrednictwem sekcji komentarzy. Postaram się odpowiedzieć na jak najwięcej. Do następnego razu.