Arduino: definisi baterai dan output informasi ke konsol

Mungkin semua orang, membuat robot otonom mereka sendiri, ingin menentukan tingkat pengisian baterai dan menampilkannya di layar atau di konsol. Fungsi ini terutama diperlukan untuk debugging, tetapi dalam beberapa kasus, menentukan muatan adalah bagian penting dari fungsionalitas robot. Kesulitan dalam melakukan tugas ini adalah membatasi tegangan input maksimum ke konverter analog-ke-digital ( 5V ), serta lompatan besar dalam nilai yang diperoleh. Dalam posting ini, saya ingin menunjukkan cara saya membaca voltase dari baterai dan menentukan biaya.

Pertama-tama, perlu menyolder dua resistor 1 kΩ ke steker daya dari rangkaian pembagi tegangan ini:

gambar

Jadi, jika tegangan keluaran baterai yang terisi penuh tidak melebihi 10V , maka tegangan setelah pembagi akan kurang dari 5V, yang berarti akan dikenali secara memadai oleh konverter analog-ke-digital. .

Sekarang Anda perlu menghubungkan output pembagi ke input analog apa pun di Arduino. Dalam kasus saya, ini adalah kaki A5. Kemudian cobalah membaca voltase dari baterai:

void setup() {
  Serial.begin(9600);
  pinMode(A5, INPUT);
}

void loop() {
  float k = 2;
  float voltage = k*analogRead(A5);
}

Ternyata tidak jelas itu, karena kami lupa mengonversi nilainya menjadi sistem angka desimal. Untuk melakukan ini, bagi semuanya dengan 1024:

void loop() {
  float k = 2/1024;
  float voltage = k*analogRead(A5);
}

Sekarang kita memilih dengan bantuan voltmeter suatu koefisien di mana tegangan akan kira-kira sama dengan tegangan nyata:

  float k = 2*1.12;
  float voltage = k*4.5f/1024*analogRead(A5);

Kami mendapat tegangan lompat-naik yang kuat, seringkali tidak serupa dengan yang dibutuhkan. Untuk memperbaiki kesalahan ini, tambahkan pemfilteran low-pass dengan faktor pemulusan paling tepat untuk proyek Anda:


void loop() {
  float k = 2*1.12;
  float voltage = k*4.5f/1024*analogRead(A5);
  float chargeLevel_procents;
  float chargeLevel;
  float y;
  int z;

  //   

  float A_v = voltage; //
  float A_K = 0.3; // 
  static float A_y; // 
  
  A_y = A_y - A_K * (A_y - A_v);
}

Sekarang tinggal mengukur tegangan pada baterai yang terisi penuh dan terisi penuh. Dalam kasus saya, perbedaannya persis 1V.

Setelah itu, Anda perlu menemukan daya baterai dalam persen:

  y = A_y / 8.4 * 100;
  
  chargeLevel_procents = y;
  chargeLevel = z;

Kami hanya perlu menerjemahkan ini ke dalam ikon baterai (atau di dalam kotak, seperti milik saya) dan mengeluarkannya ke konsol:


if(chargeLevel_procents >= 0 && chargeLevel_procents < 33) {
    z = 1; // 1/3 
  }
  
  else if(chargeLevel_procents >= 33 && chargeLevel_procents < 66) {
    z = 2; // 2/3 
  }

  
  else if(chargeLevel_procents >= 66 && chargeLevel_procents <= 100) {
    z = 3; //  
  }

Serial.print("\t Voltage: ");
    Serial.print(A_y);
    Serial.print(" V ");
    Serial.print("\t Charge: ");
    if(z == 1) {
      Serial.print("■");
    }
    else if(z == 2) {
      Serial.print("■■");
    }
    else if(z == 3) {
      Serial.print("■■■");
    }
    else {
      Serial.print("ERROR");
    }
    Serial.print("\r\n");  

Untuk melihat hasilnya, saya sarankan menggunakan Putty, karena mendukung pengkodean apa pun, tidak seperti "port monitor" pada Arduino IDE.

Source: https://habr.com/ru/post/id390967/


All Articles