Använda Arduino att kommunicera med Tracer MT5 laddningsregulatorn (2 / 3 steg)
Steg 2: Installera denna Arduino skiss
Denna Arduino skiss (och de flesta av info i detta inlägg) är från https://github.com/xxv/tracer men de använde en seriell överföringshastigheten 57600, jag var tvungen att släppa den till 9600 att arbeta på min Arduino/dator kombination.
Jag hade vissa problem med att kopiera och klistra in skissen nedan på grund av otillåtna tecken, så om du får något fel med skissen får originalet från github webbplats.
/*
* Ett gränssnitt till Tracer solar regulator. * Kommunicera på ett liknande sätt som MT-5 displayen * /
#include
SoftwareSerial myserial (10, 11); RX, TX
uint8_t starta [] = {0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xEB, 0x90, 0xEB, 0x90, 0xEB, 0x90}; uint8_t id = 0x16; uint8_t cmd [] = {0xA0, 0x00, 0xB1, 0xA7, 0x7F};
uint8_t buff [128];
void setup() {Serial.begin(9600);
myserial.BEGIN(9600); }
flyta to_float (uint8_t-buffert, int offset) {unsigned kort full = buffert [offset + 1] << 8 | buff [offset];
returnera full / 100,0; }
void loop() {Serial.println ("läsning från Tracer");
myserial.write (start, sizeof(start)); myserial.write(ID); myserial.write (cmd, sizeof(cmd));
int läsa = 0;
för (int jag = 0; jag < 255; i ++) {om (myserial.available()) {buff [Läs] = myserial.read(); Läs ++;}}
Serial.Print ("Läs"); Serial.Print(Read); Serial.println ("byte").
för (int jag = 0; jag < Läs; i ++) {Serial.print (buff [i], HEX); Serial.Print("");}
Serial.println();
flyta batteri = to_float (buff, 9); flyta pv = to_float (buff, 11); 13-14 reserverade float load_current = to_float (buff, 15); flyta over_discharge = to_float (buff, 17); flyta battery_max = to_float (buff, 19); 21 belastning på/av / / 22 överbelasta ja/nej / / 23 belastning kort ja/nej / / 24 förbehållna / / 25 batteri överbelastning / / 26 över ansvarsfrihet ja/nej uint8_t full = buff [27]. uint8_t laddning = buff [28]. int8_t battery_temp = buff [29] - 30; flyta charge_current = to_float (buff, 30);
Serial.Print ("last är"); Serial.println (buff [21]? "on": "off");
Serial.Print ("belastningsström:"); Serial.println(load_current);
Serial.Print ("batterinivå:"); Serial.Print(Battery); Serial.Print("/"); Serial.println(battery_max);
Serial.Print ("batteri full:"); Serial.println (full? "ja": "nej");
Serial.Print ("batteritemperatur:"); Serial.println(battery_temp);
Serial.Print ("PV spänning:"); Serial.println(PV);
Serial.Print ("laddning:"); Serial.println (laddning? "ja": "nej");
Serial.Print ("laddström:"); Serial.println(charge_current);
Delay(1000); }