Mündəricat:

Enerji Hesabınız: 4 addım
Enerji Hesabınız: 4 addım

Video: Enerji Hesabınız: 4 addım

Video: Enerji Hesabınız: 4 addım
Video: ALIZADE & BEGE - 24/7 (Official Music Video) 2024, Iyul
Anonim
Enerji Hesabınızın Monitoru
Enerji Hesabınızın Monitoru

BU PROJE HAQQINDA

Həqiqətən evinizi daha ağıllı etmək istəyirsinizsə, ehtimal ki, aylıq hesablarınızdan (yəni enerji, qaz və s.) Başlamaq istəyəcəksiniz. Bəzilərinin dediyi kimi, Planet, Cüzdan və Alt Xətt üçün yaxşıdır. Açıq mənbəli aparat, ev şəraitində davamlılığa çatmağın yoludur! Bu fikir, MQTT üzərindəki məlumatları ifşa etdiyi üçün hər hansı bir ev avtomatlaşdırma proqramı ilə inteqrasiyası asan olan sadə və etibarlı bir həll qurmağımıza səbəb oldu (bizim vəziyyətimizdə bunu Home Assistant -a necə inteqrasiya edəcəyinizi göstərəcəyik).

Baxış

Elektrik enerjisi istehlakını ölçmək üçün Finder Enerji Ölçmə cihazını istifadə etməyi seçdik, çünki DIN dəmir yolu istifadəsi üçün nəzərdə tutulmuşdur və evimizin əsas kabinetinə mükəmməl uyğun gəlir. Bu məhsulun ən maraqlı tərəfi, bir Arduino ilə danışmağı həqiqətən asanlaşdıran sənaye standart bir əlaqə protokolu olan RS485 Modbus interfeysinə sahib olmasıdır. Əslində, Arduino protokolu deşifr etmək üçün rəsmi bir qalxan, MKR485 və iki kitabxana buraxdı. Anakart olaraq, Arduino MKR WiFi 1010 seçdik, çünki MKR form faktorunu paylaşır və WiFi bağlantısı var.

Quraşdırma xəbərdarlığı! Evinizin elektrik sistemi ilə əlaqədar ölkə qaydalarını yoxlayın və son dərəcə diqqətli olun, çünki ölümcül ola bilər! Bilmirsinizsə, elektrikçiyə müraciət edin. İlk addım sayğacı elektrik kabinetinizə quraşdırmaqdır. Təhlükəsiz bir mühitdə çalışdığınızdan əmin olmaq üçün sisteminizdən qabaq elektrik terminalının gücünü söndürün və terminallar arasında gərginlik olmadığını multimetrlə iki dəfə yoxlayın. Sonra enerji sayğacınızı kabinetinizin içinə qoyun və əsas kəsicidən sayğacın girişinə canlı və neytral tellər bağlayın, rəng konvensiyasından istifadə etməyi unutmayın (neytral üçün mavi, AB -də yaşamaq üçün qəhvəyi/qara/boz). Çıxış sistemin qalan hissəsinə qoşulmalıdır.

Əsas gərginlik əlaqələri. Yuxarıdakı tellər giriş, kənardakı tellər isə çıxışdır.

Addım 1: Lazım olan hissələr

Ehtiyac duyulan hissələr
Ehtiyac duyulan hissələr

Addım 2: Proqram Needes

Proqram Needes
Proqram Needes

Proqram təminatı

Kompüterinizi işə salın və IDE -ni açın. Arduino IDE və ya Arduino Create Redaktorundan istifadə edə bilərsiniz. Kod aşağıdakı tələblərə cavab verir: Modbus rabitəsi, WiFi idarəetməMQTT protokolu Modbus sənaye sensorlar və maşınlar üçün açıq mənbəli protokoldur. Arduino Modbus danışmaq üçün Arduino Modbus kitabxanasından istifadə edəcəyik. Bu kitabxana bütün işləyiciləri yığır və hər hansı bir Modbus cihazını bağlamağı həqiqətən sürətli edir. Sayğacların məlumat cədvəlini izləyərək qeydləri oxumağa hazırlaşdığımız üçün funksiya kodları, reyestrin ünvanı və reyestrin ölçüsü kimi lazım olan bütün məlumatları sözlə tapa bilərik. Ancaq daha aydın olmaq üçün Modbusun necə işlədiyini izah edək: Modbus mesajları sadə bir quruluşa uyğundur: 01 03 04 00 16 00 02 25 C7 0x01 Cihaz Ünvanı 0x03, məlumat oxumaq və ya yazmaq istədiyimizi cihaza bildirən İş Kodudur. *, bu halda, Bayt Count00 16 üçün 0x04 tutma qeydlərini oxuyun - Cihaza oxumaq istədiyimizi söyləyən 4 02 bayt qeyd ünvanı (00 16) göndəririk 00 02- sonra qeydin ölçüsünü (00 02) sözlə (hər söz 2 bayt uzunluğundadır) Son 4 bayt CRC kodudur. Bu kod, əvvəlki baytlar üzərində bir riyazi funksiyadan yaradılır və bu, mesajın düzgün alınmasını təmin edir.

Ev köməkçisinə ev sayğacını əlavə etmək olduqca sadədir. Konfiqurasiya edilmiş bir MQTT brokeriniz olduğunu düşünsəniz (burada bələdçi budur), etməniz lazım olan şey, configuration.yaml faylının altına yeni təriflər əlavə etməkdir. sensor: - platform: mqtt adı: "Ana Gərginlik" status_topik: "enerji/əsas/gərginlik" vahidi_of_ölçmə: "V" Burada ölçmənin adını, oxumaq üçün MQTT mövzusunu və miqdarın ölçü vahidini qoymalısınız. Dosyanı qeyd edin, konfiqurasiyanı yoxlayın və Home Assistant -ı yenidən yükləyin, indi ölçülər ana səhifədə görünəcək.

Cari oxunuşları göstərən Ev köməkçisi istehlak paneli

Ev köməkçisi qrafiklərin yaradılmasına və oxunuşlarınızın səbəb olduğu proseslərin avtomatlaşdırılmasına diqqət yetirəcəkdir. Bu təlimat bitdi, indi xüsusiyyətlər əlavə etmək və öz məqsədlərinizə uyğunlaşdırmaq sizin ixtiyarınızdadır!

Addım 3: Montaj edin

Toplaşmaq
Toplaşmaq
Toplaşmaq
Toplaşmaq

Bitdi? RS485 bağlantısını sındırmağın vaxtı gəldi! Tipik olaraq telefon xətləri üçün istifadə olunan yerlə birlikdə bükülmüş tək cüt kabeldən istifadə edəcəyik. Bu kabel ilə uzun məsafəni (1,2 km) ötürə bilərsiniz. Ancaq kabinetdən çıxmaq və Arduino -nu əlçatan bir yerə yerləşdirmək üçün kifayət qədər uzun bir kabel istifadə edirik.

Finder RS485 bağlantısı

RS485 interfeysi terminallarını A, B və COM adlandırır. Ümumi de-fakto standart TX+/RX+ və ya D+ üçün B (MARK üçün yüksəkdir, yəni boş), TX-/RX- və ya D- üçün alternativ olaraq istifadə olunur (MARK üçün aşağı yəni boş). MKR qalxanı Tam Dupleksi də dəstəkləyir, Y və Z iki digər terminal görəcəksən. Burada, məlumat cədvəlindən yarı dubleks ünsiyyətin yalnız Y və Z terminallarında baş verdiyini bildiyimiz üçün kabelin digər ucunu vidalayacağıq. COM terminalı ISOGND -ə qoşulmalıdır. Yarım dupleks bir əlaqə istifadə etdiyimizdən və kabellər həmyaşıd olduğu üçün, MKR485 qalxanındakı açarları qurulumumuza uyğun olaraq qurmalıyıq: YARI (2-ni söndür) və YZ-də (3-ə qədər) ON); birincisinin əhəmiyyəti yoxdur. Sonlandırma, müdaxiləni azaltmaq üçün iki məlumat terminalını birləşdirən bir müqavimətdir.

Bu odur. İndi kabineti bağlaya və proqram tərəfinə diqqət edə bilərsiniz!

Addım 4: Kod

Kod
Kod

#daxil edin

#include #include #include // wifi etimadnamənizi const char ssid = "**********"; const char pass = "**********";

WiFi müştəri şəbəkəsi; MQTTClient müştəri; imzasız uzun faiz = 60000; // ms göstərilməmiş standart yeniləmə dərəcəsi işarəsiz long lastMillis = 0;

// əlaqə funksiyası void connect () {Serial.print ("wifi yoxlanılır…"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); gecikmə (1000); } Serial.print ("\ nbağlanır…"); while (! client.connect ("cihaz_adı", "istifadəçi_adı", "user_pw"))) gecikmə (1000); } Serial.println ("\ n bağlı!"); client.subscribe ("enerji/əsas/yeniləmə"); // yeniləmə sürətini uzaqdan təyin etmək üçün mövzu} // mqtt geri çağırma funksiyasını qəbul et void mesajı Alındı (String & mövzu, String & payload) {Serial.println ("gələn:" + mövzu + " -" + yük); if (mövzu == "enerji/əsas/yeniləmə") {// yeniləmə sürəti işləyicisinin dərəcəsi = payload.toInt ()*1000; Serial.println ("yeni nisbət"+String (faiz)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! Serial); client.begin ("broker_ip", net); // SETUP SİZİN MATÇINA DƏYİŞMƏK client.onMessage (mesaj Alındı); // Modbus RTU müştərisini işə salın, əgər (! ModbusRTUClient.begin (9600)) {Serial.println ("Modbus RTU Müştəri işə salınmadı!"); isə (1); }}

boşluq döngəsi () {client.loop (); if (! client.connected ()) {// şəbəkə bağlantısını yoxlayın connect (); } // yeniləmə başa çatdıqdan sonra (millis () - lastMillis> dərəcəsi) {lastMillis = millis (); // bütün oxunan zəngləri float volt = readVoltage () et; gecikmə (100); float amp = readCurrent (); gecikmə (100); ikiqat vat = readPower (); gecikmə (100); float hz = readFreq (); gecikmə (100); cüt wh = readEnergy (); // əlaqəli mövzular altında nəticələr dərc edin client.publish ("enerji/əsas/gərginlik", String (volt, 3)); client.publish ("enerji/əsas/cərəyan", String (amp, 3)); client.publish ("enerji/əsas/güc", String (vatt, 3)); client.publish ("enerji/əsas/tezlik", String (hz, 3)); client.publish ("enerji/əsas/enerji", String (wh, 3)); Serial.print (String (volt, 3)+"V"+String (amp, 3)+"A"+String (watt, 3)+"W"); Serial.println (String (hz, 3)+"Hz"+String (wh, 3)+"kWh"); gecikmə (100); }}

/ * Finder Energy Meter qeydlərini oxumaq üçün funksiyalar * * Kodu başa düşmək üçün modbus protokol təlimatına baxın * 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)) {// Serial.print reyestrinə zəng edin ("gərginlik oxunmadı!"); Serial.println (ModbusRTUClient.lastError ()); // səhv işləyicisi} başqa {uint16_t word1 = ModbusRTUClient.read (); // tampondan məlumatları oxuyun uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | söz 2; // bit riyazi volt = millivolt/1000.0; } geri dönmə volt; } float readCurrent () {float amper = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("cari oxumaq alınmadı!"); Serial.println (ModbusRTUClient.lastError ()); } başqa {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | söz 2; amper = milliamp/1000.0; } qayıt amper; }

ikiqat oxu gücü () {ikiqat vat = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("gücü oxuya bilmədi!"); Serial.println (ModbusRTUClient.lastError ()); } başqa {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; əgər (söz1 >> 7 == 0) {milliwatt = söz1

Tövsiyə: