Slimme meter uitlezen via Arduino - data corrupt

Hi All,

Ben ook begonnen met het uitlezen van een slimme meter via Arduino!
Het gaat om een Sagemcom digitale meter (België) - type T211.
Ik heb volgende handleiding gevolgd: http://domoticx.com/p1-poort-slimme-meter-uitlezen-hardware/

Via een SN74AS04N IC heb ik de datalijn van de slimme meter aangesloten en via altSerial (gekoppeld op pin 48 van een Arduino Mega) kreeg ik data.

Deze data was initieel vrij onleesbaar, af en toe een karakter, maar meer onleesbare tekens dan wat anders.
Na wat zoeken op o.a. dit forum kwam ik te weten dat ik met een open collector te maken heb bij mijn digitale meter, en werd aangeraden een 2kohm weerstand tussen de datalijn en de +5V toe te voegen. Eens ik dit deed werd het resultaat beter, maar er de data bleef grotendeels onleesbaar. Wat verder experimenteren met weerstanden hielp, van 1kohm tot 15 kohm merkte ik dat het beste resultaat 4.7kohm was. Daar zit ik nu.
De data is af en toe vrij leesbaar voor de helft van het telegram. Daarna lijkt ie weer de mist in te gaan. Zie afbeelding hieronder.

Qua code heb ik volgend stukje:

#include <AltSoftSerial.h>
// AltSoftSerial always uses these pins:
//
// Board          Transmit  Receive   PWM Unusable
// -----          --------  -------   ------------
// Teensy 2.0         9        10       (none)
// Teensy++ 2.0      25         4       26, 27
// Arduino Uno        9         8         10
// Arduino Mega      46        48       44, 45
// Wiring-S           5         6          4
// Sanguino          13        14         12
 
AltSoftSerial altSerial;
char input; // inkomende seriele data (byte)
 
void setup() {
    Serial.begin(9600);
    altSerial.begin(115200);
}
 
void loop() {
  if (altSerial.available()) {
    input = altSerial.read();
   
    // --- 7 bits instelling ---
    input &= ~(1 << 7);
    char inChar = (char)input;
    // --- 7 bits instelling ---
 
    Serial.print(input); //Debug
  }   
}

Ik durf niet te zeggen of het probleem harware of software matig is, maar naar mijn gevoel zit het meer aan de hardware kant...
Tips of suggesties om het telegram correct te kunnen ontvangen? Erg welkom!
Bedankt alvast :slight_smile:

Laten we beginnen met het feit dat een Mega 4 seriële porten heeft. Gebruik bv Serial1 in plaats van een softwarematige implementatie van een seriële poort.

//edit
Je zult mogelijk data missen omdat je de ontvangen gegevens langzamer doorstuurt dan je ze ontvangt. Zet de baudrate voor de communicatie met de PC ook op 115200 (en pas de seriele monitor daar op aan).

Goed punt! En meteen ook een mooie verbetering! Bedankt sterretje!
Aangesloten op Serial1 via pin 19.
De 4.7kOhm blijft aangesloten.
Ik krijg nu inderdaad duidelijke én leesbare data.

Voor de geïnteresseerden; de code is aangepast naar:


//The Arduino Mega has three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX). 

const int BUFFER_SIZE = 512;
char buf[BUFFER_SIZE];
String readString;

void setup() {
    Serial.begin(9600);
    Serial1.begin(115200);
}
 
void loop() {
  // check if data is available
  if (Serial1.available() > 0) {
    // read the incoming bytes:
    int rlen = Serial1.readBytesUntil('/', buf, BUFFER_SIZE);

    // prints the received data
    //Serial.print("I received: ");
    for(int i = 0; i < rlen; i++)
    {      
      readString += buf[i];           
    }    

    Serial.println(readString);
    readString = "";
    buf[0] = '\0';   

  }
}

En dat geeft volgende resultaat:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.