From 214784c27be8cfe03e0a42f0e85a41842a10d0cb Mon Sep 17 00:00:00 2001 From: Denis Denisov Date: Sun, 25 Feb 2024 13:04:32 +0300 Subject: [PATCH] Initial charger version --- charger.rrb | Bin 0 -> 3904 bytes charger/charger.ino | 111 ++++++++++++++++++++++++++++++++++++++++++++ charger_new.rrb | Bin 0 -> 5501 bytes 3 files changed, 111 insertions(+) create mode 100644 charger.rrb create mode 100644 charger/charger.ino create mode 100644 charger_new.rrb diff --git a/charger.rrb b/charger.rrb new file mode 100644 index 0000000000000000000000000000000000000000..0fbb9d5b3d0dde9fcd9bf3c6b6408945a2f86c3f GIT binary patch literal 3904 zcmY+Cc{J3I*T+Yev5!_;W|T@PTZ@rx`1-c!Q50E{v2R(XvQ0i?#u`OZ{jwwmEmKqo zVRl;xjk1h&MiE(Nh8YZo@i@l9|nP>K>t6ELO>u`hV1{C zQXmcm?7iPE=kO83@NWR_(()zdcvOjOg7@x2gW1+9^Ns17T^-# z8Mx27i&IDzvH%|Ce}!mXctuyp-a_0A^p^-*`F?4*qv$|FSvw4Y#lR2;m3w<*%gs

`$0tJ$V!ksrVLzNkG{yU{_8_}dl)OcX9E$5%&` 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 + +ModbusRTU mb; + +#define MODBUS_ADDRESS 1 + +#define I_ACC_LOW_REGISTER 0 +#define I_ACC_HIGH_REGISTER 1 +#define I_LAMP_LOW_REGISTER 2 +#define I_LAMP_HIGH_REGISTER 3 +#define ACC_STATE_REGISTER 4 +#define LAMP_STATE_REGISTER 5 + +#define ACC_PIN 2 +#define LAMP_PIN 3 + +// Мощность лампочки (Вт) +const float LAMP_POWER = 21.0; +const float LAMP_REFERENCE_CURRENT = 12.0; + +// Сопротивление токоограничивающего резистора +const float R_LIMITER = 4.7; + +float R_lamp; + +void setup() +{ + Serial.begin(115200); + pinMode(A4, INPUT); + pinMode(A5, INPUT); + pinMode(A2, INPUT); + pinMode(A3, INPUT); + pinMode(ACC_PIN, OUTPUT); + pinMode(LAMP_PIN, OUTPUT); + R_lamp = LAMP_REFERENCE_CURRENT / (LAMP_POWER / LAMP_REFERENCE_CURRENT); + mb.begin(&Serial); + mb.slave(MODBUS_ADDRESS); + mb.addHreg(I_ACC_LOW_REGISTER); + mb.addHreg(I_ACC_HIGH_REGISTER); + mb.addHreg(I_LAMP_LOW_REGISTER); + mb.addHreg(I_LAMP_HIGH_REGISTER); + mb.addHreg(ACC_STATE_REGISTER); + mb.addHreg(LAMP_STATE_REGISTER); +} + +float I_lamp; +float I_acc; + +void ReadLamp() +{ + int a4 = analogRead(A4); + int a5 = analogRead(A5); + // multiply by 5 as reference current, + // multiply by 3 because of the divider + float v1 = a4 / 1023.0 * 5 * 3; + float v2 = a5 / 1023.0 * 5 * 3; + I_lamp = (v1 - v2) / R_lamp; +} + +void ReadAcc() +{ + int a2 = analogRead(A2); + int a3 = analogRead(A3); + // multiply by 5 as reference current, + // multiply by 3 because of the divider + float v1 = a2 / 1023.0 * 5 * 3; + float v2 = a3 / 1023.0 * 5 * 3; + I_acc = (v1 - v2) / R_LIMITER; +} + +void WriteFloatReg(int start, float val) +{ + uint16_t* d = (uint16_t*)(&val); + mb.Hreg(start, *d); + mb.Hreg(start + 1, *(d + 1)); +} + +uint16_t acc_state = 0; +uint16_t lamp_state = 0; + +void loop() +{ + ReadLamp(); + ReadAcc(); + WriteFloatReg(I_ACC_LOW_REGISTER, I_acc); + WriteFloatReg(I_LAMP_LOW_REGISTER, I_lamp); + Serial.print("I_acc = "); + Serial.print(I_acc); + Serial.print(" I_lamp = "); + Serial.print(I_lamp); + Serial.println(); + mb.task(); + lamp_state = mb.Hreg(lamp_state); + acc_state = mb.Hreg(acc_state); + if (lamp_state) + { + digitalWrite(LAMP_PIN, 1); + } + else + { + digitalWrite(LAMP_PIN, 0); + } + if (acc_state) + { + digitalWrite(ACC_PIN, 1); + } + else + { + digitalWrite(ACC_PIN, 0); + } +} diff --git a/charger_new.rrb b/charger_new.rrb new file mode 100644 index 0000000000000000000000000000000000000000..40d7b22b51cfb7f4081c71ea1baea8f617340e23 GIT binary patch literal 5501 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 literal 0 HcmV?d00001