- Raspberry Pi Akıllı Enerji Ölçer Blok Şeması
- Gerekli Bileşenler
- Pi'yi hazırlamak
- Pi Enerji Ölçer Devre Şeması
- Pi Enerji Ölçer için Python Kodu
- Demo
Enerji Monitörleri, ister tüm daireyi kapsıyor ister tek bir cihazı izlemek için konuşlandırılmış olsun, tüketiminizi takip etmeniz ve gerekli ayarlamaları yapmanız için bir yol sağlar. Piyasada giderek daha fazla bulunabilir hale gelirken, içimdeki yapımcı, belirli kişisel gereksinimleri karşılayacak şekilde uyarlanabilecek bir DIY sürümü oluşturmanın hala harika bir fikir olacağını düşünüyor. Bu nedenle, bugünün öğreticisi için, enerji tüketimini elde edebilen ve Adafruit.io'ya yükleyebilen bir Raspberry Pi Güç Tüketimi monitörü oluşturacağız.
Daha önce oluşturduğumuz Arduino tabanlı IoT Enerji Ölçer ve Ön Ödemeli GSM Enerji Ölçer'e de göz atabilirsiniz.
Raspberry Pi Akıllı Enerji Ölçer Blok Şeması
Sistemin nasıl çalıştığını gösteren bir blok diyagram aşağıda gösterilmiştir.
Birimleri arka arkaya seçmek için;
Akım Algılama Birimi: Akım algılama ünitesi, satın aldığınız versiyona bağlı olarak 100A'ya kadar ölçüm yapabilen SCT -013 akım sensöründen oluşur. Sensör, kenetlendiği telden geçen akımı küçük bir akıma dönüştürür ve daha sonra bir voltaj bölücü ağı aracılığıyla ADC'ye beslenir.
Voltaj Algılama Birimi: Bir voltaj sensör modülünün üzerine ellerimi koyamadığım halde, voltaj bölücüler prensibini kullanarak voltajı ölçen transformatörsüz bir voltaj sensörü inşa edeceğiz. DIY voltaj sensörü, yüksek voltajın ADC'ye giriş için uygun bir değere dönüştürüldüğü voltaj bölücü aşamasını içerir.
İşlem Birimi: İşlem birimi, ADC ve Raspberry pi'den oluşur. ADC, analog sinyali alır ve ahududu pi'ye gönderir, bu da daha sonra tüketilen tam güç miktarını hesaplar ve belirlenen bir cihaz bulutuna gönderir. Bu eğitimin amacı doğrultusunda, Adafruit.io'yu Cihaz Bulutumuz olarak kullanacağız. Başka inşa ettik
Sorumluluk Reddi: Başlamadan önce, bu projenin tehlikeli olan ve güvenli bir şekilde ele alınmadığı takdirde ölümcül olabilecek bir AC kaynağına bağlantı içerdiğini belirtmek önemlidir. Bunu denemeden önce AC etrafında çalışma deneyiminiz olduğundan emin olun.
Hazır? İçeri girelim.
Gerekli Bileşenler
Bu projeyi oluşturmak için aşağıdaki bileşenler gereklidir;
- Raspberry Pi 3 veya 4 (işlem, WiFi Dongle ile RPI2 için aynı olmalıdır)
- ADS1115 16bit I2C ADC
- YHDC ÖTV-013-000
- 2.5A 5V MicroUSB Güç Adaptörü
- 2W 10K Direnç (1)
- 1 / 2W 10K Direnç (2)
- 33ohms Direnç (1)
- 2W 3.3k Direnç (1)
- IN4007 Diyot (4)
- 3.6v Zener Diyot (1)
- 10k Potansiyometre (veya Ön Ayarlı) (1)
- 50v 1uf Kapasitör
- 50v 10uf Kapasitör (2)
- BreadBoard
- Atlama Teli
- Raspberry Pi'nin Kullanımı için Diğer Aksesuarlar.
Yukarıda listelenen donanım bileşenlerinin yanı sıra, proje, ilerledikçe kuracağımız bazı yazılım bağımlılıkları ve kitaplıkları da gerektirmektedir.
Bu eğitim, kullanılan ahududu pi işletim sisteminden bağımsız olarak çalışacak olsa da, bir Pi 3 üzerinde çalışan Raspberry Pi buster işletim sistemini kullanacağım (ayrıca bir Pi 4 üzerinde de çalışmalı) ve Raspberry Pi'yi kurmaya aşina olduğunuzu varsayacağım. Raspbian Buster OS (önceki sürümlerle hemen hemen aynı işlem) ve hyper gibi bir terminal yazılımı kullanarak SSH'yi nasıl yapacağınızı biliyorsunuz. Bunlardan herhangi biriyle ilgili sorunlarınız varsa, bu web sitesinde yardımcı olabilecek tonlarca Raspberry Pi Öğreticisi var.
Pi'yi hazırlamak
Bileşenleri kablolamaya ve kodlamaya başlamadan önce, hazır olduğumuzdan emin olmak için ahududu pi üzerinde gerçekleştirmemiz gereken bazı basit görevler var.
Adım 1: Pi I2C'yi Etkinleştirme
Bugünün projesinin merkezinde sadece ahududu pi değil, ADS1115 16bit I2C tabanlı ADC var. ADC, analog sensörleri Raspberry Pi'ye bağlamamıza izin verir çünkü Pi'nin kendisinde dahili bir ADC yoktur. Verileri kendi ADC'si aracılığıyla alır ve I2C aracılığıyla ahududu pi'ye iletir. Bu nedenle, Pi ile iletişim kurabilmesi için I2C iletişimini etkinleştirmemiz gerekir.
Pi'nin I2C veriyolu, ahududu pi'nin yapılandırma sayfası aracılığıyla etkinleştirilebilir veya devre dışı bırakılabilir. Başlatmak için, masaüstündeki Pi Simgesine tıklayın ve tercihleri ve ardından Raspberry pi yapılandırmasını seçin.
Bu, yapılandırma sayfasını açmalıdır. I2C için etkinleştirilmiş radyo düğmesini kontrol edin ve değişiklikleri etkilemek için kaydetmek ve Pi'yi yeniden başlatmak için Tamam'a tıklayın.
Pi'yi başsız modda çalıştırıyorsanız, Raspbian yapılandırma sayfasına sudo raspi-config çalıştırılarak erişilebilir .
Adım 2: ADS11xx kitaplığını Adafruit'den yükleme
Yapmamız gereken ikinci şey, ADC'den değerleri almak için bir python betiği yazmamızı kolaylaştıran işlevler ve rutinler içeren ADS11xx python kitaplığını kurmaktır.
Bunu yapmak için aşağıdaki adımları izleyin.
- Pi'nizi çalıştırarak güncelleyin; apt-get update sudo takip göre sudo apt-get yükseltme yüklemeyi seçtiğiniz herhangi bir yeni yazılım için herhangi bir uyumluluk sorunları vardır sağlanması pi güncelleyecektir bu.
- Ardından, ana dizinde olduğunuzdan emin olmak için cd ~ komutunu çalıştırın.
- Ardından, çalıştırarak yapı temellerini kurun; sudo apt-get install build-essential python-dev python-smbus git
- Ardından, ADS kitaplığını içeren Adafruit git klasörünü çalıştırarak klonlayın; git klon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Klonlanan dosyanın dizinine geçin ve kurulum dosyasını kullanarak çalıştırın; cd Adafruit_Python_ADS1x1z ve ardından sudo python setup.py install
Bunu yaptıktan sonra kurulum tamamlanmış olmalıdır.
Aşağıdaki şemalar bölümünde gösterildiği gibi ADS1115'i bağlayarak kütüphane kurulumunu test edebilir ve kütüphane ile gelen örnek kodu önce; ile klasörüne geçerek çalıştırabilirsiniz. cd örnekleri ve örneği kullanarak çalıştırmak; python simpletest.py
Adım 3: Adafruit.IO Python Modülünü Kurun
Tanıtımlarda da belirtildiği gibi, voltaj ve akım sensörlerinden Adafruit IO Cloud'a dünyanın her yerinden görüntülenebileceği veya istediğiniz eylemleri gerçekleştirmek için IFTTT ile bağlantılı olarak okumaları yayınlayacağız.
Adafruit.IO python modülü, verileri buluta kolayca aktarmak için kullanacağımız alt yordamları ve işlevleri içerir. Modülü kurmak için aşağıdaki adımları izleyin.
- Ana dizine dönmek için cd ~ komutunu çalıştırın.
- Ardından komutu çalıştırın; sudo pip3 adafruit-io yükleyin . Adafruit IO python modülünü kurmalıdır.
Adım 4: Adafruit.io Hesabınızı Kurun
Adafruit IO'yu kullanmak için kesinlikle önce bir hesap oluşturmanız ve bir AIO anahtarı almanız gerekecektir. Kullanıcı adınızla birlikte bu AIO anahtarı, python betiğiniz tarafından Adafruit IO bulut hizmetine erişmek için kullanılacaktır. Bir hesap oluşturmak için ziyaret edin; https://io.adafruit.com/, ücretsiz başla düğmesine tıklayın ve gerekli tüm parametreleri doldurun. Kayıt işlemi tamamlandığında, ana sayfanızın sağ tarafında AIO Anahtarını Görüntüle düğmesini görmelisiniz.
AIO anahtarınızı almak için üzerine tıklayın.
Anahtar kopyalandığında gitmeye hazırız. Ancak bulut hizmetine veri gönderme sürecini kolaylaştırmak için verinin gönderileceği beslemeleri de oluşturabilirsiniz. (AIO beslemelerinin ne olduğu hakkında daha fazla bilgiyi burada bulabilirsiniz). Temelde Güç tüketimini göndereceğimiz için, güç için bir besleme oluşturacağız. Bir besleme oluşturmak için, AIO sayfasının üstündeki "beslemeler" e tıklayın ve yeni besleme ekle'ye tıklayın.
İstediğiniz adı verin ama işleri basitleştirmek için ona enerji tüketimi diyeceğim. Ayrıca voltaj ve akım için beslemeler oluşturmaya karar verebilir ve verileri bunlara yayınlamak için kodu uyarlayabilirsiniz.
Tüm bunlar yerine getirildiğinde, artık projeyi inşa etmeye hazırız.
Pi Enerji Ölçer Devre Şeması
Raspberry Pi Energy Monitor projesinin şemaları nispeten karmaşıktır ve daha önce belirtildiği gibi bir AC voltajına bağlanmayı içerir, lütfen elektrik çarpmasını önlemek için gerekli tüm önlemleri aldığınızdan emin olun. AC voltajlarını güvenli bir şekilde kullanma konusunda bilginiz yoksa, bunu bir devre tahtasında, güç vermeden, tatminkar bir şekilde uygulamanın keyfini çıkarın.
Şematik, voltaj ve akım sensörleri ünitesini ADC'ye bağlamayı ve ardından sensörlerden verileri Raspberry Pi'ye göndermeyi içerir. Bağlantıların izlenmesini kolaylaştırmak için, her bir ünite için şemalar kendi başına sunulmuştur.
Akım Sensör Şeması
Akım sensörü için bileşenleri aşağıdaki şemalarda gösterildiği gibi bağlayın.
Bu projede kullanılan akım trafosu aşağıda görüldüğü gibi ondan üç telimiz var, yani toprak, Cout ve 3.3V.
Gerilim Sensörü Şemaları
Voltaj sensörünün bileşenlerini aşağıdaki şemalarda gösterildiği gibi bağlayın.
İşleme ünitesi Şemaları
Ahududu pi'ye bağlı ADC (ADS1115) ve sırasıyla ADS1115'in A0 ve A1 pinlerine bağlı akım ve voltaj sensörlerinin çıkışıyla her şeyi birbirine bağlayın.
Her iki algılama biriminin GND pinlerinin ADC'nin GND'sine veya ahududu pi'ye bağlı olduğundan emin olun.
İşleri biraz daha az sarsmak için, bir Protoboard üzerinde voltaj ve akım sensörlerini uyguladım. Ayrıca, devre tahtasında bir AC şebeke devresi kurulması tavsiye edilmez. Aynısını yaparsanız, son kurulumunuz aşağıdaki resimdeki gibi görünebilir;
Bağlantılar tamamlandıktan sonra artık proje kodunu yazmaya hazırız.
Pi Enerji Ölçer için Python Kodu
Ahududu pi projelerimizde her zaman olduğu gibi, proje kodunu python kullanarak geliştireceğiz. Masaüstündeki ahududu pi simgesine tıklayın, programlamayı seçin ve kullanmak istediğiniz python sürümünü başlatın. Python 3 kullanacağım ve python 3'teki bazı işlevler python 2.7 için çalışmayabilir. Dolayısıyla, python 2.7 kullanmak istiyorsanız, kodda bazı önemli değişiklikler yapmanız gerekebilir. Kodu küçük parçalara ayıracağım ve sonunda kodun tamamını sizinle paylaşacağım.
Hazır? Güzel.
Kodun arkasındaki algoritma basittir. Python betiğimiz, voltaj ve akım okumaları için ADS1115'i (I2C üzerinden) sorgular. Alınan analog değer alınır, örneklenir ve gerilim ve akımın ortalama karekök değeri elde edilir. Kilowatt cinsinden güç hesaplanır ve belirli aralıklarla Adafruit IO beslemesine gönderilir.
Komut dosyasına, kullanacağımız tüm kütüphaneleri dahil ederek başlıyoruz. Bu, zaman ve matematik kitaplığı gibi yerleşik kitaplıkları ve daha önce kurduğumuz diğer kitaplıkları içerir.
zaman içe aktar Adafruit_ADS1x15'i Adafruit_IO'dan içe aktar içe aktar * matematik içe aktar
Ardından, fiziksel ADC'yi ele almak için kullanılacak ADS1115 kitaplığının bir örneğini oluşturuyoruz.
# Bir ADS1115 ADC (16 bit) örneği oluşturun.. adc1 = Adafruit_ADS1x15.ADS1115 ()
Ardından, adafruit IO kullanıcı adınızı ve "AIO" anahtarınızı sağlayın.
username = 'bu tırnak işaretleri arasına kullanıcı adınızı girin' AIO_KEY = 'aio anahtarınız' aio = Müşteri (kullanıcı adı, AIO_KEY)
Lütfen anahtarı güvende tutun. Adafruit io hesabınıza izniniz olmadan erişmek için kullanılabilir.
Daha sonra, ADC için kazanç, istediğimiz örnek sayısı gibi bazı değişkenler oluşturuyoruz ve kesinlikle kritik olmayan yuvarlamayı ayarlıyoruz.
KAZANÇ = 1 # potansiyel değerler için ads1015 / 1115 belgelerine bakın. örnekler = 200 # reklamlardan alınan örnek sayısı1115 yer = int (2) # set yuvarlama
Ardından, akımı ve gerilimi izlemek için bir süre döngüsü oluşturuyoruz ve verileri aralıklarla Adafruit io'ya gönderiyoruz. While döngüsü, tüm değişkenleri sıfıra ayarlayarak başlar.
while True: # değişkenleri sıfırla say = int (0) datai = datav = maxIValue = 0 #max örnek içindeki akım değeri maxVValue = 0 #max örnek içindeki gerilim değeri IrmsA0 = 0 #root ortalama kare akım VrmsA1 = 0 # kök ortalama kare voltaj ampsA0 = 0 # akım tepe voltajıA1 = 0 # voltaj kilowatt = float (0)
AC devreleri ile çalıştığımız için SCT-013'ün çıkışı ve gerilim sensörü bir sinüs dalgası olacaktır, bu nedenle sinüs dalgasından akım ve gerilimi hesaplamak için tepe değerleri almamız gerekecek. Tepe değerleri elde etmek için hem voltajı hem de akımı (200 örnek) örnekleyeceğiz ve en yüksek değerleri (tepe değerleri) bulacağız.
aralıktaki sayım için (örnekler): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # eğer datai> maxIValue: maxIValue = datai if datav> maxVValue: maxVValue = datav ise yeni bir maxValue baskınız (datai) olup olmadığına bakın
Ardından, ADC değerlerinden gerçek değere dönüştürerek değerleri standartlaştırıyoruz ve ardından RMS voltajını ve akımını bulmak için Ortalama Karekök denklemini kullanıyoruz.
# örneklenmiş verileri kullanarak akımı hesaplayın # kullanılan sct-013, 1000mV çıkış @ 30A için kalibre edilir. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0, yerler) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0, basamaklar) # Voltajı hesapla VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = round (VrmsA1, yerler) voltA1 = VrmsA1 / math.sqrt (2) voltA1 = round (voltA1, yerler) print ('Voltaj: {0}'. format (voltA1)) print ('Akım: {0} '. Biçim (ampsA0))
Bu yapıldığında güç hesaplanır ve veriler adafruit.io'da yayınlanır.
#calculate güç gücü = yuvarlak (ampsA0 * voltA1, yerler) print ('Güç: {0}'. format (güç)) # adafruit.io'ya veri gönder EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', güç)
Ücretsiz hesaplar için adafruit, istekler veya veri yükleme arasında biraz zaman gecikmesi olmasını talep eder.
# Döngü süresini tekrarlamadan önce bekleyin. Uyku (0)
Tam kod projesi için bu sayfanın alt kısmında mevcuttur
Demo
Kod tamamlandıktan sonra kaydedin ve python IDE'deki çalıştır düğmesine basın. Bundan önce, Pi'nin internete WiFi veya LAN üzerinden bağlandığından ve aio anahtarınızın ve kullanıcı adınızın doğru olduğundan emin olun. Bir süre sonra, Adafruit.io'daki beslemede görüntülenen enerji verilerini (güç) görmeye başlamalısınız. Demo sırasında donanım kurulumum şöyle oldu
İşleri daha da ileri götürmek için, adafruit.io'da bir gösterge panosu oluşturabilir ve aşağıdaki resimde gösterildiği gibi verilerin grafiksel bir görünümünü elde etmek için bir grafik bileşeni ekleyebilirsiniz.
İşte bu çocuklar, artık enerji tüketiminizi dünyanın her yerinden izleyebilirsiniz. Bunu gerçekten doğru bir çözüme dönüştürmek için kesinlikle çok daha fazla ince ayar ve kalibrasyon yapılması gerektiğine dikkat etmek önemlidir, ancak bunun size devam etmeniz gereken hemen hemen her şeyi verdiğine inanıyorum.
Yorum bölümü aracılığıyla bana proje hakkında soru sormaktan çekinmeyin. Mümkün olduğunca çok cevap vermeye çalışacağım. Bir dahaki sefere kadar.