Satura rādītājs:

Jūsu enerģijas rēķinu monitors: 4 soļi
Jūsu enerģijas rēķinu monitors: 4 soļi

Video: Jūsu enerģijas rēķinu monitors: 4 soļi

Video: Jūsu enerģijas rēķinu monitors: 4 soļi
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Novembris
Anonim
Jūsu enerģijas rēķinu monitors
Jūsu enerģijas rēķinu monitors

PAR ŠO PROJEKTU

Ja jūs patiešām vēlaties padarīt savu māju gudrāku, jūs, iespējams, vēlēsities sākt ar ikmēneša rēķiniem (ti, enerģiju, gāzi utt.). Kā daži saka, Labi planētai, seifam un būtībai. Atvērtā pirmkoda aparatūra ir mūsu veids, kā sasniegt ilgtspējību mājas vidē! Šī ideja lika mums izveidot vienkāršu un drošu risinājumu, ko ir viegli integrēt ar jebkuru mājas automatizācijas programmatūru, jo tā atklāj datus, izmantojot MQTT (mūsu gadījumā mēs jums parādīsim, kā tos integrēt mājas palīgā).

Pārskats

Lai izmērītu elektroenerģijas patēriņu, mēs izvēlējāmies izmantot Finder enerģijas mērītāju, jo tas ir paredzēts DIN sliedēm un lieliski iederas mūsu mājas galvenajā skapī. Šī produkta foršā lieta ir tā, ka tam ir RS485 Modbus saskarne, rūpnieciski standarta sakaru protokols, kas padara sarunu ar Arduino patiešām vieglu. Faktiski Arduino ir izlaidis oficiālu vairogu, MKR485 un divas bibliotēkas, lai atšifrētu protokolu. Kā galveno plati mēs izvēlējāmies Arduino MKR WiFi 1010, jo tam ir MKR formas faktors un WiFi savienojums.

UzstādīšanaBrīdinājums! Pārbaudiet savas valsts noteikumus par mājas elektriskās sistēmas izmantošanu un esiet īpaši piesardzīgs, jo tas var būt nāvējošs! Ja jūs nezināt, zvaniet elektriķim. Pirmais solis ir uzstādīt skaitītāju elektrības skapī. Lai pārliecinātos, ka strādājat drošā vidē, izslēdziet strāvu no elektrotermināļa pirms sistēmas un vēlreiz pārbaudiet ar multimetru, vai nav sprieguma starp spailēm. Pēc tam ievietojiet enerģijas skaitītāju savā skapī un pievienojiet strāvas un neitrālos vadus no galvenā slēdža līdz skaitītāja ieejai, neaizmirstiet izmantot krāsu kombināciju (zila neitrālai un brūna/melna/pelēka tiešraidē ES). Izejai jābūt savienotai ar pārējo sistēmu.

Galvenie sprieguma savienojumi. Iepriekš minētie vadi ir ieeja, bet tālāk esošie vadi ir izejas.

1. darbība. Nepieciešamās detaļas

Nepieciešamas detaļas
Nepieciešamas detaļas

2. darbība. Nepieciešamā programmatūra

Nepieciešamas programmatūras
Nepieciešamas programmatūras

Programmatūra

Palaidiet datoru un atveriet IDE. Varat izmantot Arduino IDE vai Arduino Create Editor. Kods atbilst šādiem pieprasījumiem: Modbus sakari, WiFi pārvaldība MQTT protokols Modbus ir un atvērtā koda protokols rūpnieciskiem sensoriem un mašīnām. Lai Arduino runātu par Modbus, mēs izmantosim Arduino Modbus bibliotēku. Šī bibliotēka iesaiņo visus apstrādātājus un padara jebkuras Modbus ierīces pieslēgšanu patiešām ātru. Tā kā mēs lasīsim reģistrus, pēc skaitītāja datu lapas mēs varam atrast visu nepieciešamo informāciju, piemēram, funkciju kodus, reģistra adresi un reģistra lielumu vārdos. Bet, lai tas būtu skaidrāks, izskaidrosim, kā darbojas Modbus: Modbus ziņojumiem ir vienkārša struktūra: 01 03 04 00 16 00 02 25 C7 0x01ir ierīces adrese 0x03 ir funkcijas kods, kas norāda ierīcei, vai mēs vēlamies lasīt vai rakstīt datus *, šajā gadījumā baitu skaitam 00 16 lasiet turēšanas reģistrus 0x04 - mēs nosūtām 4 baitus reģistra adreses (00 16), kas ierīcei norāda, ko mēs vēlamies lasīt 00 02- tad reģistra lielumu (00 02) vārdos (katrs vārds ir 2 baitus garš) Pēdējie 4 baiti ir CRC kods. Šis kods tiek ģenerēts no matemātiskās funkcijas salīdzinājumā ar iepriekšējiem baitiem, tādējādi nodrošinot, ka ziņojums ir saņemts pareizi.

Mērnieka pievienošana mājas palīgam ir diezgan vienkārša. Pieņemot, ka jums ir konfigurēts MQTT brokeris (šeit ir ceļvedis), viss, kas jums jādara, ir pievienot jaunas definīcijas zem konfigurācijas.yaml faila. sensors: - platforma: mqtt name: "Main Voltage" state_topic: "energy/main/spriegums" unit_of_measurement: "V" Šeit jāievieto mērījuma nosaukums, nolasāmā MQTT tēma un daudzuma mērvienība. Saglabājiet failu, pārbaudiet konfigurāciju un atkārtoti ielādējiet mājas palīgu, tagad mērījumi tiks parādīti galvenajā lapā.

Mājas palīga patēriņa panelis, kurā redzami pašreizējie rādījumi

Mājas palīgs parūpēsies par grafiku izveidi un automatizēs jūsu rādījumu izraisītos procesus. Šī apmācība ir pabeigta, tagad jums ir jāpievieno funkcijas un jāpielāgo tā savām vajadzībām!

3. solis: salieciet

Salieciet
Salieciet
Salieciet
Salieciet

Gatavs? Ir pienācis laiks ieskrūvēt RS485 savienojumu! Mēs izmantosim vītā viena pāra kabeli ar zemi, ko parasti izmanto tālruņa līnijām. Izmantojot šo kabeli, varat pārraidīt lielos attālumos (1,2 km). Tomēr mēs vienkārši izmantojam pietiekami ilgu kabeli, lai izietu no skapja un novietotu Arduino pieejamā vietā.

Finder RS485 savienojums

RS485 saskarne nosauc savus termināļus A, B un COM. Kopīgs de facto standarts ir TX+/RX+ vai D+ izmantošana kā alternatīva B (augsts MARK, ti, dīkstāvē), TX-/RX- vai D- kā alternatīva A (zems MARK, ti, dīkstāvē). MKR vairogs atbalsta arī Full Duplex, jūs redzēsit divus citus termināļus-Y un Z. Šeit mēs ieskrūvējam kabeļa otru galu, jo no datu lapas mēs zinām, ka pussupleksā komunikācija notiek tikai Y un Z termināļos. COM terminālim jābūt savienotam ar ISOGND. Tā kā mēs izmantojam pusdupleksu savienojumu un kabeļi ir vienādranga, mums ir jāiestata MKR485 vairoga slēdži, lai tie atbilstu mūsu iestatījumiem: mēs iestatījām HALF (2 izslēgts) un pārtraukšanu YZ (3 līdz IESLĒGTS); pirmajam nav nozīmes. Izbeigšana ir pretestība, kas savieno abus datu termināļus, lai mazinātu traucējumus.

Tas būs īstais. Tagad jūs varat aizvērt skapi un koncentrēties uz programmatūras pusi!

4. solis: kods

Kods
Kods

#iekļaut

#include #include #include // jūsu wifi akreditācijas dati const char ssid = "**********"; const char pass = "**********";

WiFiClient tīkls; MQTTClient klients; neparakstīts garais kurss = 60000; // noklusējuma atsvaidzes intensitāte ms neparakstīts ilgi lastMillis = 0;

// connect function void connect () {Serial.print ("wifi pārbaude …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); kavēšanās (1000); } Serial.print ("\ nizveido savienojumu …"); while (! client.connect ("device_name", "user_name", "user_pw"))) {// MAINĪT, KAS ATBILST SAVIEM IESTATĪJUMIEM Serial.print ("."); kavēšanās (1000); } Serial.println ("\ nsaistīts!"); client.subscribe ("enerģija/galvenais/atsvaidzināt"); // tēma, lai atsvaidzināšanas biežumu iestatītu attālināti} // mqtt saņemt atzvanīšanas funkciju void messageReceived (String & topic, String & payload) {Serial.println ("ienākošais:" + tēma + " -" + lietderīgā slodze); if (topic == "energy/main/refreshrate") {// atsvaidzes intensitātes apstrādātāja likme = payload.toInt ()*1000; Serial.println ("jauna likme"+virkne (likme)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); kamēr (! Seriāls); client.begin ("broker_ip", neto); // MAINĪT SAVIENOJUMU SETUP klientam.onMessage (messageReceived); // startējiet Modbus RTU klientu, ja (! ModbusRTUClient.begin (9600)) {Serial.println ("Neizdevās palaist Modbus RTU klientu!"); kamēr (1); }}

void loop () {client.loop (); if (! client.connected ()) {// pārbaudīt tīkla savienojumu connect (); } // publicēt ziņojumu pēc atsvaidzināšanas (nebloķēšanas rutīnas), ja (millis () - lastMillis> rate) {lastMillis = millis (); // padarīt visus nolasītos zvanus float volt = readVoltage (); kavēšanās (100); pludiņa pastiprinātājs = readCurrent (); kavēšanās (100); dubultvats = readPower (); kavēšanās (100); pludiņš hz = readFreq (); kavēšanās (100); dubultā wh = lasītEnerģija (); // publicēt rezultātus ar saistītām tēmām client.publish ("enerģija/galvenais/spriegums", String (volt, 3)); client.publish ("enerģija/galvenā/strāva", virkne (pastiprinātājs, 3)); client.publish ("enerģija/galvenā/jauda", virkne (vats, 3)); client.publish ("enerģija/galvenā/frekvence", virkne (hz, 3)); client.publish ("enerģija/galvenā/enerģija", virkne (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"); kavēšanās (100); }}

/ * Funkcijas Finder enerģijas skaitītāju reģistru lasīšanai * * Pārbaudiet modbus protokola rokasgrāmatu, lai saprastu kodu * 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)) {// veikt zvanu reģistram Serial.print ("neizdevās nolasīt spriegumu!"); Serial.println (ModbusRTUClient.lastError ()); // kļūdu apstrādātājs} else {uint16_t word1 = ModbusRTUClient.read (); // lasīt datus no bufera uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = vārds1 << 16 | vārds2; // bitu matemātiskais volt = milivolt/1000.0; } atgriešanās volts; } pludiņš readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("neizdevās nolasīt pašreizējo!"); Serial.println (ModbusRTUClient.lastError ()); } cits {uint16_t vārds1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = vārds1 << 16 | vārds2; ampēri = miliampri/1000,0; } atgriešanās ampēri; }

double readPower () {dubultvats = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("neizdevās nolasīt jaudu!"); Serial.println (ModbusRTUClient.lastError ()); } cits {uint16_t vārds1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milivati; ja (vārds1 >> 7 == 0) {milivats = vārds1

Ieteicams: