KWS-AC301 Wattmeter Power Meter

Odpovědět
ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

KWS-AC301 Wattmeter Power Meter

Příspěvek od ohruska » 27 črc 2022, 18:35

Dobrý den.
Koupil jsem si tento měřič spotřeby el. energie: https://www.aliexpress.com/item/1005003374850209.html
Má také výstup RS485.
Dokonce je k němu i grafický program na PC.
Ale já měřič potřebuji umístit za elektroměr, to je na chodbu v paneláku.
Tak jsem si myslel, že data budu vyčítat do WEMOS D1 a ukládat na uložiště.
Potřeboval bych pomoci s vyčítáním hodnot přes RS485. Alespoň nasměrovat.
Děkuji za pomoc.
Ota

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: KWS-AC301 Wattmeter Power Meter

Příspěvek od peterple » 27 črc 2022, 21:53

Čo som tak pogooglil tak o nejakom popise protokolu ani chýru ani slychu. Pravdepodobne MODBUS. Ani žiadne DIY projekty na tom nefičia. Takže ak chceš byť prvý tak si zožen RS485/USB, pripoj to na počítač, odchyť komunikáciu, analyzuj čo je zač a napíš si pre svoje železo ovládač. Alebo zadaj nejakému študentovi bakalárku.

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: KWS-AC301 Wattmeter Power Meter

Příspěvek od Caster » 27 črc 2022, 23:26

V podstatě je to samé jako UART, RS-485 jen pracuje s jinou úrovní a charakteristikou signálu.

Potřebuješ koupit Převodník UART na RS 485, MAX485 a stáhnout si Arduino knihovnu ArduinoRS485. Příklad kódu pro příjem RS-485 signálu je zde (Examples a RS485Receiver). ;)

P.S. Podívej se také na Modbus (RS-485) Using Arduino

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: KWS-AC301 Wattmeter Power Meter

Příspěvek od ohruska » 28 črc 2022, 09:51

Tak už se podařilo...

Kód: Vybrat vše

 
  #include<ModbusMaster.h>
  #define MAX485_DE      3
  #define MAX485_RE_NEG  2
  ModbusMaster node;

  void preTransmission()
  {
    digitalWrite(MAX485_RE_NEG, 1);
    digitalWrite(MAX485_DE, 1);
  }

  void postTransmission()
  {
    digitalWrite(MAX485_RE_NEG, 0);
    digitalWrite(MAX485_DE, 0);
  }

  void setup() {
    pinMode(MAX485_RE_NEG, OUTPUT);
    pinMode(MAX485_DE, OUTPUT);
    // Init in receive mode 
    digitalWrite(MAX485_RE_NEG, 0);  
    digitalWrite(MAX485_DE, 0);  
  
    Serial.begin(9600);  
    //slave ID 1  
    node.begin(2, Serial);  

    Serial.println("Starting Modbus Transaction:");  
    node.preTransmission(preTransmission);  
    node.postTransmission(postTransmission);  
  }

  void loop() {
    static uint32_t i;
    uint8_t j, result;
    uint16_t data[10];

    i++;

    //result = node.readInputRegisters(0312,1);
result = node.readHoldingRegisters(14,17);
    Serial.println("");
  
    if (result == node.ku8MBSuccess) {
      Serial.println("Success, Received data: ");
      for (j = 0; j < 17; j++) {
        data[j] = node.getResponseBuffer(j);
        if (j==0) 
        {
        Serial.print("Napětí   = ");
        Serial.print(float(data[j])/10);
        Serial.println(" V");
        }
        if (j==1) 
        {
        Serial.print("Proud    = ");
        Serial.print(float(data[j])/10,3);
        Serial.println(" A");
        }
         if (j==2) 
        {
        Serial.print("Prikon A = ");
        Serial.print(float(data[j])/10);
        Serial.println(" W");
        }
         if (j==3) 
        {
        Serial.print("Prikon R = ");
        Serial.print(float(data[j])/10);
        Serial.println(" VAR");
        }
         if (j==4) 
        {
        Serial.print("Prikon R = ");
        Serial.print(float(data[j])/10);
        Serial.println(" Ah");
        }
         if (j==10) 
        {
        Serial.print("Príkon   = ");
        Serial.print(data[j]);
        Serial.println(" Wh");
        }
        if (j==11) 
        {
        Serial.print("Cas      = ");
        Serial.print(data[j]);
        Serial.println(" T");
        }
        if (j==12) 
        {
        Serial.print("Teplota  = ");
        Serial.print(data[j]);
        Serial.println(" °C");
        }
         if (j==15) 
        {
        Serial.print("Pow.fakt = ");
        Serial.print(float(data[j])/100);
        Serial.println(" PF");
        }
         if (j==16) 
        {
        Serial.print("Frekvence= ");
        Serial.print(float(data[j])/10);
        Serial.println(" Hz");
        }
      }
      Serial.println("");
    } else {
      Serial.print("Failed, Response Code: ");
      Serial.print(result, HEX);
      Serial.println("");
      delay(5000); 
    }
    delay(1000);
  }
  }

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: KWS-AC301 Wattmeter Power Meter

Příspěvek od Caster » 28 črc 2022, 14:02

Dobrá zpráva. Je vidět, že nejsi žádné ořezávátko ;) .

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 12 hostů