아두이노 2채널 배터리 체커 (내부저항 측정 및 방전기능) 업그레이드



얼마 전에 공개한 아두이노 소스를 객체지향형 언어인 C++로 재코딩했었다.
이유는 테스트 채널 추가를 쉽게 하기 위해서다.

일단 계획한 대로 스케줄링이 잘 돌아가는지는 검증차 진행한 작업이다.
버튼과 홀더를 하나씩 더 추가했고, OLED는 0.96인치를 사용했다.



+

노파심에서 짚고 넘어가자면 내부저항과 용량 테스트의 신뢰도는 낮은 편이다.
이렇게 얘기하는 이유는 정확한 용량은 필자도 레퍼런스급의 제대로된 방전기가 없어 신뢰도를 말 할 수 없는 데다가,,

만들 때마다 조금씩 수치가 틀어지는 것이 공식은 사용된 케이블과 접촉저항을 고려하지 않은 이론 그 자체이고,
실제는 제작할 때 사용하는 전선과 홀더 등등 각종 선로상에 저항이 존재하고 이 때문에 수치는 틀어진다.

그럼에도 폐기 수준의 배터리는 충분히 가늠할 수 있어 제법 유용하다고 할 수 있겠다.
즉, 정확한 수치의 측정용이라기 보다는 버리기 애매한 배터리 들을 골라서 버릴 수 있도록 도와준다고 생각하면 된다.




회로도


기존의 회로도에 배터리와 모스펫 그리고 LED를 그대로 카피해서 추가했다.
측 기존 테스터기에 슬롯을 하나 더 달아 하나의 아두이노로 두 개의 배터리를 동시에 테스트 할 수 있도록 했다.

아두이노 프로 미니 기준 4채널까지는 꾸역꾸역 구현할 수는 있겠으나 복잡한 배선과 문제 발생시 디버깅이 힘들 듯 보여 현재로선 회의적이다.




구현방법


스케치 파일작업이다.
채널을 추가하기 위해서는 테스트 객체를 하나씩 더 생성해서 loop()문에 넣어주기만 하면 일단 동작은 한다.

BatteryInResistTest brTestA(1, PIN_VOLTAGE_A, PIN_MOSFET_A, PIN_LED_A, COLLECT_COUNT, RESIST_TEST_TIMER);
BatteryInResistTest brTestB(2, PIN_VOLTAGE_B, PIN_MOSFET_B, PIN_LED_B, COLLECT_COUNT, RESIST_TEST_TIMER);

BatteryCapacityTest bcTestA(1, PIN_VOLTAGE_A, PIN_MOSFET_A, PIN_LED_A, COLLECT_COUNT, CAPA_TEST_TIMER);
BatteryCapacityTest bcTestB(2, PIN_VOLTAGE_B, PIN_MOSFET_B, PIN_LED_B, COLLECT_COUNT, CAPA_TEST_TIMER);



void loop()
{
  oled.drawInfo(millis());
 
  if (pushButtonA.getCurButtonState() != PRESSED)
  {
    if ( pushButtonA.getCurMode() == MODE_INRESIST_TEST )
          brTestA.doTest(millis());
    else  bcTestA.doTest(millis());
  }

  if (pushButtonB.getCurButtonState() != PRESSED)
  {
    if ( pushButtonB.getCurMode() == MODE_INRESIST_TEST )
          brTestB.doTest(millis());
    else  bcTestB.doTest(millis());
  }


  pushButtonA.checkButton(millis());
  pushButtonB.checkButton(millis());
}


다만, 정보를 화면에 표시할 정보가 늘어나면서 OLED 수정이 불가피한데,,
간단하게 화면을 상하 반으로 나누고 상단은 슬롯 1, 하단은 슬롯 2의 정보를 기존과 같은 형식으로 보여주도록 했다.

스케치 파일은 이 글의 하단부를 참고!!








위 회로도 그대로 만능기판에 옮겨보았다.



부하저항은 5W 2옴의 시멘트 저항을 사용했으며,
실제 테스터로 찍어보니 2.6옴이 나와 코드에 반영했다.

2.6옴 기준으로 만충상태에서 1.5A이상의 방전전류가 나와 두 개를 동시에 방전시 열이 상당할 듯 보인다.
따라서 방열판을 달고 미니팬까지 달아주었다.




기본 모드은 내부저항 측정이다.
2채널 표시를 위해 아래와 같이 수정했다.

#1-F: 2.95V 0.13R
#2-F: 3.07V 0.34R

#1, #2는 슬롯번호이고,
뒤에 FFinish이다. 버튼을 누르면 재시작 혹은 S(top)가 토글된다.
2.95V현재 배터리의 전압이고 0.13R 내부저항 값이다.



슬롯 1번의 배터리를 방전 모드로 전환한 모습이다.
B1 리셋 버튼을 5초 정도 누르면 모드가 변환된다.





상단에 LED도 각 채널별로 달아주어서,
채널별로 부하가 걸리는 상태를 LED로 알 수 있게 했다.

LED가 켜져 있으면 모스펫이 켜져서 부하저항과 연결, 방전중이라고 생각하면 된다.








12V 미니팬인데,,
5V 입력 전원에서 바로 연결해주었다.
소음 거의 없고 내부 방열판이 있어 이정도면 충분하지 싶다.



아두이노 메인전원은 5V DC잭을 사용하도록 했다.



메인 스위치다.
이번엔 배터리의 마이너스 라인과 입력전원(VCC)의 마이너스 라인을 모두 함께 스위칭해서,,
스위치가 꺼지면 완전하게 기기가 꺼지도록 했다.

이전에는 A0핀으로 들어가는 전류가 아두이노를 구동되어 켜지는 문제점을 이렇게 수정했다.




배터리를 역스왑할 경우 - 이런저런 이유로 - 아두이노가 소손된 경험을 해서,,
스티커로 확실하게 표시를 해두었다.



왼쪽이 2채널, 오른쪽이 이전에 만든 1채널 테스터기다.
앞서 말했지만, 저항치가 조금씩 차이를 보이지만 그렇다고 큰 수준은 아니라 맘 편하게 '대충'이라는 생각으로 쓴다.






테스트 영상





Arduino Sketch Source



Version : 20191028_01

battery_checker_2ch_v20191028_01.ino

> 2채널 1차 배포 버전






테스터기로 시멘트 저항값 측정법 추가

1. 테스터기를 저항모드에 두고 테스트 리드끼리 접촉했을 때의 저항을 측정한다.
2. 시멘트 저항의 저항값을 측정한다.
3. 2번 측정값에서 1번 측정값을 뺀다.




관련글



18650 리튬이온 배터리 전용 배터리 체커 만들기 - 내부저항 및 용량 테스터(방전기)기를 위한 아두이노 스케치 파일 공유