Სარჩევი:

თქვენი ენერგიის ანგარიშების მონიტორი: 4 ნაბიჯი
თქვენი ენერგიის ანგარიშების მონიტორი: 4 ნაბიჯი

ვიდეო: თქვენი ენერგიის ანგარიშების მონიტორი: 4 ნაბიჯი

ვიდეო: თქვენი ენერგიის ანგარიშების მონიტორი: 4 ნაბიჯი
ვიდეო: კამადევა ძლიერი მანტრა: შეავსე შენი ცხოვრება სიყვარულით 4 წუთში - 100% შედეგი! 2024, ივლისი
Anonim
თქვენი ენერგიის ანგარიშების მონიტორი
თქვენი ენერგიის ანგარიშების მონიტორი

ამ პროექტის შესახებ

თუ თქვენ ნამდვილად გსურთ გახადოთ თქვენი სახლი უფრო ჭკვიანი, თქვენ ალბათ გსურთ დაიწყოთ თქვენი ყოველთვიური გადასახადებიდან (ანუ ენერგია, გაზი და ა.შ …). როგორც ზოგი ამბობს, კარგია პლანეტისთვის, საფულისთვის და ქვედა ხაზისთვის. ღია კოდის აპარატურა არის ჩვენი გზა მდგრადობის მისაღწევად სახლის პირობებში! ამ იდეამ მოგვცა ავაშენოთ მარტივი და უსაფრთხო გადაწყვეტა, ადვილი ინტეგრირება ნებისმიერი სახლის ავტომატიზაციის პროგრამულ უზრუნველყოფასთან, ვინაიდან ის ასახავს მონაცემებს MQTT– ზე (ჩვენს შემთხვევაში ჩვენ გაჩვენებთ თუ როგორ უნდა მოხდეს მისი ინტეგრირება სახლის ასისტენტში).

მიმოხილვა

ელექტროენერგიის მოხმარების გაზომვის მიზნით, ჩვენ შევარჩიეთ Finder Energy Meter– ის გამოყენება, რადგან ის განკუთვნილია DIN სარკინიგზო გამოყენებისთვის და შესანიშნავად ჯდება ჩვენი სახლის მთავარ კაბინეტში. ამ პროდუქტში ყველაზე მაგარია ის, რომ მას აქვს RS485 Modbus ინტერფეისი, ინდუსტრიული სტანდარტული საკომუნიკაციო პროტოკოლი, რაც არდუინოსთან საუბარს ნამდვილად აადვილებს. ფაქტობრივად, არდუინომ გამოუშვა ოფიციალური ფარი, MKR485 და ორი ბიბლიოთეკა პროტოკოლის დეკოდირებისთვის. როგორც დედაპლატა, ჩვენ ავირჩიეთ Arduino MKR WiFi 1010, რადგან ის იზიარებს MKR ფორმებს და აქვს WiFi კავშირი.

SetupWarning! შეამოწმეთ თქვენი ქვეყნის დებულებები თქვენი სახლის ელექტრო სისტემასთან დაკავშირებით და იყავით უკიდურესად ფრთხილად, რადგან ის შეიძლება სასიკვდილო იყოს! თუ არ იცით როგორ, დაურეკეთ ელექტრიკოსს. პირველი ნაბიჯი არის მრიცხველის დაყენება თქვენს ელექტრო კაბინეტში. იმის უზრუნველსაყოფად, რომ მუშაობთ უსაფრთხო გარემოში, გამორთეთ ელექტრო ტერმინალი თქვენი სისტემის წინ და ორმაგად შეამოწმეთ მულტიმეტრით, რომ ტერმინალებს შორის არ არის ძაბვა. შემდეგ განათავსეთ ენერგიის მრიცხველი თქვენს კაბინეტში და შეაერთეთ ცოცხალი და ნეიტრალური მავთულები მთავარი ამომრთველიდან მრიცხველის შესასვლელთან, გახსოვდეთ გამოიყენოთ ფერის კონვენცია (ლურჯი ნეიტრალური და ყავისფერი/შავი/ნაცრისფერი ევროკავშირში საცხოვრებლად). გამომავალი უნდა იყოს დაკავშირებული დანარჩენ სისტემასთან.

ძირითადი ძაბვის კავშირები. ზემოთ მავთულები არის შესასვლელი, მავთულები მიღმა არის გამოსავალი.

ნაბიჯი 1: საჭირო ნაწილები

ნაწილები საჭიროა
ნაწილები საჭიროა

ნაბიჯი 2: პროგრამული უზრუნველყოფის საჭიროება

პროგრამული უზრუნველყოფის საჭიროება
პროგრამული უზრუნველყოფის საჭიროება

პროგრამული უზრუნველყოფა

ჩართეთ კომპიუტერი და გახსენით IDE. თქვენ შეგიძლიათ გამოიყენოთ Arduino IDE ან Arduino შექმნა რედაქტორი. კოდი აკმაყოფილებს შემდეგ მოთხოვნებს: Modbus კომუნიკაცია, WiFi მართვა MQTT პროტოკოლი Modbus არის და ღია კოდის პროტოკოლი სამრეწველო სენსორებისა და მანქანებისთვის. იმისათვის, რომ Arduino ისაუბროს 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 დასახელება: "მთავარი ძაბვა" მდგომარეობა_თემა: "ენერგია/მთავარი/ძაბვა" გაზომვის_ ერთეული: "V" აქ თქვენ უნდა მიუთითოთ გაზომვის სახელი, წასაკითხი MQTT თემა და რაოდენობის საზომი ერთეული. შეინახეთ ფაილი, შეამოწმეთ კონფიგურაცია და გადატვირთეთ მთავარი ასისტენტი, ახლა გაზომვები გამოჩნდება მთავარ გვერდზე.

მთავარი ასისტენტის მოხმარების პანელი აჩვენებს მიმდინარე კითხვებს

მთავარი ასისტენტი იზრუნებს გრაფიკების შექმნაზე და თქვენი კითხვის შედეგად გამოწვეული პროცესების ავტომატიზაციაზე. ეს გაკვეთილი დასრულდა, ახლა თქვენზეა დამოკიდებული, რომ დაამატოთ ფუნქციები და მოარგოთ იგი თქვენი მიზნებისათვის!

ნაბიჯი 3: შეკრება

შეკრება
შეკრება
შეკრება
შეკრება

Შესრულებულია? დროა შეაერთოთ RS485 კავშირი! ჩვენ გამოვიყენებთ გადახვეულ ერთ წყვილ კაბელს მიწასთან, რომელიც ჩვეულებრივ გამოიყენება სატელეფონო ხაზებისთვის. ამ კაბელის საშუალებით შეგიძლიათ გადაიტანოთ დიდ მანძილზე (1.2 კმ). თუმცა, ჩვენ უბრალოდ ვიყენებთ კაბელს საკმარისად დიდხანს კაბინეტიდან გასასვლელად და არდუინოს მისაწვდომ ადგილას განთავსებისთვის.

Finder 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 გამორთული) და შეწყვეტას YZ (3 to ჩართულია); პირველს არ აქვს მნიშვნელობა შეწყვეტა არის წინააღმდეგობა, რომელიც აკავშირებს ორ მონაცემთა ტერმინალს ჩარევის შესამცირებლად.

Ეს ის არის. ახლა თქვენ შეგიძლიათ დახუროთ კაბინეტი და გაამახვილოთ ყურადღება პროგრამული უზრუნველყოფის მხარეზე!

ნაბიჯი 4: კოდი

კოდი
კოდი

#ჩართეთ

#მოიცავს #მოიცავს #მოიცავს // თქვენი wifi სერთიფიკატები const char ssid = "**********"; const char pass = "**********";

WiFiClient net; MQTTC კლიენტი; ხელმოუწერელი გრძელი განაკვეთი = 60000; // ნაგულისხმევი განახლების სიჩქარე ms– ში ხელმოუწერელი long last მილიისი = 0;

// დაკავშირების ფუნქცია void connect () {Serial.print ("wifi შემოწმება …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); დაგვიანება (1000); } Serial.print ("\ n დაკავშირება …"); while (! client.connect ("მოწყობილობის_სახელი", "მომხმარებლის_სახელი", "user_pw")) {// შეცვალეთ თქვენი დაყენების შესატყვისი Serial.print ("."); დაგვიანება (1000); } Serial.println ("\ n დაკავშირებულია!"); client.subscribe ("ენერგია/მთავარი/განახლება"); // თემა დისტანციურად განახლების სიჩქარის დასაყენებლად} // mqtt მიიღოს გამოძახების ფუნქცია void messageReceived (String & topic, String & payload) {Serial.println ("შემომავალი:" + თემა + " -" + დატვირთვა); if (თემა == "ენერგია/მთავარი/განახლება") {// განახლების სიჩქარის დამმუშავებელი კურსი = დატვირთვა. toInt ()*1000; Serial.println ("ახალი კურსი"+სიმებიანი (განაკვეთი)); }}

void setup () {Serial.begin (115200); WiFi. დასაწყისი (ssid, pass); ხოლო (! სერიული); client.begin ("ბროკერის_იპი", წმინდა); // შეცვალეთ თქვენი SETUP client.onMessage (შეტყობინება მიღებულია) შესატყვისად; // დაიწყეთ Modbus RTU კლიენტი, თუ (! ModbusRTUClient.begin (9600)) {Serial.println ("ვერ მოხერხდა Modbus RTU კლიენტის დაწყება!"); ხოლო (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); ორმაგი 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"+სიმებიანი (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 ()); // შეცდომის დამმუშავებელი} სხვა {uint16_t word1 = ModbusRTUClient.read (); // მონაცემების წაკითხვა ბუფერიდან uint16_t word2 = ModbusRTUClient.read (); uint32_t მილივოლტი = სიტყვა 1 << 16 | სიტყვა 2; // ბიტი მათემატიკა ვოლტი = მილივოლტი/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 | სიტყვა 2; ამპერი = მილიამპერი/1000.0; } დაბრუნება ამპერი; }

double readPower () {ორმაგი ვატი = 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

გირჩევთ: