TỰ LÀM MẠCH KIỂM TRA DUNG LƯỢNG PIN DÙNG ARDUINO
Để kiểm tra được dung lượng pin, chúng ta dùng một điện trở để đo cường độ dòng điện được nối với LM358 và MOSFET.
Mạch kiểm tra dung lượng pin sử dụng Arduino sử dụng 2 nút nhấn (+ và -) để điều chỉnh dòng load trước khi bắt đầu đo.
Nút nhấn thứ 3 dùng để reset lại board để kiểm tra viên pin tiếp theo.
Bằng cách sử dụng chân A0 trên Arduino Nano để kiểm tra điện thế sụt giảm trên pin trong quá trình xả dòng để tính toán được dung lượng pin.
Dung lượng pin này sẽ được hiển thị trên màn hình LCD 16×2.
LINH KIỆN SỬ DỤNG
- Arduino Nano
- LCD 16 x 2
- LM358N
- Điện trở – 4.7k(2), 47R(2), 1M, 10k, 3R
- Tụ điện 100nF(6), 100uf-16V, 1000uF-16V
- Nút nhấn (3)
- IRF3710
- Dây
- Đế pin
- Nguồn cấp
MẠCH NGUYÊN LÝ – SCHEMATICS
Mạch đo dung lượng pin – Schematics
Hình ảnh mạch đo dung lượng pin sau khi đã layout trên Altium:
Mạch đo dung lượng pin – Mạch 3D Altium
Download Gerber File tại đây:
Battery_capacity_measurement_using_Arduino
MẠCH ĐO DUNG LƯỢNG PIN – CODE ARDUINO
THƯ VIỆN SỬ DỤNG
Sử dụng thư viện JC Button để giao tiếp với nút nhấn: JC_Button
CODE MẪU ARDUINO
Toàn bộ code mẫu arduino dùng để đo dung lượng pin được chia sẻ ở đây:
#include #include const float Low_BAT_level = 3.2; //Current steps with a 3R load (R7) const int Current[] = {0, 37, 70, 103, 136, 169, 202, 235, 268, 301, 334, 367, 400, 440, 470, 500, 540}; const byte RS = 2, EN = 3, D4 = 4, D5 = 5, D6 = 6, D7 = 7; const byte PWM_Pin = 10; const byte Speaker = 12; const int BAT_Pin = A0; int PWM_Value = 0; unsigned long Capacity = 0; int ADC_Value = 0; float BAT_Voltage = 0; byte Hour = 0, Minute = 0, Second = 0; bool calc = false, Done = false; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); Button UP_Button(16, 25, false, true); Button Down_Button(15, 25, false, true); void setup() { pinMode(PWM_Pin, OUTPUT); pinMode(Speaker, OUTPUT); analogWrite(PWM_Pin, PWM_Value); UP_Button.begin(); Down_Button.begin(); lcd.setCursor(0, 0); lcd.begin(16, 2); lcd.print("Battery Capacity"); lcd.setCursor(0, 1); lcd.print("Measurement v1.0"); delay(3000); lcd.clear(); lcd.print("Load Adj:UP/Down"); lcd.setCursor(0, 1); lcd.print("0"); } void loop() { UP_Button.read(); Down_Button.read(); if (UP_Button.wasReleased() && PWM_Value < 80 && calc == false) { PWM_Value = PWM_Value + 5; analogWrite(PWM_Pin, PWM_Value); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(String(Current[PWM_Value / 5]) + "mA"); } if (Down_Button.wasReleased() && PWM_Value > 1 && calc == false) { PWM_Value = PWM_Value - 5; analogWrite(PWM_Pin, PWM_Value); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(String(Current[PWM_Value / 5]) + "mA"); } if (UP_Button.pressedFor(1000) && calc == false) { digitalWrite(Speaker, HIGH); delay(100); digitalWrite(Speaker, LOW); lcd.clear(); timerInterrupt(); } } void timerInterrupt() { calc = true; while (Done == false) { Second ++; if (Second == 60) { Second = 0; Minute ++; lcd.clear(); } if (Minute == 60) { Minute = 0; Hour ++; } lcd.setCursor(0, 0); lcd.print(String(Hour) + ":" + String(Minute) + ":" + String(Second)); lcd.setCursor(9, 0); ADC_Value = analogRead(BAT_Pin); BAT_Voltage = ADC_Value * (5.0 / 1024); lcd.print("V:" + String(BAT_Voltage)); lcd.setCursor(0, 1); lcd.print("BAT-C: Wait!..."); if (BAT_Voltage < Low_BAT_level) { lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); Capacity = (Hour * 3600) + (Minute * 60) + Second; Capacity = (Capacity * Current[PWM_Value / 5]) / 3600; lcd.print("BAT-C:" + String(Capacity) + "mAh"); Done = true; PWM_Value = 0; analogWrite(PWM_Pin, PWM_Value); digitalWrite(Speaker, HIGH); delay(100); digitalWrite(Speaker, LOW); delay(100); digitalWrite(Speaker, HIGH); delay(100); digitalWrite(Speaker, LOW); } delay(1000); } }
ĐO DUNG LƯỢNG PIN
Sau khi upload đoạn code trên vào Arduino ta tiến hành đo dung lượng pin qua các bước sau:
Sơ đồ nối dây để đo pin 18650
Màn hình chờ của board mạch
Sau khi kết nối pin và nguồn cho Arduino như hình trên, điều chỉnh dòng xả bằng nút nhấn + và -,
Sau đó, giữ nút nhấn + cho đến khi nghe tiếng “bíp” từ buzzer.
Quá trình đo sẽ được bắt đầu.
Điều chỉnh dòng xả pin
Quá trình đo sẽ được diễn ra tự động, bạn chỉ việc ngồi chờ:
Quá trình kiểm tra pin
Sau khi kiểm tra xong, kết quả sẽ được hiển thị như hình bên dưới:
Kết quả sau khi kiểm tra pin
Trên viên pin ghi là 8800mAh nhưng kết quả đo chỉ có 1190mAh.