Mundarija:

Sizning energiya hisobingiz monitor: 4 qadam
Sizning energiya hisobingiz monitor: 4 qadam

Video: Sizning energiya hisobingiz monitor: 4 qadam

Video: Sizning energiya hisobingiz monitor: 4 qadam
Video: Последствия ПТСР: суицид, депрессия, наркомания | Причины ПТСР у женщин после абьюза | Лечение ПТСР 2024, Noyabr
Anonim
Sizning energiya hisobingiz monitor
Sizning energiya hisobingiz monitor

BU LOYIHA HAQIDA

Agar siz haqiqatan ham uyingizni aqlli qilishni xohlasangiz, ehtimol siz har oylik hisob -kitoblaringizdan (masalan, energiya, gaz va boshqalar) boshlashni xohlaysiz. Ba'zilar aytganidek, sayyora, hamyon va pastki chiziq uchun yaxshi. Ochiq manbali apparat-bu uy sharoitida barqarorlikka erishish yo'limiz! Bu g'oya bizni har qanday uy avtomatlashtirish dasturi bilan birlashtirish oson bo'lgan oddiy va xavfsiz echimni yaratishga olib keldi, chunki u MQTT orqali ma'lumotlarni ochib beradi (bizning holimizda biz sizga uni uy yordamchisiga qanday qo'shish kerakligini ko'rsatamiz).

Sharh

Elektr energiyasi sarfini o'lchash uchun biz Finder energiya o'lchagichidan foydalanishni tanladik, chunki u DIN temir yo'laklari uchun mo'ljallangan va uyimizning asosiy shkafiga juda mos keladi. Ushbu mahsulotning ajoyib tomoni shundaki, u RS485 Modbus interfeysiga ega, bu sanoat standartli aloqa protokoli, bu Arduino bilan gaplashishni juda osonlashtiradi. Aslida, Arduino rasmiy qalqon, MKR485 va ikkita kutubxonani protokolni dekodlash uchun chiqardi. Asosiy karta sifatida biz Arduino MKR WiFi 1010 ni tanladik, chunki u MKR form faktoriga ega va WiFi ulanishi mavjud.

Ogohlantirish! O'z uyingizdagi elektr ta'minoti bilan bog'liq qoidalarni tekshiring va o'ta ehtiyot bo'ling, chunki bu halokatli bo'lishi mumkin! Agar bilmasangiz, elektrchini chaqiring. Birinchi qadam - hisoblagichni elektr kabinetingizga o'rnatish. Xavfsiz muhitda ishlashingizni ta'minlash uchun tizim oldidan elektr terminalining quvvatini o'chiring va terminallar o'rtasida kuchlanish yo'qligini multimetr bilan ikki marta tekshiring. Keyin energiya o'lchagichni kabinetingizga joylashtiring va asosiy uzgichdan hisoblagichning kirish qismiga o'tkazgichli va neytral simlarni ulang, rang konventsiyasidan foydalanishni unutmang (neytral uchun ko'k, Evropa Ittifoqida yashash uchun jigarrang/qora/kulrang). Chiqish tizimning qolgan qismiga ulanishi kerak.

Asosiy kuchlanish ulanishlari. Yuqoridagi simlar - kirish, tashqaridagi simlar - chiqish.

1 -qadam: kerakli qismlar

Kerakli qismlar
Kerakli qismlar

2 -qadam: Needes dasturi

Needes uchun dasturiy ta'minot
Needes uchun dasturiy ta'minot

Dasturiy ta'minot

Kompyuteringizni ishga tushiring va IDE -ni oching. Siz Arduino IDE yoki Arduino Create Editor -dan foydalanishingiz mumkin. Kod quyidagi talablarga javob beradi: Modbus aloqasi, WiFi boshqaruvi Arduino Modbus bilan gaplashish uchun biz Arduino Modbus kutubxonasidan foydalanamiz. Bu kutubxona barcha ishlovchilarni to'playdi va har qanday Modbus qurilmasini juda tez ulash imkonini beradi. Biz registrlarni o'qishni rejalashtirganimiz uchun, hisoblagich ma'lumotlari jadvaliga amal qilgan holda, biz funktsiya kodlari, registr manzili va registrning o'lchami kabi barcha kerakli ma'lumotlarni so'z bilan topa olamiz. Ammo tushunarli bo'lishi uchun Modbus qanday ishlashini tushuntirib beramiz: Modbus xabarlari oddiy tuzilishga amal qiladi: 01 03 04 00 16 00 02 25 C7 0x01 - bu qurilma manzili 0x03 - bu biz o'qish yoki yozishni xohlayotganimizni bildiradigan funktsiya kodi. *, bu holda, Byte Count00 16 uchun 0x04 xolding registrlarini o'qing - Biz 4 baytlik registr manzilini (00 16) yuboramiz, u o'qishni xohlagan narsani 00 02- keyin registrning o'lchamini (00 02) so'z bilan aytadi. (har bir so'z 2 bayt uzunlikda) Oxirgi 4 bayt CRC kodidir. Bu kod oldingi baytlarga nisbatan matematik funktsiyadan yaratilgan bo'lib, bu xabarning to'g'ri qabul qilinishini ta'minlaydi.

Hisoblagichni uy yordamchisiga qo'shish juda oddiy. Agar sizda MQTT brokerining konfiguratsiyasi mavjud deb hisoblasangiz (bu erda ko'rsatma), faqat config.yaml fayli ostiga yangi ta'riflar qo'shish kifoya. sensor: - platforma: mqtt nomi: "Asosiy kuchlanish" holati_topik: "energiya/asosiy/kuchlanish" o'lchov birligi_of: "V" Bu erda o'lchov nomini, o'qiladigan MQTT mavzusini va miqdor o'lchov birligini qo'yish kerak. Faylni saqlang, konfiguratsiyani tekshiring va Home Assistant -ni qayta yuklang, endi o'lchovlar asosiy sahifada paydo bo'ladi.

Hozirgi ko'rsatkichlarni ko'rsatadigan uy yordamchisi iste'mol paneli

Uy yordamchisi grafikalar yaratish va o'qishlaringiz jarayonlarini avtomatlashtirish bilan shug'ullanadi. Bu darslik tugadi, endi siz o'zingizga kerakli funktsiyalarni qo'shishingiz va sozlashingiz kerak!

3 -qadam: yig'ish

Yig'ish
Yig'ish
Yig'ish
Yig'ish

Bajarildi? RS485 aloqasini buzish vaqti keldi! Biz odatda telefon liniyalari uchun ishlatiladigan, er bilan o'ralgan bitta juftlik kabelidan foydalanamiz. Ushbu kabel yordamida siz uzoq masofaga (1,2 km) uzatishingiz mumkin. Biroq, biz kabinetdan chiqish va Arduino -ni kirish mumkin bo'lgan joyga qo'yish uchun etarlicha uzun kabeldan foydalanamiz.

Finder RS485 ulanishi

RS485 interfeysi uning terminallarini A, B va COM deb nomlaydi. Umumiy de-fakto standart- bu B (MARK uchun yuqori, ya'ni bo'sh), TX-/RX- yoki D- ga alternativa sifatida TX+/RX+ yoki D+ dan foydalanish (MARK uchun past, ya'ni bo'sh). MKR qalqoni Full Duplex-ni ham qo'llab-quvvatlaydi, siz boshqa ikkita terminalni ko'rasiz: Y va Z. Bu erda biz kabelning ikkinchi uchini buraymiz, chunki biz ma'lumotlar jadvalidan yarim dupleks aloqa faqat Y va Z terminallarida sodir bo'lishini bilamiz. COM terminali ISOGND ga ulangan bo'lishi kerak. Yarim dupleks ulanishdan foydalanganimiz uchun va kabel tengdosh bo'lgani uchun, biz MKR485 ekranidagi kalitlarni sozlamalarga mos ravishda o'rnatishimiz kerak: biz YARF (2 o'chirilgan) va YZ (3) ON); birinchisi muhim emas. Tugatish shovqinlarni yumshatish uchun ikkita ma'lumot terminalini bog'laydigan qarshilikdir.

Mana shu. Endi siz kabinetni yopib, dasturiy ta'minotga e'tibor qaratishingiz mumkin!

4 -qadam: kod

Kod
Kod

#qo'shing

#include #include #include // wifi hisob ma'lumotlari const char ssid = "**********"; const char pass = "**********";

WiFiClient tarmog'i; MQTTClient mijozi; imzosiz uzoq stavka = 60000; // ms da standart yangilanish tezligi unsigned long lastMillis = 0;

// ulanish funktsiyasi void connect () {Serial.print ("wifi tekshirilmoqda…"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); kechikish (1000); } Serial.print ("\ n ulanmoqda…"); while (! client.connect ("device_name", "user_name", "user_pw")) {// SIZNING O'RNATISHINGIZNI O'ZGARTIRISH Serial.print ("."); kechikish (1000); } Serial.println ("\ n ulangan!"); client.subscribe ("energiya/asosiy/yangilanish"); // yangilanish tezligini masofadan o'rnatish uchun mavzu} // mqtt qayta qo'ng'iroq qilish funktsiyasini qabul qiladi void xabari Qabul qilindi (String va mavzu, String va yuk) {Serial.println ("kiruvchi:" + mavzu + " -" + yuk); if (topic == "energy/main/refreshrate") {// yangilanish tezligini qayta ishlash tezligi = payload.toInt ()*1000; Serial.println ("yangi tarif"+String (tezlik)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! Seriyali); client.begin ("broker_ip", tarmoq); // SIZNING O'RNATISHNI O'ZGARTIRISH mijoz.onMessage (xabar qabul qilindi); // Modbus RTU mijozini ishga tushiring, agar (! ModbusRTUClient.begin (9600)) {Serial.println ("Modbus RTU mijozini ishga tushirib bo'lmadi!"); vaqt (1); }}

void loop () {client.loop (); if (! client.connected ()) {// tarmoq ulanishini tekshiring connect (); } // yangilanish tugagandan so'ng xabarni e'lon qilish (blokirovka qilinmaydigan tartib) if (millis () - lastMillis> rate) {lastMillis = millis (); // barcha o'qilgan qo'ng'iroqlarni float volt = readVoltage () qilish; kechikish (100); float amp = readCurrent (); kechikish (100); ikki vatt = readPower (); kechikish (100); float hz = readFreq (); kechikish (100); double wh = readEnergy (); // natijalarni tegishli mavzular ostida chop etish client.publish ("energiya/asosiy/kuchlanish", String (volt, 3)); client.publish ("energiya/asosiy/oqim", String (amp, 3)); client.publish ("energiya/asosiy/quvvat", String (vatt, 3)); client.publish ("energiya/asosiy/chastota", String (hz, 3)); client.publish ("energiya/asosiy/energiya", String (wh, 3)); Serial.print (String (volt, 3)+"V"+String (amp, 3)+"A"+String (vatt, 3)+"W"); Serial.println (String (hz, 3)+"Hz"+String (wh, 3)+"kWh"); kechikish (100); }}

/ * Finder Energy Meter registrlarini o'qish funktsiyalari * * Kodni tushunish uchun modbus protokoli qo'llanmasini tekshiring * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float volt = 0; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// registrga qo'ng'iroq qiling Serial.print ("kuchlanish o'qilmadi!"); Serial.println (ModbusRTUClient.lastError ()); // xato ishlovchisi} else {uint16_t word1 = ModbusRTUClient.read (); // ma'lumotlarni buferdan o'qing uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | so'z2; // bit matematik volt = millivolt/1000.0; } qaytish volt; } float readCurrent () {float amper = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("joriy o'qilmadi!"); Serial.println (ModbusRTUClient.lastError ()); } boshqa {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | so'z2; amper = milliamper/1000,0; } qaytish amperi; }

ikki marta o'qish Power () {ikki vatt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("quvvatni o'qib bo'lmadi!"); Serial.println (ModbusRTUClient.lastError ()); } boshqa {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliavatt; agar (word1 >> 7 == 0) {milliwatt = word1

Tavsiya: