ዝርዝር ሁኔታ:

የእርስዎ የኃይል ቢል ሞኒተር - 4 ደረጃዎች
የእርስዎ የኃይል ቢል ሞኒተር - 4 ደረጃዎች

ቪዲዮ: የእርስዎ የኃይል ቢል ሞኒተር - 4 ደረጃዎች

ቪዲዮ: የእርስዎ የኃይል ቢል ሞኒተር - 4 ደረጃዎች
ቪዲዮ: የካቲት 9 ቀን 2021 #usciteilike ላይ በዩቲዩብ / በቀጥታ ስርጭት ከእኛ ጋር ያድጉ 2024, ሀምሌ
Anonim
የእርስዎ የኃይል ቢል ሞኒተር
የእርስዎ የኃይል ቢል ሞኒተር

ስለዚህ ፕሮጀክት

ቤትዎን የበለጠ ብልህ ለማድረግ ከፈለጉ ፣ ምናልባት ከወርሃዊ ሂሳቦችዎ (ማለትም ኃይል ፣ ጋዝ ፣ ወዘተ…) መጀመር ይፈልጉ ይሆናል። አንዳንዶች እንደሚሉት ፣ ለፕላኔት ፣ ለኪስ ቦርሳ እና ለታች መስመር ጥሩ። ክፍት ምንጭ ሃርድዌር በቤት አከባቢ ውስጥ ዘላቂነት ላይ ለመድረስ መንገዳችን ነው! ይህ ሀሳብ በ MQTT ላይ መረጃን ስለሚያጋልጥ ከማንኛውም የቤት አውቶማቲክ ሶፍትዌር ጋር ለማዋሃድ ቀላል እና ደህንነቱ የተጠበቀ መፍትሄ ለመገንባት አመጣን (በእኛ ሁኔታ እንዴት ወደ ቤት ረዳት እንዴት እንደሚዋሃዱ እናሳይዎታለን)።

አጠቃላይ እይታ

የኤሌክትሪክ ኃይል ፍጆታን ለመለካት ፣ ለዲአይኤን የባቡር ሐዲድ የተነደፈ እና በቤታችን ዋና ካቢኔት ውስጥ በትክክል ስለሚገጣጠም የማግኛ ኢነርጂ መለኪያ ለመጠቀም መረጥን። የዚህ ምርት አሪፍ ነገር አርዲኖን ማውራት በእውነት ቀላል የሚያደርግ የ RS485 Modbus በይነገጽ ፣ የኢንዱስትሪ ደረጃ የመገናኛ ፕሮቶኮል አለው። እንደ እውነቱ ከሆነ አርዱዲኖ ፕሮቶኮሉን ለማረም ኦፊሴላዊ ጋሻ ፣ MKR485 እና ሁለት ቤተ -መጻሕፍት አውጥቷል። እንደ ዋናው ሰሌዳ ፣ እኛ የአርዲዲኖ MKR WiFi 1010 ን መርጠናል ፣ ምክንያቱም የ MKR ቅጽ ሁኔታን የሚጋራ እና የ WiFi ግንኙነት ስላለው።

ማዋቀር ማስጠንቀቂያ! ከቤትዎ የኤሌክትሪክ ስርዓት ጋር ስለመገናኘት የአገርዎን ህጎች ይፈትሹ እና ገዳይ ሊሆን ስለሚችል በጣም ይጠንቀቁ! የማያውቁ ከሆነ ለኤሌክትሪክ ሠራተኛ ይደውሉ። የመጀመሪያው እርምጃ ቆጣሪውን በኤሌክትሪክ ካቢኔ ውስጥ መትከል ነው። በአስተማማኝ ሁኔታ ውስጥ እየሰሩ መሆኑን ለማረጋገጥ ከስርዓትዎ ቀድመው ከኤሌክትሪክ ተርሚናል ያለውን ኃይል ያጥፉ እና በመለኪያዎቹ መካከል ምንም ቮልቴጅ እንደሌለ ከብዙ መልቲሜትር ጋር ያረጋግጡ። ከዚያ የኃይል ቆጣሪውን በካቢኔዎ ውስጥ ያስቀምጡ እና የቀጥታ እና ገለልተኛ ሽቦዎችን ከዋናው ሰባሪ ወደ ሜትር ግቤት ያገናኙ ፣ የቀለም ኮንፈረንስ (ሰማያዊ ለገለልተኛ እና ቡናማ/ጥቁር/ግራጫ በአውሮፓ ውስጥ ለመኖር) መጠቀምዎን ያስታውሱ። ውፅዓት ከተቀረው ስርዓት ጋር መገናኘት አለበት።

ዋና የቮልቴጅ ግንኙነቶች። ከላይ ያሉት ገመዶች ግብዓት ናቸው ፣ ከዚያ በላይ ያሉት ገመዶች ውፅዓት ናቸው።

ደረጃ 1: ክፍሎች ያስፈልጋሉ

ክፍሎች ያስፈልጋሉ
ክፍሎች ያስፈልጋሉ

ደረጃ 2 የሶፍትዌር ፍላጎቶች

የሶፍትዌር ፍላጎቶች
የሶፍትዌር ፍላጎቶች

ሶፍትዌር

ኮምፒተርዎን ያስጀምሩ እና አይዲኢዎን ይክፈቱ። የ Arduino IDE ወይም Arduino ፍጠር አርታዒን መጠቀም ይችላሉ። ኮዱ የሚከተሉትን ጥያቄዎች እያሟላ ነው-የ Modbus ግንኙነት ፣ የ WiFi አስተዳደርMQTT ፕሮቶኮል ሞምቡስ ለኢንዱስትሪ ዳሳሾች እና ማሽኖች ክፍት ምንጭ ፕሮቶኮል ነው። አርዱዲኖ ሞድቡስ እንዲናገር ፣ እኛ የአርዲኖ ሞዱስ ቤተ -መጽሐፍትን እንጠቀማለን። ይህ ቤተመጽሐፍት ሁሉንም ተቆጣጣሪዎች ያሽከረክራል እና ማንኛውንም የሞድስ መሣሪያን በፍጥነት ማገናኘት ያደርገዋል። እኛ የቆጣሪውን የውሂብ ሉህ በመከተል መዝገቦችን እናነባለን ፣ እንደ የተግባር ኮዶች ፣ የመዝገቡ አድራሻ እና የመዝገቡን መጠን የምንፈልገውን ሁሉንም መረጃዎች በቃላት ማግኘት እንችላለን። ግን የበለጠ ግልፅ ለማድረግ ፣ ሞድቡስ እንዴት እንደሚሠራ እንገልጽ - የሞድቡስ መልእክቶች ቀለል ያለ መዋቅር ይከተላሉ 01 03 04 00 16 00 02 25 C7 0x01 ነው የመሣሪያው አድራሻ 0x03 መረጃን ማንበብ ወይም መጻፍ ከፈለግን መሣሪያውን የሚነግረው የተግባር ኮድ ነው። *፣ በዚህ ሁኔታ ፣ ለባይት ቆጠራ ቁጥር 0x04 የመያዣ መዝገቦችን ያንብቡ - እኛ ማንበብ የምንፈልገውን 00 02 - ከዚያ የመዝገቡን መጠን (00 02) በቃላት በቃለ -መጠይቁ (00 02) የሚነግረን 4 ባይት የምዝገባ አድራሻ (00 16) እንልካለን። (እያንዳንዱ ቃል 2 ባይት ርዝመት አለው) የመጨረሻዎቹ 4 ባይቶች የ CRC ኮድ ናቸው። ይህ ኮድ በቀድሞው ባይቶች ላይ ከሂሳብ ተግባር የመነጨ ነው ፣ ይህ መልእክቱ በትክክል መድረሱን ያረጋግጣል።

የቤት ረዳት ውህደት መለኪያውን ወደ የቤት ረዳት ማከል በጣም ቀላል ነው። የ MQTT ደላላ የተዋቀረ መስሎዎት (መመሪያው እዚህ አለ) ፣ ማድረግ ያለብዎት በ config.yaml ፋይል ስር አዲስ ትርጓሜዎችን ማከል ነው። አነፍናፊ: - መድረክ: mqtt ስም: "ዋና ቮልቴጅ" state_topic: "ጉልበት/ዋና/ቮልቴጅ" unit_of_measurement: "V" እዚህ የመለኪያውን ስም ፣ የሚነበብበትን የ MQTT ርዕስ እና የቁጥሩን የመለኪያ አሃድ ማስቀመጥ አለብዎት። ፋይሉን ያስቀምጡ ፣ ውቅሩን ይፈትሹ እና የቤት ረዳትን እንደገና ይጫኑ ፣ አሁን መለኪያዎች በዋናው ገጽ ላይ ይታያሉ።

የአሁኑ ንባቦችን የሚያሳይ የቤት ረዳት የፍጆታ ፓነል

የቤት ረዳት ግራፎች በመፍጠር እና በንባብዎ የተነሱ ሂደቶችን በራስ -ሰር ይቆጣጠራል። ይህ መማሪያ ተጠናቅቋል ፣ አሁን ባህሪያትን ማከል እና ለራስዎ ዓላማዎች ማበጀት የእርስዎ ነው!

ደረጃ 3: ይሰብስቡ

ሰብስብ
ሰብስብ
ሰብስብ
ሰብስብ

ተከናውኗል? በ RS485 ግንኙነት ውስጥ ለመግባት ጊዜው አሁን ነው! ጠማማ ነጠላ ጥንድ ገመድ ከመሬት ጋር እንጠቀማለን ፣ በተለምዶ ለስልክ መስመሮች ያገለግላል። በዚህ ገመድ ረጅም ርቀት (1.2 ኪ.ሜ) ማስተላለፍ ይችላሉ። ሆኖም ፣ እኛ ካቢኔውን ለመውጣት እና አርዱዲኖን ተደራሽ በሆነ ቦታ ላይ ለማስቀመጥ በቂ ገመድ ብቻ እንጠቀማለን።

ፈላጊ RS485 ግንኙነት

የ RS485 በይነገጽ ተርሚናሎቹን A ፣ B እና COM ይሰይማል። የተለመደ ገላጭ መስፈርት TX+/RX+ ወይም D+ ን ለ B አማራጭ (ከፍተኛ ለ MARK ማለትም ስራ ፈት) ፣ TX-/RX- ወይም D- ለ A (ዝቅተኛ ለ MARK ማለትም ስራ ፈት) መጠቀም ነው የ MKR ጋሻ እንዲሁ ሙሉ ዱፕሌክስን ይደግፋል ፣ ሌሎች ሁለት ተርሚናሎችን ያያሉ ፣ Y እና Z. እዚህ ከግማሽ-ድርብ ግንኙነት በ Y እና Z ተርሚናሎች ላይ ብቻ እንደሚከሰት ከውሂብ ሉህ ስለምናውቅ የኬብሉን ሌላኛው ጫፍ እናጥፋለን። የ COM ተርሚናል ከ ISOGND ጋር መገናኘት አለበት። የግማሽ-ድርብ ግንኙነትን ስለምንጠቀም እና ገመዱ ከእኩያ-ለ-አቻ ስለሆነ ፣ ከማቀናጀታችን ጋር ለማዛመድ በ MKR485 ጋሻ ላይ መቀያየሪያዎችን ማዘጋጀት አለብን-HALF (2 to off) እና YZ (3 ወደ በርቷል); የመጀመሪያው ምንም አይደለም። ማቋረጡ ጣልቃ ገብነትን ለማቃለል ሁለቱን የመረጃ ተርሚናሎች የሚያገናኝ ተቃውሞ ነው።

ይህ ነው። አሁን ካቢኔውን መዝጋት እና በሶፍትዌሩ ጎን ላይ ማተኮር ይችላሉ!

ደረጃ 4 ኮድ

ኮድ
ኮድ

#ያካትቱ

#ያካትቱ #ያካትቱ #ያካትቱ // የእርስዎ የ wifi ምስክርነቶች const char ssid = "**********"; const char pass = "**********";

የ WiFi ደንበኛ መረብ; MQTTClient ደንበኛ; ያልተፈረመ ረጅም ተመን = 60000; // ነባሪ የማደሻ መጠን በ ms ያልተፈረመ ረጅም lastMillis = 0;

// የተገናኘ ተግባር ባዶ ግንኙነት () {Serial.print («wifi ን ማረጋገጥ…»); ሳለ (WiFi.status ()! = WL_CONNECTED) {Serial.print (".")); መዘግየት (1000); } Serial.print ("\ n በማገናኘት ላይ …"); ሳለ (! client.connect ("device_name" ፣ "user_name" ፣ "user_pw")) {// የእርስዎን ስብስብ Serial.print (".") ለማዛመድ ይቀይሩ ፤ መዘግየት (1000); } Serial.println ("\ n ተገናኝቷል!"); ደንበኛ. የደንበኝነት ምዝገባ (“ኃይል/ዋና/አድስ”); የማደሻ ተመን በርቀት ለማቀናበር // ርዕስ/// mqtt የጥሪ መልሶ ማግኛ ተግባር ባዶ መልእክት ይቀበላል (የተቀበለው (ሕብረቁምፊ እና ርዕስ ፣ ሕብረቁምፊ እና ጭነት)) {Serial.println (“ገቢ ፦” + ርዕስ +” -“+ ጭነት)”; ከሆነ (ርዕስ == "ኃይል/ዋና/አድስ") {// የማደሻ ተመን ተቆጣጣሪ ተመን = payload.toInt ()*1000; Serial.println ("አዲስ ተመን"+ሕብረቁምፊ (ተመን)); }}

ባዶነት ማዋቀር () {Serial.begin (115200); WiFi.begin (ssid ፣ ማለፍ); ሳለ (! ተከታታይ); client.begin ("broker_ip", net); // የስብስብ ደንበኛዎን ለማዛመድ ይለውጡ። በመልዕክት (መልእክት ደርሷል); // (! ModbusRTUClient.begin (9600)) {Serial.println («Modbus RTU Client ን መጀመር አልተሳካም!») ከሆነ የ Modbus RTU ደንበኛውን ያስጀምሩ ፤ ሳለ (1); }}

ባዶነት loop () {client.loop (); ከሆነ (! client.connected ()) {// የአውታረ መረብ ግንኙነትን ይፈትሹ (); } // ካለቀ (የማገድ እገዳ ያልሆነ) ከሆነ (ሚሊስ () - lastMillis> ተመን) {lastMillis = millis (); // ሁሉንም የተነበቡ ጥሪዎች ተንሳፋፊ ቮልት = readVoltage () ያድርጉ። መዘግየት (100); ተንሳፋፊ amp = readCurrent (); መዘግየት (100); ድርብ ዋት = readPower (); መዘግየት (100); ተንሳፋፊ hz = readFreq (); መዘግየት (100); ድርብ wh = readEnergy (); // በተዛማጅ ርእሶች ስር ውጤቶችን ያትሙ። ደንበኛ (“ኃይል/ዋና/ቮልቴጅ” ፣ ሕብረቁምፊ (ቮልት ፣ 3)); ደንበኛ. ህትመት (“ኃይል/ዋና/የአሁኑ” ፣ ሕብረቁምፊ (አምፕ ፣ 3)); ደንበኛ. ህትመት (“ኃይል/ዋና/ኃይል” ፣ ሕብረቁምፊ (ዋት ፣ 3)); ደንበኛ. ህትመት (“ኃይል/ዋና/ድግግሞሽ” ፣ ሕብረቁምፊ (hz ፣ 3)); ደንበኛ. ህትመት (“ኃይል/ዋና/ጉልበት” ፣ ሕብረቁምፊ (wh ፣ 3)); Serial.print (String (volt, 3)+"V"+String (amp, 3)+"A"+String (watt, 3)+"W")); Serial.println (ሕብረቁምፊ (hz, 3)+"Hz"+String (wh, 3)+"kWh"); መዘግየት (100); }}

/ * የአገልጋይ ኢነርጂ ሜትር መመዝገቢያዎችን ለማንበብ ተግባራት * * ኮዱን ለመረዳት የሞድቡስ ፕሮቶኮል ማኑዋልን ይመልከቱ * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float ቮልት = 0; (! Serial.println (ModbusRTUClient.lastError ()); // የስህተት ተቆጣጣሪ} ሌላ {uint16_t word1 = ModbusRTUClient.read (); // ውሂቡን ከማጠራቀሚያው uint16_t word2 = ModbusRTUClient.read () ያንብቡ። uint32_t millivolt = word1 << 16 | ቃል 2; // ቢት ሂሳብ ቮልት = ሚሊቮት/1000.0; } የመመለስ ቮልት; ተንሳፋፊ readCurrent () {float ampere = 0.; ከሆነ (! ModbusRTUClient. Serial.println (ModbusRTUClient.lastError ()); } ሌላ {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | ቃል 2; ampere = milliamp/1000.0; } አምፔር መመለስ; }

ድርብ ንባብ ኃይል () {double watt = 0.; ከሆነ (! ModbusRTUClient. Serial.println (ModbusRTUClient.lastError ()); } ሌላ {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; ከሆነ (ቃል 1 >> 7 == 0) {milliwatt = word1

የሚመከር: