Բովանդակություն:

Ձեր էներգախնայողության մոնիտորը `4 քայլ
Ձեր էներգախնայողության մոնիտորը `4 քայլ

Video: Ձեր էներգախնայողության մոնիտորը `4 քայլ

Video: Ձեր էներգախնայողության մոնիտորը `4 քայլ
Video: Նայեք ինչպես են Ձեզ խաբում խանութներում! КАК ВЫБРАТЬ ТЕЛЕВИЗОР 2020 #Smarttv 2024, Հուլիսի
Anonim
Ձեր էներգետիկ հաշիվների մոնիտորը
Ձեր էներգետիկ հաշիվների մոնիտորը

Այս նախագծի մասին

Եթե իսկապես ցանկանում եք ձեր տունը դարձնել ավելի խելացի, ապա հավանաբար կցանկանաք սկսել ձեր ամսական հաշիվներից (այսինքն ՝ էներգիա, գազ և այլն …): Ինչպես ասում են ոմանք ՝ Good for Planet, The Wallet and The Bottom Line: Բաց կոդով սարքավորումները տան միջավայրում կայունության հասնելու մեր միջոցն են: Այս գաղափարը մեզ ստիպեց կառուցել մի պարզ և ապահով լուծում, որը հեշտ է ինտեգրվել ցանկացած տան ավտոմատացման ծրագրակազմի հետ, քանի որ այն բացահայտում է տվյալները MQTT- ով (մեր դեպքում մենք ձեզ ցույց կտանք, թե ինչպես այն ինտեգրվել Home Assistant- ում):

Ակնարկ

Էլեկտրաէներգիայի սպառումը չափելու համար մենք ընտրեցինք օգտագործել Finder Energy Meter- ը, քանի որ այն նախատեսված է DIN երկաթուղու օգտագործման համար և հիանալի տեղավորվում է մեր տան գլխավոր պահարանում: Այս ապրանքի հիանալի բանն այն է, որ այն ունի RS485 Modbus ինտերֆեյս, արդյունաբերական ստանդարտ հաղորդակցության արձանագրություն, որն իսկապես հեշտացնում է Arduino- ի հետ խոսելը: Փաստորեն, Arduino- ն թողարկել է պաշտոնական վահանը ՝ MKR485- ը և երկու գրադարան ՝ արձանագրությունը վերծանելու համար: Որպես մայր տախտակ, մենք ընտրեցինք Arduino MKR WiFi 1010 -ը, քանի որ այն կիսում է MKR ձևի գործոնը և ունի WiFi միացում:

SetupWarning! Ստուգեք ձեր երկրի էլեկտրական համակարգի հետ կապված ձեր երկրի կանոնակարգերը և չափազանց զգույշ եղեք, քանի որ դա կարող է մահացու լինել: Եթե չգիտեք, թե ինչպես, զանգահարեք էլեկտրիկի: Առաջին քայլը հաշվիչի տեղադրումն է ձեր էլեկտրական պահարանում: Անվտանգ միջավայրում աշխատելն ապահովելու համար անջատեք ձեր համակարգից առաջ գտնվող էլեկտրական տերմինալը և բազմաչափով կրկնակի ստուգեք, որ տերմինալների միջև լարվածություն չկա: Այնուհետև տեղադրեք էներգիայի հաշվիչը ձեր պահարանի ներսում և միացրեք կենդանի և չեզոք լարերը հիմնական անջատիչից մինչև հաշվիչի մուտքը, հիշեք, որ օգտագործեք գունային պայմանագիրը (կապույտը ՝ չեզոք, իսկ շագանակագույնը ՝ սև/մոխրագույնը ՝ ԵՄ -ում ապրելու համար): Ելքը պետք է միացված լինի մնացած համակարգին:

Հիմնական լարման միացումներ: Վերևի լարերը մուտքային են, այն կողմը `ելքեր:

Քայլ 1: Անհրաժեշտ մասեր

Պահանջվող մասեր
Պահանջվող մասեր

Քայլ 2: Softwareրագրային ապահովման կարիքները

Softwareրագրային ապահովման կարիքներ
Softwareրագրային ապահովման կարիքներ

Ծրագրային ապահովում

Գործարկեք ձեր համակարգիչը և բացեք ձեր IDE- ն: Դուք կարող եք օգտագործել Arduino IDE կամ Arduino Ստեղծել խմբագիր: Կոդը բավարարում է հետևյալ հարցումները. Modbus հաղորդակցություն, WiFi- ի կառավարում MQTT արձանագրություն Modbus- ը և բաց կոդով արձանագրություն արդյունաբերական տվիչների և մեքենաների համար: Որպեսզի Arduino- ն խոսի Modbus- ի մասին, մենք պատրաստվում ենք օգտագործել Arduino Modbus գրադարանը: Այս գրադարանը փաթեթավորում է բոլոր մշակողները և իսկապես արագ միացնում ցանկացած Modbus սարք: Քանի որ մենք մտադիր ենք ընթերցել գրանցամատյաններ ՝ հաշվիչի տվյալների թերթիկին հետևելով, մենք կարող ենք գտնել մեզ անհրաժեշտ բոլոր տեղեկությունները ՝ գործառույթի կոդերը, գրանցամատյանի հասցեն և գրանցիչի չափը բառերով: Ավելի պարզ դարձնելու համար բացատրենք, թե ինչպես է աշխատում Modbus- ը. Modbus հաղորդագրությունները հետևում են պարզ կառուցվածքին. *, այս դեպքում, կարդացեք 0x04 պահող գրանցամատյանները Byte Count00 16 -ի համար - Մենք ուղարկում ենք 4 բայթ գրանցման հասցե (00 16), որը սարքին ասում է, թե ինչ ենք ուզում կարդալ 00 02 - այնուհետև գրանցիչի չափը (00 02) բառերով (յուրաքանչյուր բառը 2 բայթ է) Վերջին 4 բայթերը CRC կոդ են: Այս ծածկագիրը ստեղծվում է մաթեմատիկական գործառույթից ՝ նախորդ բայթերի համեմատ, ինչը երաշխավորում է, որ հաղորդագրությունը ստացվել է ճիշտ:

Տնային օգնականի ինտեգրումՀաշվիչը տան օգնականին ավելացնելը բավականին պարզ է: Ենթադրելով, որ դուք ունեք MQTT բրոքեր կազմաձևված (ահա ուղեցույցը), այն ամենը, ինչ ձեզ հարկավոր է անել, նոր սահմանումներ ավելացնել configuration.yaml ֆայլի տակ: սենսոր. Պահեք ֆայլը, ստուգեք կազմաձևը և վերաբեռնեք Home Assistant- ը, այժմ չափումները կհայտնվեն հիմնական էջում:

Home Assistant սպառման վահանակը ցույց է տալիս ընթացիկ ընթերցումները

Home Assistant- ը կհոգա գրաֆիկների ստեղծման և ձեր ընթերցումների արդյունքում առաջացած գործընթացների ավտոմատացման մասին: Այս ձեռնարկն ավարտվեց, այժմ ձեզնից է կախված ավելացնել գործառույթները և հարմարեցնել այն ձեր սեփական նպատակների համար:

Քայլ 3: Հավաքեք

Հավաքվել
Հավաքվել
Հավաքվել
Հավաքվել

Կատարած? 48ամանակն է պտուտակել RS485 կապը: Մենք կօգտագործենք ոլորված մեկ զույգ մալուխ գետնին, որը սովորաբար օգտագործվում է հեռախոսագծերի համար: Այս մալուխի միջոցով կարող եք փոխանցել մեծ հեռավորության վրա (1,2 կմ): Այնուամենայնիվ, մենք պարզապես մալուխ ենք օգտագործում բավական երկար ՝ կաբինետից դուրս գալու և Arduino- ն հասանելի վայրում տեղադրելու համար:

Finder RS485 կապ

RS485 ինտերֆեյսը անվանում է իր տերմինալները A, B և COM: Ընդհանուր դե-ֆակտո ստանդարտը TX+/RX+ կամ D+- ի օգտագործումն է որպես B- ի այլընտրանք (բարձր MARK- ի դեպքում `անգործուն), TX-/RX- կամ D- որպես A- ի այլընտրանք (ցածր MARK- ի համար, այսինքն` անգործուն) MKR վահանը աջակցում է նաև Full Duplex- ին, դուք կտեսնեք երկու այլ տերմինալ ՝ Y և Z: Այստեղ մենք պատրաստվում ենք պտուտակել մալուխի մյուս ծայրը, քանի որ տվյալների թերթիկից մենք գիտենք, որ կիսատ երկկողմանի հաղորդակցությունը տեղի է ունենում միայն Y և Z տերմինալներում: COM տերմինալը պետք է միացված լինի ISOGND- ին: Քանի որ մենք օգտագործում ենք կիսատ դուպլեքս միացում, և քանի որ մալուխը peer-to-peer է, մենք պետք է անջատիչներ տեղադրենք MKR485 վահանի վրա ՝ մեր կարգավորմանը համապատասխանելու համար. Մենք սահմանում ենք HALF (2-ից անջատված) և վերջավորությունը YZ (3-ից մինչև) ՎՐԱ); առաջինը նշանակություն չունի: Դադարեցումը երկու տվյալների տերմինալները միացնող դիմադրություն է `միջամտությունների թուլացման համար:

Սա այն է: Այժմ կարող եք փակել կաբինետը և կենտրոնանալ ծրագրակազմի վրա:

Քայլ 4: Կոդ

Կոդ
Կոդ

#ներառում

#ներառել #ներառել #ներառել // ձեր WiFi հավատարմագրերը const char ssid = "**********"; const char pass = "**********";

WiFiClient ցանց; MQTTClient հաճախորդ; անստորագիր երկար դրույք = 60000; // լռելյայն թարմացման արագություն ms- ում անստորագիր 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")) {// ՓՈՓՈԽՈ TOԹՅՈՆ ՔՈ ԿԱՐԳԱՎՈՐՈՄԸ ՀԱՎԱՍԱՐԿԵԼ Serial.print ("."); ուշացում (1000); } Serial.println ("\ n միացված է"); client.subscribe («էներգիա/հիմնական/թարմացում»); // թեման հեռակա կարգով թարմացման արագություն սահմանելու համար} // mqtt ստանալ հետադարձման գործառույթ void messageReceived (String & topic, String & payload) {Serial.println ("incoming:" + topic + " -" + payload); եթե (թեմա == "էներգիա/հիմնական/թարմացում") {// թարմացման արագության կառավարիչ տոկոսադրույք = բեռնվածություն. դեպի ինտեր ()*1000; Serial.println («նոր փոխարժեք»+լարային (տոկոսադրույք)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); իսկ (! Սերիա); client.begin ("բրոքերային_իպ", զուտ); // ՓՈՓՈԽԵԼ ՔՈ ԿԱՐԳԱՎՈՐՈՄԸ ՀԱՎԵԼՎԵԼ client.onMessage (messageReceived); // գործարկեք Modbus RTU հաճախորդը, եթե (! ModbusRTUClient.begin (9600)) {Serial.println ("Չհաջողվեց գործարկել Modbus RTU Client!"); մինչդեռ (1); }}

void loop () {client.loop (); եթե (! client.connected ()) {// ստուգեք ցանցի կապի միացումը (); } // հաղորդագրություն հրապարակել թարմացումն ավարտվելուց հետո (չարգելափակող ռեժիմ) if (millis () - lastMillis> rate) {lastMillis = millis (); // բոլոր կարդացած զանգերը դարձնել float volt = readVoltage (); ուշացում (100); float amp = readCurrent (); ուշացում (100); կրկնակի վտ = readPower (); ուշացում (100); float hz = readFreq (); ուշացում (100); կրկնակի 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 (Լար (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.; եթե (! 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.; եթե (! 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.; եթե (! 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

Խորհուրդ ենք տալիս: