Sroves matavimas

Iš Žinynas.
21:04, 18 spalio 2023 versija, sukurta \dev\null (Aptarimas | indėlis) (Naujas puslapis: Srovės matavimas gėliniam akumuliatoriui pasitelkiant esp8266 (wemos d1 mini) Jungimo schema 400px * R1 1M * R2 220K Kadangi wemos...)
(skirt) ← Ankstesnė versija | Dabartinė versija (skirt) | Vėlesnė versija → (skirt)
Jump to navigation Jump to search

Srovės matavimas gėliniam akumuliatoriui pasitelkiant esp8266 (wemos d1 mini)

Jungimo schema

Voltage-Divider-Schematic.png

  • R1 1M
  • R2 220K

Kadangi wemos d1 mini ADC geba skaityti iki 3.3V srovę, reikia naudoti voltage divideri, kad ją sumažinti, vėliau perskaičiuosime tikslią srovę kode ir taip pat išvesime akumuliatoriaus įkrovos būseną procentais..

Jungimo schema su esp8266 (wemos d1 mini)

  • Jungiame nuo baterijos GND iki wemos 1 GND
  • Jungiame iš pastarosios schemos išeinantį OUT kontaktą į wemos A0 pin
/* 
 * 12V 9AH gelio baterijos įkrovos matuoklis (c) 2023 \dev\null
 */

void setup() {
  Serial.begin(115200);
}

float getBatteryVoltage() {
  float voltage = 0.0; 
  int sensorValue;
  voltage = analogRead(A0) * 0.02640; // keičiame paskutinius skaičius jeigu reikalingas šioks toks kalibravimas
  return voltage;
}

int getBatteryPercentage(float voltage) {
  float top = 13.75; // aukščiausia akumuliatoriaus srovė (pilnai įkrautas)
  float bottom = 11.60; // žemiausia akumuliatoriaus srovė (išsikrovęs)
  float range = top - bottom;
  float rangeVolts = voltage - bottom;
  int percent = (rangeVolts / range) * 100;
  
  if(percent > 100){
    percent = 100;
  }
  if(percent < 0) {
    percent = 0;
  }
  return percent;
}

void loop() {
  float volts = getBatteryVoltage();
  String voltstr = String(volts)+"V";
  String percents = String(getBatteryPercentage(volts))+"%";
  Serial.println(voltstr+" "+percents);
  delay(2000);
}