فهرست مطالب:

مانیتور قبض انرژی شما: 4 مرحله
مانیتور قبض انرژی شما: 4 مرحله

تصویری: مانیتور قبض انرژی شما: 4 مرحله

تصویری: مانیتور قبض انرژی شما: 4 مرحله
تصویری: گوز زدن پریانکا چوپرا هنرپیشه بالیوود در یکی از برنامه های لایف تلویزیونی |C&C 2024, نوامبر
Anonim
مانیتور قبض انرژی شما
مانیتور قبض انرژی شما

در مورد این پروژه

اگر واقعاً می خواهید خانه خود را باهوش تر کنید ، احتمالاً می خواهید از قبض های ماهانه خود (یعنی انرژی ، گاز و غیره …) شروع کنید. همانطور که برخی می گویند ، Good for Planet ، The Wallet و The Bottom Line. سخت افزار منبع باز راه ما برای دستیابی به پایداری در محیط خانه است! این ایده ما را مجبور به ساخت یک راه حل ساده و ایمن کرد که به آسانی با هر نرم افزار اتوماسیون خانگی ادغام می شود زیرا داده ها را در MQTT نشان می دهد (در مورد ما ما به شما نحوه ادغام آن با دستیار خانگی را نشان خواهیم داد).

بررسی اجمالی

برای اندازه گیری مصرف انرژی الکتریکی ، ما از Finder Energy Meter استفاده کردیم ، زیرا برای استفاده از ریل DIN طراحی شده است و کاملاً در کابینت اصلی خانه ما جا می گیرد. نکته جالب در مورد این محصول این است که دارای رابط RS485 Modbus است ، یک پروتکل ارتباطی استاندارد صنعتی که صحبت با Arduino را بسیار آسان می کند. در واقع ، آردوینو یک سپر رسمی ، MKR485 و دو کتابخانه را برای رمزگشایی پروتکل منتشر کرده است. ما به عنوان صفحه اصلی ، Arduino MKR WiFi 1010 را انتخاب کردیم ، زیرا فاکتور فرم MKR را دارد و دارای اتصال WiFi است.

SetupWarning! قوانین کشور خود را در مورد برخورد با سیستم برق خانه خود بررسی کنید و بسیار مراقب باشید زیرا می تواند کشنده باشد! اگر نمی دانید چگونه با برقکار تماس بگیرید. اولین قدم این است که کنتور را در کابینت برقی خود نصب کنید. برای اطمینان از اینکه در محیطی ایمن کار می کنید ، برق ترمینال الکتریکی را قبل از سیستم خود خاموش کرده و با مولتی متر دوبار بررسی کنید که ولتاژی بین پایانه ها وجود ندارد. سپس کنتور انرژی را داخل کابینت خود قرار دهید و سیمهای زنده و خنثی را از شکن اصلی به ورودی کنتور متصل کنید ، به یاد داشته باشید که از کنوانسیون رنگ (آبی برای خنثی و قهوه ای/سیاه/خاکستری برای زندگی در اتحادیه اروپا) استفاده کنید. خروجی باید به بقیه سیستم متصل شود.

اتصالات اصلی ولتاژ سیمهای بالا ورودی هستند ، سیمهای خارج از آن خروجی هستند.

مرحله 1: قطعات مورد نیاز

قطعات مورد نیاز
قطعات مورد نیاز

مرحله 2: نیازهای نرم افزاری

نیازهای نرم افزاری
نیازهای نرم افزاری

نرم افزار

رایانه خود را راه اندازی کرده و IDE خود را باز کنید. می توانید از Arduino IDE یا Arduino Create Editor استفاده کنید. کد درخواستهای زیر را برآورده می کند: ارتباط Modbus ، مدیریت WiFi پروتکل MQTT Modbus یک پروتکل منبع باز برای سنسورها و ماشین های صنعتی است. برای ایجاد آردوینو در مورد Modbus ، ما از کتابخانه Arduino Modbus استفاده می کنیم. این کتابخانه همه کنترل کننده ها را بسته بندی می کند و اتصال هر دستگاه Modbus را به سرعت انجام می دهد. از آنجا که ما قصد داریم رجیسترها را بخوانیم ، پس از برگه داده متر ، می توانیم تمام اطلاعات مورد نیاز خود را مانند کدهای عملکرد ، آدرس ثبات و اندازه ثبت در کلمات پیدا کنیم. اما برای روشن تر شدن مطلب ، نحوه کار Modbus را توضیح دهید: پیام های Modbus از یک ساختار ساده پیروی می کنند: 01 03 04 00 16 00 02 25 C7 0x01 آیا آدرس دستگاه 0x03 کد عملکردی است که به دستگاه می گوید که آیا می خواهیم داده ها را بخوانیم یا بنویسیم *، در این مورد ، رجیسترهای نگهداری 0x04 را برای Byte Count00 16 بخوانید - ما 4 بایت آدرس ثبت نام (00 16) را ارسال می کنیم که به دستگاه می گوید آنچه می خواهیم 00 02 را بخوانیم - سپس اندازه ثبت (00 02) به صورت کلمات (هر کلمه 2 بایت طول دارد) 4 بایت آخر کد CRC است. این کد از یک تابع ریاضی نسبت به بایت های قبلی تولید می شود ، این امر اطمینان می دهد که پیام به درستی دریافت شده است.

افزودن متر به دستیار خانه بسیار ساده است. با فرض اینکه یک کارگزار MQTT پیکربندی شده است (در اینجا راهنما آمده است) ، تنها کاری که باید انجام دهید این است که تعاریف جدیدی را در زیر فایل configuration.yaml اضافه کنید. سنسور: - پلت فرم: نام mqtt: "ولتاژ اصلی" state_topic: "energy/main/voltage" unit_of_measurement: "V" در اینجا شما باید نام اندازه گیری ، موضوع MQTT را برای خواندن و واحد اندازه گیری مقدار قرار دهید. فایل را ذخیره کنید ، پیکربندی را بررسی کرده و Home Assistant را دوباره بارگیری کنید ، اکنون اندازه گیری ها در صفحه اصلی ظاهر می شود.

پنل مصرف دستیار خانگی که قرائت فعلی را نشان می دهد

دستیار خانگی از ایجاد نمودارها و خودکارسازی فرآیندهای ایجاد شده توسط قرائت های شما مراقبت می کند. این آموزش به پایان رسید ، اکنون به شما بستگی دارد که ویژگی ها را اضافه کرده و آن را برای اهداف خود سفارشی کنید!

مرحله 3: جمع آوری

جمع کنید
جمع کنید
جمع کنید
جمع کنید

انجام شده؟ وقت آن است که اتصال RS485 را خراب کنید! ما از کابل پیچ خورده تک جفت با زمین استفاده می کنیم که معمولاً برای خطوط تلفن استفاده می شود. با استفاده از این کابل می توانید مسافت زیادی (1.2 کیلومتر) را انتقال دهید. با این حال ، ما فقط از یک کابل به اندازه کافی برای خروج از کابینت و قرار دادن آردوینو در مکانی قابل دسترس استفاده می کنیم.

اتصال Finder RS485

رابط RS485 پایانه های خود را A ، B و COM نامگذاری می کند. یک استاندارد معمول معمول استفاده از TX+/RX+ یا D+ به عنوان جایگزینی برای B (زیاد برای MARK یعنی بیکار) ، TX-/RX- یا D- به عنوان جایگزین برای A (کم برای MARK یعنی بیکار) از آنجا MKR shield از Full Duplex نیز پشتیبانی می کند ، دو پایانه دیگر Y و Z را مشاهده خواهید کرد. در اینجا ما قصد داریم انتهای دیگر کابل را به هم بزنیم زیرا از برگه اطلاعات می دانیم که ارتباطات نیمه دو طرفه فقط در پایانه های Y و Z اتفاق می افتد. پایانه COM باید به ISOGND متصل شود. از آنجا که ما از یک اتصال نیمه دوطرفه استفاده می کنیم و از آنجا که کابل کشی همتا به همتا است ، باید سوئیچ ها را روی سپر MKR485 تنظیم کنیم تا با تنظیمات ما مطابقت داشته باشد: ما HALF (2 تا خاموش) و خاتمه را روی YZ (3 تا) تنظیم می کنیم. بر)؛ اولی مهم نیست خاتمه مقاومتی است که دو پایانه داده را به هم متصل می کند تا تداخل را تضعیف کند.

این است. حالا می توانید کابینت را ببندید و روی نرم افزار تمرکز کنید!

مرحله 4: کد

کد
کد

#عبارتند از

#include #include #include // اعتبارنامه wifi شما const char ssid = "**********"؛ const char pass = "**********"؛

شبکه WiFiClient ؛ مشتری MQTTClient ؛ نرخ بلند بدون امضا = 60000 ؛ // نرخ تازه سازی پیش فرض در ms unsigned long lastMillis = 0؛

// اتصال عملکرد void connect () {Serial.print ("در حال بررسی wifi …") ؛ while (WiFi.status ()! = WL_CONNECTED) {Serial.print (".")؛ تاخیر (1000) ؛ } Serial.print ("\ n اتصال…")؛ while (! client.connect ("device_name"، "user_name"، "user_pw")) {// CHANGE TO MATCH YET SETUP Serial.print (".")؛ تاخیر (1000) ؛ } Serial.println ("\ n متصل نیست!")؛ client.subscribe ("energy/main/refreshrate")؛ // موضوع برای تنظیم نرخ بازخوانی از راه دور} // mqtt دریافت عملکرد بازخوانی پیام void if (topic == "energy/main/refreshrate") {// نرخ تجدید نرخ کنترل = payload.toInt ()*1000؛ Serial.println ("نرخ جدید"+رشته (نرخ)) ؛ }}

void setup () {Serial.begin (115200)؛ WiFi.begin (ssid ، pass) ؛ در حالی که (! سریال) ؛ client.begin ("broker_ip"، net)؛ // CHANGE TO MATCH YET SETUP client.onMessage (messageReceived)؛ // سرویس گیرنده Modbus RTU را در صورت شروع (! ModbusRTUClient.begin (9600)) {Serial.println ("راه اندازی Modbus RTU Client ناموفق بود!") ؛ در حالی که (1) ؛ }}

void loop () {client.loop ()؛ if (! client.connected ()) {// اتصال شبکه را بررسی کنید ()؛ } // بعد از به روزرسانی (روال غیر مسدود کننده) if (millis () - lastMillis> rate) {lastMillis = millis () ، پیامی را منتشر کنید. // همه تماس های خوانده شده را float volt = readVoltage () کنید. تأخیر (100) ؛ float amp = readCurrent ()؛ تأخیر (100) ؛ دو وات = readPower ()؛ تأخیر (100) ؛ float hz = readFreq ()؛ تأخیر (100) ؛ double wh = readEnergy ()؛ // انتشار نتایج تحت موضوعات مرتبط client.publish ("انرژی/اصلی/ولتاژ" ، رشته (ولت ، 3)) ؛ client.publish ("انرژی/اصلی/جاری" ، رشته (آمپر ، 3)) ؛ client.publish ("انرژی/اصلی/قدرت" ، رشته (وات ، 3)) ؛ client.publish ("انرژی/اصلی/فرکانس" ، رشته (هرتز ، 3)) ؛ client.publish ("انرژی/اصلی/انرژی" ، رشته (wh ، 3)) ؛ Serial.print (رشته (ولت ، 3)+"V"+رشته (آمپر ، 3)+"A"+رشته (وات ، 3)+"W") ؛ Serial.println (String (hz، 3)+"Hz"+String (wh، 3)+"kWh")) ؛ تأخیر (100) ؛ }}

/ * عملکردهای خواندن رجیسترهای Finder Energy Meter * * راهنمای پروتکل modbus را برای درک کد بررسی کنید * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float ولت = 0.؛ if (! ModbusRTUClient.requestFrom (0x01، HOLDING_REGISTERS، 0x000C، 2)) {// با رجیستر تماس بگیرید Serial.print ("ولتاژ خوانده نشد!") ؛ Serial.println (ModbusRTUClient.lastError ()) ؛ // error handler} else {uint16_t word1 = ModbusRTUClient.read ()؛ // خواندن داده ها از بافر uint16_t word2 = ModbusRTUClient.read ()؛ uint32_t millivolt = word1 << 16 | word2؛ // بیت ریاضی ولت = میلی ولت/1000.0 ؛ } بازگشت ولت ؛ } float readCurrent () {float ampere = 0.؛ if (! ModbusRTUClient.requestFrom (0x01، HOLDING_REGISTERS، 0x0016، 2)) {Serial.print ("خواندن فعلی ناموفق بود!")؛ Serial.println (ModbusRTUClient.lastError ()) ؛ } else {uint16_t word1 = ModbusRTUClient.read ()؛ uint16_t word2 = ModbusRTUClient.read ()؛ int32_t milliamp = word1 << 16 | word2؛ آمپر = میلی آمپر/1000.0 ؛ } بازگشت آمپر ؛ }

double readPower () {double watt = 0.؛ if (! ModbusRTUClient.requestFrom (0x01، HOLDING_REGISTERS، 0x0025، 3)) {Serial.print ("قدرت خوانده نشد!")؛ Serial.println (ModbusRTUClient.lastError ()) ؛ } else {uint16_t word1 = ModbusRTUClient.read ()؛ uint16_t word2 = ModbusRTUClient.read ()؛ uint16_t word3 = ModbusRTUClient.read ()؛ uint64_t میلی وات ؛ if (word1 >> 7 == 0) {milliwatt = word1

توصیه شده: