레이블이 측정인 게시물을 표시합니다. 모든 게시물 표시
레이블이 측정인 게시물을 표시합니다. 모든 게시물 표시

2023년 2월 9일 목요일

18650 배터리 용량을 측정해보자

1. 내부 저항만을 측정하기에는 아까운 장비

 일전에 18650의 배터리 내부 저항을 측정하기 위하여 작업을 하였는데, 단순히 내부 저항만 측정하기에는 장치가 너무 아깝게 느껴졌다. 

어떻게 만들어졌는가는 아래의 링크를 확인하면 된다.

[ 18650 배터리 내부 저항을 ESP8266으로 측정하자 ]





2. 배터리 용량 측정 원리

원리는 사실상 간단하다. Cut-Off 까지 방전 시키면서 방전에 걸린 시간, 중간 중간에 측정한 전압을 이용하여 산술적으로 계산한다. 

전력량 (Wh) = 전류 X 전압 X 시간 
전하량 (mAh) = 전력량 / 공칭전압


3. 실제 사용된 계산법

핵심은 아래의 3줄 코드이다.

  fLoadVolt = (이전 측정 전압 + 현재 측정 전압) / 2.0; // 2개 측정 평균값 구하기
  fCurrent = fLoadVolt / 방전저항값;
  g_fBatCapacity += (fLoadVolt * fCurrent) *
((float)(현재 전압 측정 시간 - 이전 전압 측정 시간) / 3600000.0);

부하를 건 상태에서 주기적으로 전압을 측정한다.

이 전압을 바탕으로 V = IR 공식에 입거하여 전류를 계산하고, 전력량은 시간 X 전압 X 전류로 계산한다. 전력량은 계속해서 더해 주면 된다.


4. 표시 방법

 이미 변수에 저장된 측정된 값들을 표시한다. 다만 전하량(mAh)는 Wh에서 공칭전압으로 나누고 1000을 곱하여 단위를 맞춰준다. 

  Serial.println("-----------------------------------------------");
  sprintf(g_strPrintBuf, "Internal Registance = %.4f", g_fInternalResistance);
  Serial.println(g_strPrintBuf);
  sprintf(g_strPrintBuf, "Wh = %.4f", g_fBatCapacity);
  Serial.println(g_strPrintBuf);
  sprintf(g_strPrintBuf, "mAh = %.4f", g_fBatCapacity * 1000 / BASE_VOLT );
  Serial.println(g_strPrintBuf);


특별히 이번 버전은 OLED를 사용하고 있지 않기에, Arduino IDE의 Serial Monitor를 켜고 있어야 상태가 보인다. 

5. 전체 소스 코드

두개의 소스 파일로 구성되어 있으며, Arduino IDE 에서 18650_Measure.ino 파일을 열면 나머지 파일 하나가 추가 탭으로 열린다.  전체 소스코드는 아래의 링크로 다운로드 가능하다. 

[ 소스코드 다운로드 ]

이 코드를 그대로 사용하기 위해서는 1번에서 소개한 링크로 들어가보면 회로도가 있다. 해당 회로도 대로 구성하면 된다. 



2023년 1월 29일 일요일

18650 배터리 내부저항을 ESP8266으로 측정하자

 1. 인간은 끊임없이 편의성을 추구하는 동물

 18650배터리의 내부저항을 수동으로 측정을 하였지만, 한두번 정도는 할 수 있어도 수십번 하려니 고충이었다. 무엇인가 편리함을 추구하기 위하여 다시금 머리를 굴렸다. 18650 배터리의 내부저항을 측정하기 위해서는 전압 측정이 필수이다. 이전에 ESP8266으로 20V 전압을 측정하는 방법에 대하여 글을 적었지만 이번에는 4.2V를 위하여 다시금 정리한다.

[ ESP8266으로 20V 저항을 측정하는 방법 ]


2. ESP8266 의  ADC (Analog to Digital Converter) Pin

 ESP8266에는 A0라는 단 한개의 ADC Pin이 존재한다. 

(두개 이상의 ADC Pin이 필요하다면 ESP32를 사용하면 된다. 일전에 내 블로그에 소개한 3채널 오실로스코프가 ESP32를 사용하였다) 

ESP8266의 A0 Pin은 최대 1V를 입력받도록 설계되어 있다. 물론 나는 ESP8266 그대로 사용하는 것이 아니라 Wemos D1 mini 의 제품으로 사용한다.  제조사의 홈페이지에는 아래와 같이 핀 설명을 하고 있다.



A0 Pin에 대해서는 max 3.3V라고 표시하고 있다. 어찌된 일이냐 하면 아래의 회도로들 보면 알 수 있다. (붉은색 테두리)




A0 핀으로 입력된 내용은 220KΩ와 100KΩ 두개의 저항으로 분압되어 ADC에 연결되는 형태이다.  3.3V가 A0에 입력되었다고 할떄 분압공식에 의거하여

ADC에 걸리는 전압 = 3.3V X ( 100 / (220 + 100) )
                          = 1.03125V

A0 Pin의 정밀도는 10bits 이며 전압을 인가하고 값을 읽으면 0V 일때 0, 분압이 없는 상태에서  1.0V 일때 1024의 값이 나온다고 할 수 있다. 다만 위의 분압 공식으로 유추해 보면 대략 3.25V부터 1024값이 나온다. 실제로 측정해보니 0V일때 20, 3.06V 부터 1024의 값이 나왔다.  이는 사용된 220K와 100K의 저항값의 오차에서 발생할 수도 있고, 측정핀에 존재하는 저항이 있을 수도 있다. 다양한 원인에 근거하지만 핵심은 3.3V 이전에 1024값이 나온다는 것이다. 3.06V는 내가 사용한 모듈에서만 그런 것이며, 제품별로 결과가 다를 수 있다. 같은 제품이더라도 모듈에 따라서 다를 수 있다.  핵심은 Wemos D1 mini의 A0 Pin으로 3V 이상 측정하려고 한다면 분압을 해야 한다는 것이다.


3. 18650 배터리 전압

 일전에 소개한 글에서 배터리의 내부저항을 측정하기 위해서는 전압 측정이 필요하다고 했다. 18650 배터리의 만충전압은 4.2V가 대부분 이지만 4.35V도 있다. 이에 따라 4.35V 입력시 A0 Pin에 들어가는 전압이 최대 3.25V가 되도록 분압해야 한다.

위와 같이 전압을 배분하면 배터리의 전압이 4.35V 일때 

4.35V X 220 / (100 + 220)  = 2.990V 의 전압이 A0에 입력된다.  사실 오른쪽 저항값이 전체 저항값의 약 75%만 차지하게 설계하면 문제없다. 보유한 저항이 있다는 가정하에 25K + 75K로 구성하면 된다는 이야기 이다. (물론 50K + 150K도 마찬가지 이다.) 사실 저항을 병렬, 직렬 해서 구성하면 저항값을 못 맞출 것도 없기는 하다. 보유한 저항에 맞춰서 구성하자.

일단 100K, 220K로 구성하는 경우

V = (A0에서 읽은 값) X  (100KΩ + 220KΩ) / 220KΩ   * 3.3V / 1024 
V = (A0에서 읽은 값) X  0.004692082111

만약 A0에서 읽은 값이 512 라고 하면 2.4024V라는 값이 수학적으로 계산이된다. 다만 저항의 정확도 및 배선 사이에서 생기는 저항을 고려한다면 한번쯤은 실측해서 보정을 해주는 것이 좋다. 

다만 아무리 계산을 열심히 해 놓아도 현실적으로 보유한 저항을 적당히 쓰기 위해서는 결국 100K 저항 3개, 43K 저항 1개를 사용하여 100K + 243K의 형태로 구성하였다.

[ 요렇게 준비했다 ]


위에서 적은 공식을 다시 적으면 

V = (A0에서 읽은 값) X  (100KΩ + 243KΩ) / 243KΩ   * 3.3V / 1024 
V = (A0에서 읽은 값) X  0.0045532988185318

납땜해서 실측한 값과 계산된 값을 비교해 보니 아래와 같았다. 

-

전압이 올라갈수록 실제 값과 차이가 커지는 것으로 보아 위의 공식에서 계산한 상수가 문제이다. 

엑셀의 힘을 이용하여 새로운 계산식을 도출했다.  추세선이라는 기능을 이용하면 편리하다. 아래의 그림에서 파란색 선은 실제 측정한값, 검정색은 추세선인데 거의 동일하게 위치해서 두개를 분리하여 보기란 힘들다. (즉 추세선이 잘 만들어 졌다.) 일반적으로 ADC 값은 전압에 따라서 선형 그래프를 보인다. 


이제 세로운 수식이 만들어 졌다.
V =  (A0에서 읽은 값) X  0.0052 - 0.0832
손으로 약간의 보정을 해서 아래의 수식으로 마무리했다.
V =  (A0에서 읽은 값) X  0.00522 - 0.0771
저항값으로 계산한 수식과 엑셀 추세선의 차이는 기울기가 좀 더 커졌고, Y 절편이 생겼다. 


4. 회로도 및 구현 내용

 무척 간단해서 약 20포인트 납땜이 필요한 회로이다. 




회로도는 이미 납땜한 후에 그렸다. 워낙 간단해서 회로도 그리기 전에 작업을 하였고 블로그에 기록하여 위하여 회로도를 그렸다. 

[ 나름 산뜻 전면부 ]

[ 얼기 설기 후면부 ]

[ ESP8266 아래에 저항 3개가 숨어 있다 ]


위의 사진에서 보이는 배터리 홀더는 지난번 블로그에 소개한 그것을 사용하였다.
또한 시멘트 저항이 4개 포함되어 있는 것을 알 수 있다. 이 회로는 향후 18650 배터리 방전 회로로 병행하여 이용할 계획이어서, 저항의 경우 8Ω 짜리 시멘트 저항을 4개 병렬 연결하였다.  4V의 전압을 인가하는 경우 시멘트 저항 1개당 0.5A가 걸리는 구조이다. 즉 최대 2A의 방전 능력을 가진다.  굳이 시멘트 저항을 여러개 병렬 연결하는 이유는, 단일 저항으로 2A의 전류를 흘려 보내면 생각보다 많이 뜨겁다. 4개로 분산해서 발열을 시키는 형태이다. 이정도로 연결해도 2A 전류가 흐를때 생각보다 뜨겁다. 

 회로에서 사용한 MOSFET은 55NF06인데, Data sheet 상에는 연속으로 50A가 가능하다고 기록되어 있지만 내가 알리에서 구매한 것들은 실제 그렇지는 않다. 방열판 없이는 개당 0.5A 정도가 적당하며 방열판이 있어야 개당 2A 정도가 가능하다. 그 이상의 전류를 흘려 보내면 손으로 잡을 수 없을 정도로 뜨거워진다.  작은 방열판이라도 각각 붙여줘야 하겠지만  MOSFET 가격이 방열판보다 싼 형태라 그냥 4개의 MOSFET을 병렬로 연결하였다. 
 회로도 및 구현한 사진에는 1개의 MOSFET만 보이지만 후에 3개를 추가하여 4개 병렬 연결하였다. 하나씩 추가 하면서 발열 상태를 체크하였는데 총 3개인 경우에도 발열이 부담되었고, 4개를 연결하니 안정적인 온도가 되었다. 

[ 4개 병렬 MOSFET ]

MOSFET을 똑바로 세워서 붙여 놓으니 살짝 열이 발생해서 위의 사진처럼 구부려서 부채 모양으로 전개했더니 열 발생이 거의 없었다. (처음부터 간격을 벌려서 납땜할껄 그랬다.)

"이렇게 계산한 내부 저항값은 참조용이며, 정확한 계산이라고 할 수 없다. "

5. 소스코드

 일단 시리얼 포트로 정보를 출력하였다. OLED를 붙여도 되겠지만(심지어 기판에는 OLED 올려 놓을 자리도 비워 놓았다. ) 일단은 시리얼 포트를 이용하기로 하였다.

소스코드 자체에 크게 어려운 부분이 없기 때문에 일부만 발췌하여 표기한다. (18650 배터리 방전 및 용량 체크 기능을 만들 예정이어서 그때 완성된 코드를 공개할 예정이다.)


void setup() {
  Serial.begin(115200);           // 시리얼 통신 속도 설정
  pinMode(MOSFET_PIN, OUTPUT);    // Mosfet control pin
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);    // Turn Off
  checkBattery();
}

float getVolt()
{
  float tmpValue = 0.0;

  // 측정 오차를 최대한 줄이기 위하여 CHK_CNT 만큼 측정해서 값을 나누어 사용한다.
  for (int i = 0; i < CHK_CNT; i++) {
    tmpValue += analogRead(A0);
    delay(5);
  }

  tmpValue /= CHK_CNT;
  g_fSensorValue = tmpValue;
  g_fVolt = tmpValue * 0.00522 - 0.0791;

  sprintf(g_strPrintBuf, "Volt = %.4f", g_fVolt);
  Serial.println(g_strPrintBuf);
  return g_fVolt;
}

void checkBattery()
{
  float onValue  = 0.0;   // 저항이 연결했을때 전압
  float offValue = 0.0;   // 저항이 연결되지 않았을때 전압
  float resistValue = 0.0;// 배터리 내부 저항
  float current = 0.0;    // 전류값
  digitalWrite(MOSFET_PIN, HIGH); // Turn On
  delay(500);
  onValue = getVolt();
  digitalWrite(MOSFET_PIN, LOW); // Turn off
  delay(1500);
  offValue = getVolt();
  current = offValue / 2.05;  // 전류값 측정
  // 1000은 밀리옴으로 변환하기 위한 값
  resistValue = (offValue - onValue) * 1000 / current;
  sprintf(g_strPrintBuf, "내부저항 = %.4f", resistValue);
  Serial.println(g_strPrintBuf);
}


소스코드의 핵심을 소개하자면 MOSFET을 켜고 전기를 흘려보낸 다음에 전압을 측정하고, 다시 MOSFET을 끄고 전압을 측정한다. 그뒤에 전압 차이를 전류로 나누면 내부 저항값이다. 
계산 과정이 궁금하다면 아래의 링크를 확인하자.


- 2023-02-06
소스코드를 일부 수정하였다. 
전류측정값을 고정으로 사용하였는데, 현재 전압에 의거하여 사용하도록 변경하였다.




2023년 1월 25일 수요일

18650 배터리 전압으로 충전상태를 가늠하자

 1.  18650 배터리 전압 분포

 거의 대부분이 4.2V가 만충이며 2.6V가 CutOff 전압이다. 사실상 2.6V 이하로 내려가면 셀이 망가질 수 있기 때문에 3.0V 이하로 내려가도록 방전 시스템을 설계하지 않는다. 18650배터리는 한번이라도 완전방전이 되면 사용 불가능하다.

이상적인 배터리라면 전압의 변동없이 전기 용량을 모두 사용하면 좋겠지만 불가능하다. 만충 상태와 다 사용한 상태의 전압 차이가 존재하며 이를 이용하여 전압측정으로 충전량을 계산해 보려고 한다. 물론 이 방법은 절대 어림계산 방식이며 정확도는 정말 떨어진다. 하지만 많은 시스템(전동공구, 무선 선풍기 등등의 18650 배터리를 사용하는 충전 기계)에 배터리 잔량을 표시하는 방법이 아이러니하게도 이 방법을 사용한다.  이 방법이 가장 간단하기 때문이다. 


2. 이상적인 18650 배터리의 전압

 이상적인(즉 가장 이루어지기를 바라는 형태) SOC(State Of Charge)와 전압의 상태는 아래의 차트이다.

3.6V ~ 3.7V 사이에서 약 80%정도 방전이 전압 변동없이 이루어 지는 형태이다.  위의 그림정도로 방전이 이루어진다면 정말 안정적인 배터리가 될 것이다. 물론 이런 상태라면 전압 측정으로 용량 계산이 거의 불가능하다고 볼 수 있다. 리튬이온의 경우는 위의 차트는 실제 상황에서 불가능하고, 리튬인산철의 경우 좀더 비슷한 차트를 보인다.


3. 현실의 18650 배터리 전압 및 용량 가늠

 다행이도 현실의 배터리는 이상적인 배터리와 좀 다르다.


위의 표에서 검정색선 (0.2C) 정도를 살펴보면 된다. 이상적인 배터리의 SOC와 비교하여 전압 변화가 더 크다. 위의 차트에 근거하여 표를 만들면 대략 아래와 같다.


배터리 전압을 체크하여 위의 표에서 찾아서 충전 상태를 가늠할 수 있다.  충전 용량을 가늠하는 것이 아니라 대략 몇 %가 충전되어 있는 가를 가늠하는 것이다. 만약 용량이 2000mAh인 배터리에서 50% 라면 대략 1000mAh정도 용량이 충전되어 있음을 가늠할 수 있다.

물론 모든 18650 배터리가 위의 표에 부합되는 것은 아니며, 일반적인 것으로 이해하면 된다.
실제 SDI의 35E 배터리는 아래의 차트로 동작한다. 


위의 차트에서 주목해야 할 것은 10A 이상을 지속적으로 방전하는 경우 원래 용량의 절반 정도에서 방전이 완료된다는 것이다. 즉 완만하게 방전하면 배터리 자체의 용량을 다 쓰지만 급격하게 방전하면 실제 용량을 다 사용하지 못한다는 점이다.




2023년 1월 9일 월요일

18650 배터리 내부저항을 측정하자

 1. 테스터기

  다들 집에 하나 둘 쯤은 있는 기계이다.   가격이 크게 비싼 것도 아니고, 이 글을 읽는 사람들이라면 당연히 가지고 있을 것이다.  테스터기는 기본이 전압, 전류를 측정할 수 있는데 그외에 부가적으로 저항값 측정, 캐퍼시터(콘덴서)의 용량측정, 진동수 측정등이 가능한 모델들이 있다. 사실 이 모든 기능을 다 하는 테스터기라고 해도 $20 정도면 충분히 구매가 가능하다.

[ 오천원 짜리 ]

 물론 고가의 장비일수록 정밀도가 높아지는 것은 사실이지만 대략 이만원 선에서 타협을 하자. 수십만원을 들일바에야 차라리 그돈으로 오실로스코프를 사자. 

원래대로라면 '테스터' 라고 불려야 맞는 물건인데 '테스터기'라고 불리는 사연은 나도 잘 모르겠다. '초가집' 이나 '역전앞' 과 같은 사연으로 이해하면 되려나;;;


2. 내부저항이란?

 배터리의 방전 능력을 가늠하는 지수이다.  내부저항이 높으면 방전능력이 낮은 것이고 내부 저항이 낮으면 방전 능력이 높은 것이다. 내부저항은 항상 일정한 것이 아니며 배터리의 성능이 떨어질수록 높아진다. 즉 새 배터리의 내부저항이 50mΩ 정도일때, 충방전을 수백번 거치고 나면 90mΩ이 될 수 있다는 이야기이다. 또한 18650배터리의 경우 1년 마다 20%정도의 효율이 떨어지는 것으로 알고 있다.

1년뒤 = 100 X 0.8 = 80% , 2년뒤 = 80 X 0.8 = 64%

위의 내용으로 유추해 보면 대략 18650은 2년 정도 사용하면 절반 정도의 효율이 되는 것을 알 수 있다. 

LG, SDI의 경우 내부저항값에 대하여 스펙으로 정리해 놓았다. 아래의 링크에서 내부저항 값은 확인 할 수 있다.  고방전 배터리인 경우 대부분 30mΩ 이하이다.

[ 18650 배터리 스펙 ]

LG, SDI에서 생산하는 18650은 대부분 내부 저항이 100mΩ 이하이다.


3. 시도는 좋았으나...  

 LG, SDI의 정품셀 수급이 국내에서 불가능해진 지금 상황에서는 중국 알리에서 셀들을 구매하고있는데, 워낙 못 믿을 상황이라 내부저항 측정이 필요하고, 다른 제품들을 뜯어서 나온 배터리도 확인해 봐야 할 상황이어서 측정해 보려 하였다. 

[ 음? ]

위의 그림과 같이 연결하여 먼저 전압을 측정해보았고, 동일한 연결 방식으로 저항을 측정해 보았다. 결과는 0mΩ.   음? 뭐지? 저항값을 측정할 수 있는 테스터기가 두개라서 다른 기계로 측정을 해도 동일하였다. 

4. 폭풍검색 및 준비물

 잘 모르는 것이 있으면 구글신에게 물어 보면 된다. 이리 저리 검색을 해보니 측정 방법이 문제가 있다는 것을 알게 되었다.  준비물으 크게 필요한 것은 아니며 내 경우 이미 보유하고 있는 항목들이다.

- 준비물 (2 종류? )

[ 멀티 테스터 ]


[ 5W 5Ω 정도의 시멘트 저항 1개 ]


시멘트 저항이 딱 맞게 없으면 직렬, 병렬등으로 연결하여 대충 5 ~ 8Ω 정도로 맞추면 된다. 


5. 실제 측정

원리는 간단하다. V=IR (옴의 법칙) 을 이용하면 된다. 

[ 위키 - 옴의 법칙 ]

먼저 테스터기로 저항을 측정하자. 병렬이든 직렬이던 한개던 저항은 정확하게 측정되어야 한다. 테스터기로 몇번 찍어보고 평균값을 구하거나 아니면 가장 여러번 나온 값으로 정하면된다. (통계학적으로 최다빈도의 값을 선택하는 것도 평균값 만큼 유용하다.)

내 경우 맞는 시멘트 저항이 없어서 47Ω 짜리 4개가 있어서 이것을 병렬로 연결했고 측정 결과는 11.5Ω 이었다. 

두번째로 측정할 것은 무부하 상태의 18650 배터리 전압이고 측정해보니 4.016 이었다.
V = IR 공식에 입거하여 4.016 = I X 11.5
I = 0.3492A 가 나왔다. (이미 알겠지만 전압에 따라서 전류가 달라진다. 저항값은 고정이니)


세번째로 아래의 그림과 같이 부하를 걸고 전압을 측정하는 것이다. 


위의 연결을 하면 당연히 배터리를 사용하는 형태이고 전압이 지속적으로 내려간다. 따라서 연결하고 있는 시간을 최대한 적게 해서 측정하자.  한가지 팁이라 하면 미리 저항과 테스터기는 연결해 두고 + 극 쪽은 배터리까지 연결해둔 다음에,  -쪽 저항 부분을 18650에 살짝 가져다 대면서 측정하면 된다.

이때 전압이 3.966V 가 나왔다.

전체 전압은 분압된 전압들의 합과 동일하다. 키르히호프공식이라고 하는데 아래의 링크에서 확인이 가능하다.

[ 위키 - 키르히호프의 공식 ]

4.016V = 4.011V (시멘트저항에 걸린 전압) + 배터리 내부에 걸린전압
즉 배터리 내부에 걸린 전압은 4.016 - 3.966 = 0.05V
또다시 옴의 법칙을 이용하면
V = IR 
0.05V = 0.3492A X ?Ω

강하된 전압 = 아까 계산된 전류  X 모르는 저항값
0.05V / 0.3492A = ?Ω
?Ω = 0.143
즉 143mΩ 이다.


6. 끝으로

새 배터리 입장에서 143mΩ 은 생각보다 너무 큰 수치이다.  의심스러운 부분이 여러가지 이지만 일단 시멘트 저항의 정확한 저항값이 측정되었는지 의심스럽다.  이론상 47Ω 저항을 4개 병렬 연결하면 11.75Ω이 나와야 하는데 11.5Ω이면 살짝 의심스럽다.  시멘트 저항 몇개 종류를 따로 주문해 놓은 것이 있는데 이 저항이 배송되면 다시 테스트 해 봐야 겠다. 

"이렇게 계산한 내부 저항값은 참조용이며, 정확한 계산이라고 할 수 없다. "

- 2023-01-30 추가
매번 수동으로 측정하기는 번거로워서 ESP8266을 이용하여 측정 장치를 하나 만들었다. 
아래의 링크에서 확인이 가능하다.

[ ESP8266으로 18650 배터리 내부저항을 측정하자 ]




2021년 1월 5일 화요일

원격 모니터링 : 12V 듀얼 전원 공급장치 만들기 - ver 1.0

1. 모니터링의 시작

시골에 노모께서 홀로 계신다. 덥지는 않으신지, 춥지는 않으신지 늘 걱정이다. 그래서 어머니께서 주거하시는 안방의 온습도 정보를 모으기 시작했다.  대단한 것은 아니였고 ESP8266 계열의 D1 mini 와 AM2302 온도 센서를 달아서 만들었다. 

가장 초창기 모델

 위의 사진은 내가 ESP8266을 공부하면서 가장 처음으로 만든 모델이다. 지금 보면 구성 자체가 어설프고, 납땜도 어설프고, 심지어 전선의 배색도 어설프다. VCC와 GND 색상이 동일하다니.. 대체 무슨 생각으로 전선 색상을 고른것인지.... 그나마 요즘은 전선 색상은 구별해서 사용하려고 노력한다. 가능한 GND는 검정 (또는 파랑) 을 사용하려 하고, 3.3V는 주황, 5V는 빨강, 12V는 노랑 색상의 전선을 사용하려고 노력중이다.  위에 사진에 표시된 1차 버전은 얼마나 어설펐는지 ESP8266의 DeepSleep을 위해서 필요한 전선 연결이 나중에 떨어졌다. 설치해서 가만히 두는 것이었는데 ㅠㅠ
 초기 버전을 만들고 나서 2차 보수까지 수행했지만, 역시나 문제가 생겨서 2차 버전을 다시 만들었다.  초기 버전과 2차 버전 사이의 기간이 수개월 있었고, 그 사이 내 실력도 많이 늘었다. 초기 모델은 퇴역 하였고, 2차 버전은 현장에 설치되어 있는데 아무리 사진을 찾아도 안보인다.   이를 이용하여 정보를 수집하기 시작하였다. 



 수집된 정보는 서버에 업로드하여 30일까지의 이력을 보게 만들었는데, 서버 부분은 내가 특별히 만든 것은 아니고 Adafruit를 활용하였다. (여러가지 이유가 있지만 일단은 돈이 안들어 가고 이미지 전송이 가능해서 사용하게 되었다.)  아래의 링크를 보면 활용하는 방법이 기재되어 있다. 예전에 내 블로그에서 다루었던 내용이다.

[Adafruit 활용기]

 단순히 온습도를 로깅하고 있지만, 어머니의 행동 패턴과 연계하여 고려하면 어머니의 취침시간과 기상 시간을 알게 되었다. 이제 어머니가 일어 나셨구나... 라는 것을 알게 되었다. 

2. 모니터링의 확장

 온습도를 기반으로 하여 어느 정도의 내용을 짐작하게 되었지만, 이것은 정말 정확한 정보가 아니였다.  카메라 장치가 더더욱 필요하게 되었다. 내 의견은 어머니가 주거 하시는 방에 카메라 장치를 설치하자는 것이었지만, 큰 형님의 "어머니 사생활을 존중하자" 라는 의견에 감명을 받아 외부에 설치를 고려하게 되었다. 



 태양광 패널을 이용하여 스스로 충전하며, 주기적으로 사진을 촬영하여 서버에 전송하는 형태의 작품이다.  위의 사진은 역시 초기 버전이며, 수차례 수정 보완하였다.  가장 큰 문제점은 태양광 패널이었다. 태양에 노출되면 생각보다 쉽게 못쓰게 되었다. (패널 가격이 싸서 그런가..ㅠㅠ) 태풍이 심하게 불면 태양광 패널이 돛이 되어 카메라가 하늘을 0.5초간 날게 되는 진풍경을 연출하기도 했다. 전체적으로 축전(蓄電) 관련된 설계가 나빴거나, 무인 운영 이라는 것 자체의 오류였던가 생각된다.  사용했던 반찬통도 태양광에 노출된지 2년 반만에 부서지기 시작했다. 이 모델은 2년 반만에 퇴역하게 되었다. 사실 퇴역하게 된 이유는 운용의 난해함이 아니라 정보 취득의 한계성 때문이었다. 2분 마다 1장씩 서버로 사진을 올리는 시스템이어서 실시간 반영이 안된다는 것이 문제점 이었다.  이정도의 간격으로 사진을 올린다면 비가 오는 것인지, 눈이 왔는지 정도를 구별하는 것 밖에 안된다.  원래 연구의 시작은 원거리 건물이나 비닐하우스 등에서 문이 열려 있는지, 닫혀있는지를 확인하기 위함이었다. 
 그리하여 IP Camera를 설치하게 되었다.


Wi-Fi로 연결이 가능하며, 적외선 LED가 있어서 야간에도 모니터링이 가능한 카메라 이다. 가격도 $30 정도 수준으로 SD Memory Card를 이용하면 자체 녹화도 가능한 형태이다.  이동식을 포기하고 외부에서 전원을 끌어서 설치하여 앞마당 및 어머니가 주거 하시는 안방의 외부까지 볼 수 있도록 만들었다.

3. 다 좋은데 뭐가 문제?

 24시간 IP Camera를 통하여 동영상으로 모니터링이 가능하도록 되었는데, 문제는 외부에서 촬영하다 보니 주연이신 어머니께서는 24시간 중 30분 정도만 출연하셨다.  하루 종일 빈 앞마당을 보게 된다는 것이었다. 그래서 스트리밍 정보를 취득하여 움직임을 감지하고, 감지시 이미지를 다시 서버에 저장하는 기능들 만들었다. 사실상 요즘 IP Camera는 대부분 움직임 감시 기능을 제공한다.  내가 글을 쓰는 시점에 위에 연출된 카메라는 이미 퇴역하였다. IP Camera를 24시간 풀로 켜놓으면 대략 3년 정도 이내에 먼가가 고장나기 시작한다.  마지막으로 문제가 된 것이 12V 어댑터 이다. 한번 상태가 이상하여 전원을 뺏다가 다시 꼽아서 동작되게 만든 것이 5개월 정도 전인데, 역시나 5개월 후에 작동을 멈추었다. 모든 기계는 쉬게 해 줘야 하나 보다.

4. 그래서 듀얼

 처음에는 그동안 PC 버리는 것들에서 모아 둔 전원 공급 장치를 사용하려고 하였다. 전력량도 충분하고 안정적이라 생각해서이다. 그래서 필요없는 선들을 자르고 준비하다가 너무 과한 스펙이라고 생각이 들었다. 내가 필요한 것은 최대 2A 이내의 전력인데 20A 짜리를 하다니....  그래서 12V 의 적당한 어댑터를 구매하려고 알리를 살펴보다가 아래의 제품을 발견하게 되었다. 
 
오호 이걸로 만들면 되겟구나라는 생각과 함께, 이걸 듀얼로 구성해야 겠다는 생각이 들어서 2개 구매하였다. (개당 $2)


 사진으로 보면 상당히 거창해 보이지만, 별거없다. 그냥 구매한 제품 2개를 병렬로 잘 구성해서 만든 포맥스로 만든 껍데기에 안착 시켰을 뿐이다. 내부에 ESP8266이 하나 있는 이유는 온도 센서와 결합해서 전원 장치의 내부 온도를 원격에서 확인하기 위함이다. 12V가 나오는 장치에서 ESP8266 동작을 위하여 5V가 필요해서 아주 아주 작은 다운트랜스를 하나 붙였다. (최대 1A 가능)

 또 내부 온도가 걱정되어서 공기 순환용 구멍을 뚫었다. 8mm 드릴로 측면들에 구멍을 내었는데, 좌우 부분은 위쪽으로 , 아래쪽 부분은 전체적으로, 위쪽으로는 오른쪽 윗부분에 구멍을 내었다.  이 물건이 외부에 설치되는 터라 벌레들을 막기 위해서 구멍을 뚫은 부분은 방충망 쪼가리를 구해서 붙였다. 




전면부 구멍은 통풍용이 아니라 내부 LED등의 불빛이 보이도록 뚫었고, 안쪽으로 투명 아크릴 조각을 붙여서 LED가 보이도록 만들엇다.  이부분에 방충망을 안쓰고 아크릴을 쓴 이유는 혹시나 비가 들이치지 않을까 걱정을 해서이다.

5. 결과 및 설치

 다 만든 결과에 대한 사진을 찍어두지 않았던 터라,  설치후 촬영한 사진을 올린다. 실제 설치된 모습니다. 외부 벾에 아래의 사진과 같이 설치되어 있다. 


위의 사진에 포함된 것들은 동파 방지 장치 및 IP Camera관련된 것들이다.  제작한 12V 전원 장치는 스위치를 2개 가지고 있으며, 안타깝게도 전환은 자동이 아니라 수동이다. 1번을 켜거나 2번을 겨거나 하면 된다. 두개를 동시에 켜도 되긴 하지만 굳이 전력을 낭비할 필요가 없으니 둘중 하나면 켜 놓으면 된다. 켜진 것은 전원 공급장치 전면부에 뚤어 놓은 구멍으로 확인 가능하다. 이제 부터 하나는 쉬면서 하나는 일 할 수 있게 되었다. 


2020년 1월 20일 월요일

전압 전류계를 사용하자

1. 필요성

 내 기준으로 전압을 살펴볼 필요는 가끔 있으나, 전류는 거의 필요하지 않다. 또한 전압을살펴보더라도 하루종일 처다볼도 없다. 다만  최근 775모터를 이용한 테이블쏘를 제작하는 과정에 모터가 얼마나 많은 전류를 사용하는지 궁금해져서 모듈을 구매하게 되었다. (아 글을 쓰면서 생각해보니 그냥 테스터기로 찍어보는 방법도 있다. )

[ 775 모터 ]
 태양광 패널을 DIY 하시는 분들에게는 전압 및 전류가 표시되니 아마도 최적의 모듈이 아닐까 생각된다.

2. 구매

 전류계 회로가 그렇게 복잡한 것은 아니지만, 이것 저것 생각해보니 재료의 비용이 그렇게 적지 않았다. 한 용자님께서 만드신 DC 전류계를 보니 약 40종류의 부품을 사용하셧다. 이것 저것 다 따져 보니 물건을 구매 하는 것이 더 유리하였다.
 항상 애용하는 알리에서 물건을 구입했다.
[ 전압 전류계 구매 링크 ]

[ $1.48의 위엄 ]


약 1600원이면 집까지 배송된다. 아무리 생각해봐도 내 기준으로 이정도의 가격에 제작은 불가능하다.
 이 제품은 0V ~ 100V  및 10A까지 측정이 가능하다. 또한 뒷부분에 전압, 전류 표시 관련하여 가변저항이 있기 때문에 다소 미세 조정이 가능하다.

3. 사용

 제품인 만큼 사용은 참 편리하다. 그냥 몇가닥의 선만 연결하면 되기 때문이다. 이 제품은 2가지 방법으로 사용가능하며 방법에 따라 측정 최대 전압이 다르다.  총 5가닥의 전선이 있고, 이중 2개의 선은 굵고 3개의 선은 가늘다. 제품에 따라서 아래에 소개하는 그림에서 굵은 빨간색선이 파란색으로 대체된 경우도 있다.
5가닥의 선은 대략 아래와 같은 기능을 한다.
 - 빨간색 굵은선 : 부하(Load)측의 마이너스에 연결
 - 검은색 굵은선 : 전원(Power)측의 마이너스에 연결
 - 빨간색 가는선 : 30V 미만의 전원측 플러스에 연결
 - 노란색 가는선 : 부하측의 플러스에 연결
 - 검은색 가는선 : 30V 이상의 전원 측정시 별도의 전원 마이너스에 연결


 그림으로 표시하면 아래와 같다. (잘 안보이면 이미지를 클릭하면 크게 보인다)

[ 0V ~ 30V  측정할때 연결하는 방법 ]


[ 0V ~ 100V 측정할때 연결하는 방법 ]


결론은 측정장치의 내부회로는 내압이 30V 이기 때문에, 그 이상의 전압을 측정하기 위해서는 별도의 전원 장치에 연결하여야 한다.

4. 결과

 처음부터 775 모터가 사용하는 전력량을 체크하기 위하여 시작하였고, 테스트 결과는 성공적이엇다. 12V 무부하시 약 2.5A 정도 전류가 흘렀다. 모터에 최대 부하까지는 걸어보지는 않았지만 현재 전원을 공급하는 부분의 전선 굵기를 고려해 볼때 10A 정도 흘려 보내면 상당히 열이  발생할 것으로 생각되어서 약 5A 정도 까지는 부하를 걸어서 테스트해보았다. 
 모터류는 무부하시 사용되는 전력량과 부하가 걸릴떄 사용되는 전력량은 2배 이상 차이날 수 있다는 점은 주의해야할 사항이다. 전선 굵기에 신경써야 하기 때문이다.




ESP8266 Digital Input Pin의 불편한 진실

1. 믿었던 놈인데... ESP8266은 2017년도 부터 사용했기 때문에, 7년 정도 사용해 왔었다. 그동안 여러 종류의 내 프로젝트에 사용한 MCU이고, 이에 따라서 신뢰도가 상당히 높았다. 물론 순수한 ESP8266으로 사용하지는 않고 Wemos...