مانیتور هوشمند انرژی ، به منظور پوشاندن کل آپارتمان، راهی را برای شما فراهم میکند تا میزان مصرف خود را مدیریت کنید و تنظیمات لازم را انجام دهید. در حالی که آنها به طور فزایندهای در بازار در دسترس هستند، ما هنوز احساس میکنیم که ساخت نسخه DIY که میتواند متناسب با نیازهای خاص باشد، ایده خوبی خواهند بود. به همین ترتیب، برای آموزش امروز، ما یک مانیتور مصرف برق Raspberry Pi ساختیم که قادر به مصرف انرژی و بارگذاری در Adafruit.io میباشد.
فهرست مطالب
بلوک دیاگرام اندازهگیری انرژی هوشمند Raspberry Pi
نمودار بلوکی که نحوه عملکرد سیستم را نشان میدهد، در زیر نشان داده شده است.
انتخاب واحدها یکی پس از دیگری
واحد سنجش فعلی: واحد سنجش کنونی از حسگر جریان SCT -013 تشکیل شده است که بسته به نسخهای که خریداری میکنید، میتواند تا 100A را اندازهگیری کند. سنسور جریان عبور شده از سیم را كه روی آن وصل شده است، به جریان كوچك تبدیل میكند كه از طریق شبكهای از تقسیمكننده ولتاژ به ADC تغذیه میشود.
واحد سنجش ولتاژ: ما یک سنسور ولتاژ ترانسفورماتور DIY ایجاد میکنیم که ولتاژ را با استفاده از اصل تقسیم ولتاژ اندازهگیری میکند. سنسور ولتاژ DIY شامل مرحله تقسیم ولتاژ است که ولتاژ بالا به مقداری مناسب برای ورودی به ADC تبدیل میشود.
واحد پردازش: واحد پردازش شامل ADC و Raspberry pi است. ADC سیگنال آنالوگ را میگیرد و آن را به raspberry pi میفرستد، که در آن مقدار دقیق نیرویی که مصرف میشود محاسبه میکند و آن را به یک دستگاه (ابری) کلودی مشخص شده میفرستد. به منظور استفاده از این آموزش، ما از Adafruit.io به عنوان دستگاه ابری (کلودی) استفاده خواهیم کرد.
سلب مسئولیت: قبل از شروع، ذکر این نکته ضروری است که این پروژه شامل اتصال به منبع تغذیهای است که خطرناک است و اگر امنیت را در نظر نگیرید، میتواند کشنده باشد. اطمینان حاصل کنید که قبل از انجام این کار تجربه کار با AC را دارید.
قطعات موردنیاز مانیتور هوشمند انرژی
برای ساخت این پروژه اجزای زیر مورد نیاز است.
- Raspberry Pi 3 or 4 (فرایند باید برای RPI2 با WiFi دانگل یکسان باشد)
- ADS1115 16bit I2C ADC
- YHDC SCT-013-000
- آداپتور برق 2.5A 5V MicroUSB
- مقاومت 10K 2W(1)
- مقاومت 10K 1/2W(2)
- مقاومت 33ohms(1)
- مقاومت 3k 2w(1)
- دیود IN4007 (4)
- دیود زنر 6v(1)
- پتانسیلومتر 10k (یا Preset) (1)
- خازن 1uf 50V
- خازن 10uf 50V(2)
- بردبورد
- سیم اتصال
- سایر لوازم جانبی برای استفاده Raspberry Pi
علاوه بر مؤلفههای سختافزاری که در بالا ذکر شد، این پروژه همچنین به برخی از وابستگیها و کتابخانههای نرمافزاری احتیاج دارد که هنگام ادامه کار نصب خواهیم کرد.
در حالی که این آموزش صرفنظر از Raspberry Pi OS استفاده خواهد شد، ما از Raspberry Pi buster OS که روی یک Pi 3 اجرا میشود استفاده میکنیم (باید روی یک Pi 4 نیز کار کنید) و فرض میکنیم شما با راهاندازی Raspberry Pi با سیستم عامل Raspbian Buster آشنا هستید و میدانید چگونه با استفاده از یک نرم افزار ترمینال مانند Hyper ،SSH را وارد کنید.
آمادهسازی Pi برای مانیتور هوشمند انرژی
قبل از شروع سیمکشی قطعات و برنامه نویسی، کارهای سادهای وجود دارد که ما باید روی raspberry pi انجام دهیم تا مطمئن شویم که آماده انجام هستیم.
فعال کردن Pi I2C
در هسته اصلی پروژه امروز نه تنها raspberry pi بلکه ADC1115 16bit I2C مبتنی بر ADC است. ADC به ما این امکان را میدهد تا سنسورهای آنالوگ را به Raspberry Pi متصل کنیم زیرا خود Pi دارای ADC داخلی نیست.
این داده را از طریق ADC خود میگیرد و از طریق I2C آن را به سمت raspberry pi منتقل میکند. به همین ترتیب، باید ارتباط I2C را روی Pi فعال کنیم تا بتواند با آن ارتباط برقرار کند.
مسیر Pi I2C را میتوان از طریق صفحه پیکربندی raspberry pi فعال یا غیرفعال کرد. برای راهاندازی آن، بر روی Pi Icon در دسکتاپ کلیک کنید و تنظیمات را دنبال کنید و پیکربندی Raspberry pi را انتخاب کنید.
این باید صفحه پیکربندی را باز کند. دکمه رادیویی فعال شده را برای I2C بررسی کنید و بر روی OK کلیک کنید تا آن را ذخیره کنید و Pi را راهاندازی مجدد کنید تا تغییرات انجام شود.
اگر Pi را در حالت headless اجرا میکنید، با اجرای sudo raspi-config میتوانید به صفحه تنظیمات Raspbian دسترسی پیدا کنید.
نصب کتابخانه ADS11xx از Adafruit
دومین موردی که ما باید انجام دهیم نصب کتابخانه پایتون ADS11xx است که شامل توابع و روالهایی است که نوشتن یک اسکریپت پایتون را برای ما آسان میکند تا مقادیر ADC را بدست آورد. برای انجام این کار مراحل زیر را دنبال کنید.
- Pi خود را با اجرا به روزرسانی کنید. sudo apt-get update به پیروی از sudo apt-get upgrade . این باعث میشود تا pi اطمینان حاصل شود که هیچ مشکلی برای سازگاری برای هیچ نرمافزاری جدیدی که برای نصب انتخاب میکنید وجود نداشته باشد.
- در مرحله بعدی، دستور cd ~ را اجرا کنید تا اطمینان حاصل کنید که در فهرست راهنما هستید.
- در مرحله بعد ملزومات را با اجرا کردن آن نصب کنید؛ sudo apt-get install build-essential python-dev python-smbus git
- سپس، فایل Adafruit git را که حاوی کتابخانه ADS است، با اجرا کلون کنید. git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- به فهرست فایل کلون شده تغییر دهید و فایل راهاندازی را اجرا کنید؛ cd Adafruit_Python_ADS1x1z followed by sudo python setup.py install
اکنون نصب باید کامل شود. میتوانید با اتصال ADS1115 همانطور که در بخش schematics در زیر نشان داده شده است، نصب کتابخانه را آزمایش کنید و کد نمونه ای را که ابتدا با کتابخانه همراه بود اجرا کنید.
ماژول Adafruit.IO Python را نصب کنید.
همانطور که در طی مقدمات ذکر شد، ما خوانشهایی را از سنسورهای ولتاژ و جریان تا Adafruit IO Cloud منتشر خواهیم کرد که از آن میتوان در سراسر جهان مشاهده کرد یا با IFTTT متصل شد تا هر کاری را که میخواهید انجام دهید. ماژول Adafruit.IO python شامل برنامههای فرعی و عملکردهایی است که ما از آنها استفاده خواهیم کرد تا بتوانیم دادهها را به راحتی به کلودی انتقال دهیم. برای نصب ماژول مراحل زیر را دنبال کنید.
- برای بازگشت به فهرست راهنما، cd Run را اجرا کنید.
- بعد، دستور sudo pip3 install adafruit-io را اجرا کنید. باید ماژول Adafruit IO python را نصب کنید.
اکانت Adafruit.io خود را تنظیم کنید.
برای استفاده از Adafruit IO قطعاً باید ابتدا یک حساب کاربری ایجاد کنید و یک کلید AIO را بدست آورید. این کلید AIO به همراه نام کاربری شما توسط اسکریپت پایتون برای دسترسی به سرویس کلودی Adafruit IO استفاده میشود.
برای به دست آوردن کلید AIO روی آن کلیک کنید.
با کلید کپی شده، ما آمادهایم تا ادامه کار را انجام دهیم. با این حال، برای سادهتر کردن روند ارسال داده به سرویس ابری (کلودی)، میتوانید فیدهایی را که برای آن ارسال میشود ایجاد کنید. از آنجایی که ما اساساً مصرف برق را ارسال میکنیم، یک منبع تغذیه ایجاد میکنیم. برای ایجاد تغذیه، روی “فیدها” در بالای صفحه AIO کلیک کرده و روی افزودن فید جدید کلیک کنید.
هر اسمی را که میخواهید بدهید اما هرچه سادهتر بهتر است، ما آن را مصرف انرژی مینامیم. همچنین میتوانید برای برای ولتاژ و جریان تغذیه (فید) ایجاد کنید و کد را برای انتشار داده با آنها تطبیق دهید. با تمام این کارها، اکنون ما آماده ساخت پروژه هستیم.
نمودار مدار Pi انرژی سنج مانیتور هوشمند انرژی
شماتیک برای پروژه مانیتور انرژی Raspberry Pi نسبتاً پیچیده است و شامل اتصال به یک ولتاژ AC همانطور که قبلاً گفته شد، میباشد. اطمینان حاصل کنید که تمام اقدامات احتیاطی لازم را برای جلوگیری از برقگرفتگی را در نظر بگیرید. اگر با با ولتاژهای AC آشنا نیستید، بگذارید این کار را روی بردبورد انجام دهیم.
این شماتیک شامل اتصال ولتاژ و سنسورهای جریان به ADC است که سپس دادهها را از حسگرها به Raspberry Pi ارسال میکند. برای آسانتر شدن اتصالات، نقشههای هر واحد به صورت اختصاصی ارائه میشود.
سنسور فعلی شماتیک مانیتور هوشمند انرژی
همانطور که در شکل زیر نشان داده شده است، قطعات را برای سنسور فعلی متصل کنید.
ترانسفورماتور فعلی مورد استفاده در این پروژه در زیر نشان داده شده است، همانطور که میبینید ما سه سیم از آن داریم که شامل: زمین (ground)، Cout و 3.3V میباشند.
شماتیک سنسور ولتاژ
همانطور که در شکل زیر نشان داده شده است، اجزای سنسور ولتاژ را متصل کنید.
واحد شماتیک پردازش
همه چیز را با (ADS1115)ADC به raspberry pi وصل کنید و خروجی سنسورهای جریان و ولتاژ متصل به پین A0 و A1 ADS1115 را به ترتیب وصل کنید.
اطمینان حاصل کنید که پینهای GND هر دو واحد به GND ADC یا Raspberry pi متصل شدهاند.
برای اینکه چیزها کمی لرزانتر شوند، سنسورهای ولتاژ و جریان را روی یک Protoboard پیاده کردیم. همچنین، ساخت مدار اصلی AC روی بردبورد توصیه نمیشود. اگر همین کار را انجام دهید، تنظیم نهایی شما ممکن است مانند تصویر زیر باشد؛
با تکمیل اتصالات، اکنون آماده نوشتن کد برای پروژه هستیم.
کد پایتون برای اندازهگیری Pi Energy مانیتور هوشمند انرژی
طبق معمول با پروژههای raspberry pi، ما کد را برای این پروژه با استفاده از پایتون تهیه خواهیم کرد. بر روی نماد raspberry pi روی دسکتاپ کلیک کنید، برنامهنویسی را انتخاب کرده و از نسخه پایتون استفاده کنید. من از پایتون 3 استفاده میکنم و برخی از توابع در پایتون 3 ممکن است برای پایتون 2.7 کار نکنند.
بنابراین اگر میخواهید از پایتون 2.7 استفاده کنید، ممکن است نیاز به ایجاد تغییرات اساسی در کد داشته باشید. من یک قسمت کوچکی از کد را انجام میدهم و در پایان کد کامل را با شما به اشتراک میگذارم.
الگوریتم پشت کد ساده است. اسکریپت پایتون برای خواندن ولتاژ و جریان خواندن، از ADS1115 (بیش از I2C) استفاده میکند. مقدار آنالوگ دریافتی، دریافت و نمونهبرداری شد. توان در کیلووات محاسبه میشود و پس از فواصل زمانی مشخص به Adafruit IO ارسال میشود.
ما اسکریپت را با استفاده از کلیه کتابخانههایی که از آنها استفاده خواهیم کرد شروع میکنیم. این شامل کتابخانههای داخلی مانند کتابخانه زمان و ریاضی و سایر کتابخانههایی است که قبلاً نصب کردیم.
import time import Adafruit_ADS1x15 from Adafruit_IO import * import math
در مرحله بعد، نمونه ای از کتابخانه ADS1115 را ایجاد میکنیم که برای پرداختن به ADC فیزیکی در پیش رو استفاده میشود.
# Create an ADS1115 ADC (16-bit) instance.. adc1 = Adafruit_ADS1x15.ADS1115()
در مرحله بعد، نام کاربری IO adafruit و کلید “AIO” را ارائه دهید.
username = ‘enter your username in between this quotes’ AIO_KEY = 'your aio key' aio = Client(username, AIO_KEY)
لطفاً کلید را ایمن نگه دارید. میتوان از آن برای دسترسی به حساب adafruit io بدون اجازه شما استفاده کرد. در مرحله بعد، ما متغیرهایی مانند بهره برای ADC، تعداد نمونههای مورد نظر خود را ایجاد میکنیم.
GAIN = 1 # see ads1015/1115 documentation for potential values. samples = 200 # number of samples taken from ads1115 places = int(2) # set rounding
سپس، یک حلقه در حالی ایجاد میکنیم که جریان و ولتاژ را کنترل کنیم و دادهها را در فواصل زمانی به Adafruit io ارسال کنیم. حلقه در حالی که با تنظیم همه متغیرها روی صفر شروع میشود.
while True: # reset variables count = int(0) datai = [] datav = [] maxIValue = 0 #max current value within sample maxVValue = 0 #max voltage value within sample IrmsA0 = 0 #root mean square current VrmsA1 = 0 # root mean square voltage ampsA0 = 0 #current peak voltsA1 =0 #voltage kilowatts = float(0)
از آنجا که ما با مدارهای AC کار میکنیم، خروجی SCT-013 و سنسور ولتاژ یک موج سینوسی خواهد بود، بنابراین برای محاسبه جریان و ولتاژ از موج سینوسی، باید مقادیر اوج را بدست آوریم. برای بهدست آوردن مقادیر اوج، هم ولتاژ و هم جریان (200 نمونه) را نمونهبرداری میکنیم و بالاترین مقادیر (مقادیر اوج) را پیدا خواهیم کرد.
for count in range(samples): datai.insert(count, (abs(adc1.read_adc(0, gain=GAIN)))) datav.insert(count, (abs(adc1.read_adc(1, gain=GAIN)))) # see if you have a new maxValue print (datai[count]) if datai[count] > maxIValue: maxIValue = datai[count] if datav[count] > maxVValue: maxVValue = datav[count]
سپس، مقادیر را با تبدیل از مقادیر ADC به مقدار واقعی استاندارد میکنیم و پس از آن از معادله Root Mean Square برای پیدا کردن ولتاژ و جریان RMS استفاده میکنیم.
#calculate current using the sampled data # the sct-013 being used is calibrated for 1000mV output @ 30A. IrmsA0 = float(maxIValue / float(2047) * 30) IrmsA0 = round(IrmsA0, places) ampsA0 = IrmsA0 / math.sqrt(2) ampsA0 = round(ampsA0, places) # Calculate voltage 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))
با این کار، توان محاسبه میشود و دادهها در 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) # Wait before repeating loop time.sleep(0)
نسخه نمایشی مانیتور هوشمند انرژی
با کامل کردن کد، آن را ذخیره کرده و دکمه run را روی Python IDE بزنید. قبل از این، اطمینان حاصل کنید که Pi از طریق WiFi یا LAN به اینترنت وصل شده است و کلید aio و نام کاربری شما صحیح است.
پس از مدتی، شما باید دادههای انرژی (توان) نمایش داده شده را در Adafruit.io نمایش دهید. راه اندازی سختافزار ما در طول نسخهی نمایشی مانند این بود.
برای پیشبرد کارها، میتوانید داشبورد را در adafruit.io ایجاد کرده و یک مؤلفه گرافیکی اضافه کنید تا بتوانید همانطور که در تصویر زیر نشان داده شده است، گرافیکی از دادهها بدست آورید.
اکنون میتوانید میزان مصرف انرژی خود را از هر نقطه از جهان کنترل کنید. توجه به این نکته مهم است که برای تبدیل آن به یک راه حل واقعاً دقیق، قطعاً تنظیمات و کالیبراسیونهای بسیار بیشتری نیز وجود دارد.