2018년 12월 30일 일요일

18650 배터리를 알아보자

1. 18650 배터리란?

 배터리의 외형을 가지고 붙여진 이름이다. 지름 18mm, 길이 65mm, 0은 원통모양이라는 내용이다. 리튬-이온 2차 전지로 핸드폰을 제외하고, 충전식 전기 용품에 많이 사용된다.  일반인 입장에서는 아마도 보조배터리가 가장 친숙할 것이다.

[ LGDBHG21865 ]

- 2022.10.12 추가
 이 글을 작성하고 약 4년이 지났는데, 최근 보조배터리는 18650을 사용하지 않는 모델이 많아졌다. 요즘 보조배터리에는 리튬이온 이지만 원형이 아닌 각형이 많이 쓰이는것 같다. 


2. 분류는?

 음극의 소재에 따른 분류로 IMR, INR, ICR 등으로 불리우며,  I = 리튬이온, R = 둥근 모양, M,N,C등이 음극 소재를 나타낸다. 요즘에 IMR은 생산을 잘 안하는것 같으니 제외하고 INR, ICR 둘을 비교한다면 ICR이 갑이다. INR은 방전 보호 기능이 없다면 화재의 위험이 존재한다.   방전 능력에 따른 분류로 고방전, 중방전, 일반방전으로 불리우며 LG 배터리셀 기준으로 15A 이상 연속 방전이 가능한 경우 고방전, 10A 이상으로 연속 방전 가능한 경우 중방전이라 한다. 고방전, 중방전의 분류는 제조사마다 다르며 대륙에서는 좀더 낮은 기준을 사용하는 것 같다.

3. 용도는?

  고방전 배터리는 주로 모터 구동과 관련된 것에 사용된다. RC나 전동 공구, 전자 담배 등에 사용된다. 일반방전 배터리는 소형 선풍기, 손전등, 보조배터리 등에 사용된다. ESP32 정도면 일반 방전 배터리로도 충분하다.  무선 청소기 등에도 소형에는 일반 방전 배터리가 사용 되기도 한다. 중방전 배터리는 이들의 중간 정도 되는 형태인데 전동 킥보드, 전동 자전거, 전동 스케이드보드에 사용된다. 다만 실제 사용은 외형으로 판단할 수 없다.  외형이 아무리 비슷하다 할지라도 어떤 것은 중방전 배터리가 사용되기도 하고, 어떤 것은 고방전 배터리가 사용되기도 한다.

4. LG 18650 배터리의 특성은?

 국내에서는 LG, Samsung 에서 배터리셀을 제작하는데, 그중 LG 제품들에 대하여 특성을 정리해 보았다. 손으로 정리한 형태라 일부 실수가 있을 수 있다.  특히 색상은 RGB 값이 스펙에 정의된 것이 아니기 때문에 개인 편차가 심하다.



위의 표를 살펴보면 모델명으로 얼추 짐작이 가능하다. 앞부분의 ICR, INR로 음극소재를 가늠할 수 있으며, 끝 2자리(또는 3자리)의 시작이 H 이면 고방전, M이면 중방전 그외에는 일반 방전이다. 3자리의 경우 2번째 자리수는 용량을 나타낸다. 알파벳이 뒷부분이면 그만큼 용량이 늘어나는 형태이다. 마지막 숫자는 전기적 특성과 관련되는데, 이부분 만큼은 필요할때 스펙을 찾아 보는 것을 추천한다. 


- 추가 : 2022.10.12
  18650을 LG쪽만 사용하다가 요새 SDI 쪽 제품을 많이 사용하게 되었다.
 그래서 SDI쪽 배터리들도 정리해 보았다.




5. 뭘 사용할까?

 만약 기존 전자 제품 배터리를 교체 하는 것이라면 용량을 제외한 모든 내용이 동일한 것을 사용하는 것을 추천한다.  즉 공칭전압, 충전전압, 최대 충전 전압, 최대 방전 전류, Cut-Off 전압등이 동일한 것으로 찾아 보는 것이 가장 좋다.  
 새롭게 구성한다면 용도에 맞게 구성하면 되겠다. 현시점에서 고방전의 가격대비 성능으로 따지면 INR18650 HG2 이긴 하겟지만, 항상 그런 것은 아니니 염두해 두자. 일반 방전의 전기적 특성이 거의 비슷한 터라 싸게 구할 수 있는 제품을 사용하는 것을 추천한다. 굳이 두배의 가격을 지불하면서 용량이 25% 정도 높은 배터리를 사용하는 것은 비효율적이라 생각한다.  또한 무조건 고방전 배터리가 좋은 것은 아니다. 고방전 > 중방전 > 일반방전 순서로 가격이 형성되기 때문에 적합한 것을 사용하는 것이 현명하다고 생각된다.
 
대략 방전 능력에 따라 사용되는 것은 아래와 같다.
고방전 : 무선 전동 공구 (특히 무선 전동 드릴),  RC Car, 전자담배, 무선 진공 청소기
중방전 :  소형 무선 전동 공구, 소형 무선 청소기
일반방전 : 충전 선풍기, 랜턴, 보조배터리, 구형 노트북 배터리

위의 사용 구분은 명확한 것은 아니다. 이유는 중방전 2개를 병렬로 연결하면 고방전의 효율이 나오기 때문이다.  예를들어 12V의 전기에 최대 20A 부하를 생각하며 구성한다고 가정할때, 18650배터리를 3개만 사용한다면 고방전을 추천하지만, 6개로 구성해도 된다면 당연히 중방전 배터리 2개씩 병렬로 연결하는 방법을 고려해도 된다는 이야기이다. 또한 고방전이 필요하더라도 거의 비슷한 성능의 중방전 배터리가 사용되기도 한다. 18650 배터리가 들어가는 전자담배 기계를 몇개 뜯어보니 10A 이하의 방전 능력을 가진 배터리가 사용되기도 하는 것을 발견하였다. 


- 2022-04-14 추가 
18650을 사용하다보니 납땜이나 용접을 해야 하는 상황이 많이 생기게 되었다.
간단한 바이스(?) 하나 만들어서 사용해보니 편하여 소개글을 작성했다.


- 2023-01-09 추가
국내 온라인 쇼핑몰에서 개인 소비자는 충방전 보호회로가 없는 18650 배터리를 구매하는 것은 어려운것 같다.  결국 중국에서 주문을 해야 하는데 믿을 만한 제품이 없다. 위에 표시한 모델명으로는 정품을 구매하기는 힘들 것이다.  마치 고방전 배터리인것 처럼 판매하지만 현실은 용량이 비슷한 일반 방전 배터리 이다. 아니 용량이 비슷하다면 그나마 다행이다. 현실은 그 용량 조차도 비슷하지 않다. 10여차례 구매한 경험에서 보자면 가격이 싸다면 믿지 못할 제품이다. 여러 스토어에서 LG, SDI의 이름을 붙이고 팔고 있지만 믿을 수가 없다. 언젠가 SDI의 30Q 정품이라고 팔기에 샀지만 표면의 프린팅 자체가 허접했고, 용량을 측정해보니 정품대비 2/3 정도의 용량이었다. 내부저항을 측정한 바로는 일반 방전 수준이었다. 요즘에는 알리에서 배터리 구매시 Litokala 의 official store 에서 구매하는 것이 가장 무난하다고 생각한다. 

- 2023-01-10 추가
18650 배터리 사용에 있어서 내부저항을 측정할 필요가 생겼다. 아래의 링크로 측정 방법에 대한 확인이 가능하다.
좀더 자동화된 방법은 아래의 링크로 확인 가능하다.

- 2023-01-16 추가
18650 배터리 홀더를 만드는 과정을 아래의 링크에 소개했다.

- 2023-01-26 추가
전압측정으로 18650배터리의 충전상태를 가늠하는 방법을 아래의 링크에 소개했다.

- 2023-02-10 추가
18650 배터리의 용량을 측정하는 방법을 아래의 링크에 소개했다.

2018년 12월 18일 화요일

LoRa를 활용하자 - #3 (S/W 제작편)

이 내용은
[ LoRa를 활용하자 - #1 ] [ LoRa를 활용하자 - #2 ] 와 연결된 내용입니다.

1. LoRa Library

 LoRa관련된 하드웨어를 Heltec 제품으로 구하고 나니 납땜도 쉽게 끝났다. (사실 거의 한것이 없을 정도 이다. )  통신 모듈인 STX1276에 관련해서는 이미 라이브러리가 제공된다.  제조사에서 제공하는 링크는 아래와 같다.
 [ Heltec ESP32-LoRa Library 링크 ]
위의 링크는 가끔식 업데이트가 되니 아두이노 IDE에 라이브러리로 설치하는 것을 추천한다. 내가 5개월 전에 LoRa를 처음 연구하기 시작하였을 때는 Heltec의 LoRa 모듈은 생각보다 통신거리가 짧은 편이어서 출력을 20dBm으로 바꾸는 코드를 추가하였는데,  3개월전 업데이트된 라이브러리의 코드를 보니 내가 수정한 것처럼 변경되어 있었다.

아래의 코드가 최근 라이브러리에서 업데이트 되었다.
// set output power to 20 dBm
setTxPowerMax(20);  //PA_BOOST
 // set Spreading Factor to 7 (6~12)
 setSpreadingFactor(11);
 // put in standby mode
 setSignalBandwidth(125E3);

 setSyncWord(0x34);

2. 보내기와 받기 모드로 동작 

 당연한 이야기겠지만 하나의 LoRa 칩으로 보내기와 받기를 동시에 수행할 수 없다. 한 순간을 기준으로 한다면 받거나 또는 보내기만 가능한 상태인 것이다.  따라서 테스트 하기 위해서는 보내는 쪽과 받는 쪽이 각각 존재하여야 한다.

3. 테스트를 위한  Sender

테스트를 위하여 고정된 것을 제작하는 Sender는 일정 주기마다 신호를 보내는 것으로 작성하였다.  코드는 정말 간단하다.
먼저 LoRa.h 파일을 include한다. 그리고 Heltec의 모듈과 관련된 PIN들을 정의해준다.
이 PIN들은 변경 불가능 하다.
#include <LoRa.h>
// Pin definetion of WIFI LoRa 32
// HelTec AutoMation 2017 support@heltec.cn
#define SCK 5 // GPIO5 -- SX127x's SCK
#define MISO 19 // GPIO19 -- SX127x's MISO
#define MOSI 27 // GPIO27 -- SX127x's MOSI
#define SS 18 // GPIO18 -- SX127x's CS
#define RST 14 // GPIO14 -- SX127x's RESET
#define DI00 26 // GPIO26 -- SX127x's IRQ(Interrupt Request)

setup 함수도 간단하다.  SPI통신을 시작하고 LoRa의 핀을 정의하고, 역시 LoRa의 begin 함수를 호출 하면 끝이다.
void setup() {
Serial.begin(115200);
SPI.begin(SCK, MISO, MOSI, SS);
LoRa.setPins(SS, RST, DI00);

if (!LoRa.begin(915E6, true)) { // 915MHz
Serial.println("Starting LoRa failed!");
while (1); // restart
}
delay(100);
}

loop 함수에서는 1초 마다 ID01이라는 문자열과 지금까지 보낸 횟수를 출력하도록 하였다.
void loop() {
// send packet
LoRa.beginPacket();
LoRa.print("ID01 ");
LoRa.print(counter);
LoRa.endPacket();
counter++;
delay(1000); // wait for a second
}

통신이 정상적으로 이루어진다면 Sender가 1초마다 보내는 Reciver을 클라이언트가 받게 될 것이다.


4. 테스트를 위한 Reciver 

Reciver는 선언하는 부분은 동일하며 setup 함수에서 아래의 2행을 추가하면 된다.
 // register the receive callback
 LoRa.onReceive(onReceive);

 LoRa.receive();

 loopp 함수에서는 아무것도 안하며, 데이터 수신이 되면 불려지는 callback 함수는 아래와 같다.  문자열을 받아서 그대로 출력하는 단순기능이라 역시 코드가 짧다.
void onReceive(int packetSize) {
String packet = "";
for (int i = 0; i < packetSize; i++) {
packet += (char) LoRa.read();
}
Serial.println(packet);
//rssi = "RSSI " + String(LoRa.packetRssi(), DEC) ;
}


5. 응용 분야

- 원격 온도/습도 측정 : WiFi 통신이 불가능한 거리의 외부 온도를 측정하여 정보를 전달할 수 있다. 저비용 Smart Farm을 고려하는 내 입장에서는 비닐하우스의 온도/습도 측정이 딱 맞을듯하다.
- 원격 제어 : 역시 통시 거리가 어느 정도 자유로워지기 때문에 여러  분야에 적용 가능하다.
- 위치 추적 : 아직 초등학생인 아들의 위치가 걱정된다. 아파트 베란다에 수신기를 설치하고, GPS 모듈과 결합하여 아들 책가방에 넣어 둔다면 어디쯤 있는지 쉽게 알수 있을듯 하다. 사실 키즈폰을 쓰고 있어서 추적이 가능하지만 생각보다 정확하지 않다.

* 원격검침 분야에서는 전력 사용량, 상수도 검침등의 분야에서 많이 활용된다.

테스트 내용이 정리되면, 다음에는  LoRa  테스트편을 올릴 예정이다.


2018년 12월 16일 일요일

LoRa를 활용하자 - #2 (H/W 제작편)

이 내용은 [ LoRa를 활용하자 - #1 ] 과 연결된 내용입니다.

1.  개요

 ESP32-LoRa 모듈을 이용하여 1개는 서버, 1개는 클라이언트를 제작한다. 서버에서는 주기적으로 패킷을 전송하고, 클라이언트는 이 패킷을 받아서 화면에 표시한다. 외부에서 통신을 테스트 하기 위해서는 배터리로 동작가능 해야 한다. 배터리는 18650을 사용한다.

2. 재료
 - ESP32-LoRa 모듈 2개 : 15000 * 2 = 30,000원
 - 18650 배터리 2개 (이건 중고 노트북 배터리 분해해서 수급)
 - 18650 충방전 보호회로 : 250 * 2 = 500원
 - 5 X 7cm 만능 기판 2장 : 50 * 2 = 100원
 - 스위치 2개 : 50 * 2 = 100원
 - PET병 하나
 - 클립 4개
 - 땜납, 인두, 랜케이블 분해한 전선 40cm

3. 제작 과정
 먼저 통합 모듈을 구매 했기 때문에 납땜 할 포인트는 상당히 적다. 회로도 또한 너무 간단하기 때문에 사진으로 대체 한다.


먼저 18650 배터리 홀더를 만들어서 납땜한다.  배터리 홀더 제작 과정은 이전 포스트에 소개한 바 있다. 아래 그림에는 배터리 홀더의 중간 부분이 부실하여 배터리가 좌우로 흔들린다. 아래의 그림 처럼 만들지 말고 다른 포스트 ([ 클립 2개로 만드는 18650 배터리 홀더 ] )로 소개한 내용대로 만드는 것을 추천한다.



그리고 한쪽 구석에 18650 충방전 보호 회로를 붙인다.


ESP32-LoRa 모듈 구매시 함께 동봉되어온 소켓을 납땜한다.

기판 뒷면은 충방전 보호회로의 출력용 +, - 를 ESP32-LoRa 모듈의 +,- 와 연결해주면 끝이다.
아. 스위치가 빠졋다. 위의 그림보면 왼쪽 아래 부분에 몇 포인트 더 납땜한 것이 보일 것이다. + 선을 스위치로 보내고 다시 거기에서 ESP32-LoRa로 연결하였다.



납땜이 완료된 후에 ESP32-LoRa와 18650 배터리를 끼우면 아래의 모양이 된다.

워의 그림과 같은 것을 2개를 만들면 된다.


아래에 적은 서버, 클라이언트가 각각 다른 내용은 S/W 테스트가 다 끝나고 나중에 작업하는 것을 추천한다.

클라이언트 모듈의 경우 손에 들고 다니면서 테스트할 예정이라서 기판 뒷면에 다른 기판을 한장 더 올리고, 전선으로 묶었다. (납땜한 핀이 손바닥을 찌르거나, 납이 손에 직접 접촉되는 것을 피하기 위함이다.)
물론 스페이서를 이용하여 보다더 미려하게 만들수 있기는 하지만 이번에는 잠시 참았다.

서버 모듈은 아파트 옥상에 설치할 예정이니, 갑작스러운 우천에 대비하여야 한다.  테스트 하려고 멀리 나갔는데 갑자기 비라도 내리면..ㅠㅠ


먼저 PET병의 중간 부분을 자른다.
아래 부분은 각 모서리를 3cm  정도 잘라서 안쪽으로 구부리고,  라이터등으로 가열하여 윗부분에 끼워지는 곳을 살짝 쭈그러들게 만든다.  (아래 그림 참조).



PET 병 뚜껑에 구멍을 내서 안테나를 꼽고, 글루건으로 처리하여 비가 새어 들어가지 않도록 한다.  (아래 그림은 테스트용으로 안테나를 잠시 변경한 형태)



PET병의 윗부분을 거꾸로 잡고 1편에서 제작한 ESP32-LoRa 모듈을 끼워 넣는다. 그뒤에 PET 병의 아래 부분을 끼워 넣으면 끝이다. 이리 제작하면 세워저 있는한 빗물이 안쪽으로 흘러 들어 가지는 않는다.


다음편에는 테스트용 코드는 어떻게 되는지 살펴 보겠다.


[ LoRa를 활용하자 - #3 (S/W 제작편) ] 로 이어집니다.





LoRa를 활용하자 - #1 (개념 및 모듈)

1. LoRa 

 LoRa는 Long Range의 줄임말이다. 즉 먼 거리까지 통신가능한 통신 기술이다.  라디오 주파수 대역을 사용하면서 무선 통신이 가능한 컨셉이다. WiFi가 기껏해야 100m 정도의 거리에서 통신이 가능한 반면 LoRa는 수Km까지 통신이 가능하다.  LoRa의 상세 내용은 WiKi 정도를 참조하면 알 수 있다.

[ SPI 연결이 가능한 LoRa 통신칩 ]


2. WiFi와의 비교한 LoRa의 장점

 . 통신 거리가 10 ~ 100배정도 넓다.
   (Spreading Factor를 12로 주면 14Km까지 가능하다고 한다. )
 . 통신 모듈의 전력 소비량이 적다.
   (10년동안 배터리 1개로 가능하다고 하는데, 아직 확인 못함)

3. WiFi와의 비교한 LoRa의 단점

 . 통신 속도가 느리다. 
   (한국의 주파수 대역으로는 기껏해야 최대 20Kbps) 
 . H/W, S/W에 대한 정보 수집이 용이하지 않다.
   (생각보다 쓸만한 정보를 구하기 힘들다.)

4. LoRa가 뜨게된 이유

 IoT가 사회적으로 붐을 일으키면서, 이와 관련된 통신 모듈이 필요하였는데 LoRa의 저전력 소비, 장거리통신 가능, 통신 모듈의 저가격 등이 요구에 부합되었다.  결국 LoRa는 IoT의 영향력이 제일 크다. 

5. 연구용 모듈 구매

 한국의 LoRa 주파수 대역은 920~923 MHz 이며, 중심 주파수920.9 MHz 및 923.3이다. (주파수 대역은 한국방송통신전파진흥원 자료를 참조 하였다. )  이 주파수 대역은 SX1278로는 안되고 SX1276 모듈을 사용해야 한다. (가격이 살짝 더 비싸다.) 이 칩은 사람의 손으로 직접 납땜하기는 어렵기에 적당한 모듈을 찾았다.

[ UART 연결이 가능한  SX1276 ]           
위의 모듈은 UART로 MCU와 통신이 가능한 모델이다. (이걸 구매한건 아님.)

필요 모듈을 찾던 중 ESP32 + 0.98인치 OLED + STX1286 으로 이루어진 모델을 찾게 되었다. 가격적으로는 각각 구매하여 납땜하는 것과 비슷할 뿐아니라, 빵판에 선을 꼽는다던가 기판에 납땜해야 할 일을 거의다 줄일수 있기 때문에 구매 하였다. 

[ 연구 소재로 구입한 모듈 ]
위의 그림과 같은 모듈을 총 3개 구매하였으며 1개당 $15 정도 이다.  더 낮은 가격대로 구입하기 위해서는 OLED를 포기하고 TTGO에서 만든 것으로 구매한다면 1개당 $10에 구매가 가능하다.  참고로 단순히 LoRa만을 연구하기 위해서 이 모델을 살짝 오버스펙이긴 하다. 모듈 자체에 WiFi, BLE 등등 부가적으로 지원하는 기능이 많기 때문이다.

2018년 12월 12일 수요일

납중독 걱정 없이 납땜을 하자

1. 땜납에 대하여 잘못 알고 있는 상식들

- 납땜시 발생하는 연기는 납(원소기호 Pb)가 타면서 발생하는 연기이다. (X)
  대부분의 연기는 땜납에 포함된 플럭스가 타면서 발생하는 연기이다.

- 무연납은 납땜시 연기가 발생하지 않는 납이다. (X)
 납땜용 소재중에서 주석과 구리의 합금으로 이루어진 것을 연납(연한 성질 = 녹는점이 낮음)이라고 부르며,  이것들을 포함하지 않는다는 의미의 무연납이다. 즉 연기가 안나는 것이 아니라 특정 성분이 없어서 무연납인 것이다. 영어로 표기하면 보다더 명확하다. 제품에 Pb Free, 또는 LEAD Free 라 표시되며 이것이 무연납으로 번역된다. 즉 무연납은 납 성분이 없는 땜납인 것이다. (납이 없음에도 땜납이라고 불리운다.ㅠㅠ)  물론 납성분이 0%라기 보다는 1000ppm 이하인 것을 의미한다.  무연납은 한국기준 1998년도 정도에 특허로 등록되었으니, 나이드신 분들은 모를 확률이 크다.
또 관련 분야에 종사하지 않는 사람들도 다분히 모를듯하다.

- 무연납은 연납에 비하여 아주 비싸다. (X)
 무연납이 연납보다 두배정도 비싸긴 하지만 아주 비싼것은 아니다.  무연납중에서 은(원소기호 Ag) 성분이 들어간 무연납은 은의 함량에 따라서  상당히 고가인 것도 있다. 하지만 대부분의 무연납은 주석 + 구리의 합금이며 연납과 비교하여 아래 공식 정도의 가격을 보인다.

   [ 쥐마켓 기준 ]     무연납 가격 = 연납 가격 X 1.75

[ 쥐마켓에서 택배비 포함 2.2만에 구입한 무연납 ]


[ Kester 0.8mm 0.5Kg, LEAD FREE ]


2. 연납과 비교한 무연납의 다른점

여러가지 차이점을 보이지만 아래 내용 정도가 현실적이다.

- 녹는점이 높다.
 연납 대비 30 ~ 40도 정도 더 높아야 녹는다.

- 넓게 퍼짐이 성질이 적다.
 기판 표면에 넓게 퍼질려는 성질이 연납보다 낮아서 납땜하기가 불편하다.

- 광택이 적다.
 동일 스킬로 납땜하면, 결과가 연납과 비교하여볼때  더 나빠 보인다.

- 전기 전도율이 살짝 떨어진다.

3. 납중독 걱정 없는 납땜

- 땜납으로 무연납을 쓰자.

- 환기가 용이한 장소에서 작업하자.

- 장갑을 사용하자. 장갑쓰는 것이 힘들면 골무라도...
   비철금속을 맨손으로 만지는 것은 그리 좋은 생각이 아니다.
   (라텍스 장갑같은 소재로 손가락만 끼는 그런 종류. aliexpress 기준 개당 15원)

- 작업대와 도구는 깨끗이 청소하자.
   (나는 작업이 끝나면 도구까지도 손잡이 부분은 물티슈로 닦아서 보관한다.)


팁 : 납땜할 때 발생하는 연기는 소재가 무엇이던간에 건강해 해롭기 때문에, 나는 납땜할때 포인트 마다 숨을 먼저 들이 쉬고, 납땜하는 동안 숨을 참고, 한 포인트 작업이 끝나면 숨을 내쉰다. (서너개의 포인트를 한꺼번에 할때도 시작전 숨 들어 마시기, 중간에 참고, 마지막에 숨 내쉬기)   물론 강제 환기 장치를 가지고 있다면 의미없는 이야기 이겠지만....





2018년 12월 11일 화요일

핸드폰의 확대 기능을 제대로 써보자.

1. 그분들은 원로였다.

 하늘의 뜻을 알게되는 나이(知天命)에 가까워지면서 가장 슬펐던 시기는 노안(老眼)이 처음 올때 였다. 비로서 나이가 들었음을 현실로 느끼게 되었다. 노안이 시작하던 시기에 이루어 온 것들, 이루지 못한 것들을 회고하고 앞날에 대하여 좀더 심사숙고 하는 시기였다.  그러던중, 3남2녀의 집안에서 막내로 태어난 내가 이런 시기를 겪고 있다는 것은 형님들 & 누님들 모두 이미 겪었다는 것을 생각하게 되었다.  그렇다. 그분들은 원로였던 것이었다 !!

2. 핸드폰의 카메라를 활용하자.

 핸드폰 카메라의 디지털 줌 기능을 이용하면 굳이 돋보기를 사용하지 않아도 확대가 가능하다. 사실 돋보기 보다는 핸드폰은 늘 근처에 있으니 더욱더 편리하다.  처음에는 핸드폰에서 카메라앱을 실행 시키고 확대 해서 봤는데, 확대기라는 기능을 알게된 뒤로는 더욱더 편리하게 사용중이다.  아이폰 기준으로 설정앱을 실행 시키고 > 손쉬운 사용 > 확대기 > 확대기 & 자동밝기 On !! 하면 된다.  (아래의 그림을 참조 하자)

위의 설정이 완료된 후에, 아이폰중 홈버튼이 있는 모델은 홈버튼을 3번 누르거나, 홈버튼이 없는 모델(X 붙는 모델들) 은 핸드폰의 오른쪽에 있는 버튼을 3번 누르면 확대기가 실행된다.

3. 제대로 써보자.

 확대기의 기능은 사진촬영을 위한 앱을 실행시키고 확대해서 보는 것보다 촛점고정이나, 색변환등의 편리한 기능을 제공한다. 사용해보면 알겠지만 일반 돋보기 보다 편리하다. 다만 땜장이들은 언제나 손이 모자란 관계로 핸드폰을 들고 납땜을 할 수 없다.  집에 있던 자바라 거치대를 사용해 보았지만, 가끔 핸드폰을 터치해 주어야 하는 상황에서 떨림이 너무 심하여 포기했다.  이리하여 쉽게 거치가 가능한 받침대를 만들었다. 소재는 쉽게 구할 수 있고, 초등학생도 쉽게 다루는 종이 박스(골판지)를 이용하였다.  (추후에 목공 또는 철제 작업을 통하여 제대로된 것을 만들 계획은 있다.)

측면에서 보자면 앞쪽으로 기울어져 있다. (처음부터 기울기를 고려하여 박스를 재단하였으면 더 좋았겟지만,  처음에 고려하지 못한 부분이다. )  기울어져 있는 이유는 수평이면 핸드폰을 보기 위해서 상체를 좀더 구부려야 하기 때문이다.
 위의 그림을 보면 결과물의 높이가 10cm 정도이다. 이보다 낮게 설계 한다면 촛점이 맞지 않아서 결국 다시 높이를 보강하게 되는 아픔을 겪게 될 것이다.



윗면을 보면 흘러내리지 않도록 아랫면을 보강하고 핸드폰의 끝자락이 끼워지게 되는 부분을 만들어서 핸드폰이 고정되도록 만들었다. 이 포스트의 마지막 사진을 보면 왜 끼워지게 되는 부분을 만들었는지 알 수 있다.
[ 2차 버전의 외관 ]


 좀 지저분하게 만들어진 상황이지만 측면은 아래의 그림과 같다.

[ 2차 버전의 외관 2 ]



사용할때는  아래의 사진과 같이 무게가 나가는 물건을 왼쪽에 올리고, 핸드폰을 절반쯤 걸쳐서 사용하게 된다.

[ 1차 / 2차 버전 비교샷 ]

어느정도 확대 되는지 보기 위하여 위의 그림에 주황색 상자로 표시하였다.  

아이폰의 경우 무선으로는 AirPlay (한글로는 화면 미러링) 기능을 이용하거나, 유선의 경우 Mac의 QuickTime Player를 이용하면 모니터에 훨씬더 크게 표시가 가능하다.

4. 알게된 내용을 정리해 보자.

 - 핸드폰의 확대기 기능을 사용하면 돋보기 보다 훌륭하다.
 - 확대된 내용의 선명도는 핸드폰 카메라의 성능과 관련된다. 
 - 핸드폰과 피사체의 최소 거리가 있으며 약 8 cm 정도 이다.
   즉 확대하고자 하는 물건과 핸드폰의 거리가 너무 가까우면 촛점이 맞지 않는다.


ps : 아.. 아무리 테스트를 위하여 대충 만든 것이지만 퀄리티는 너무하다. 곧 다시 만들어야 겠다. 
     결국 2차 버전을 만들었다. 


2018년 12월 3일 월요일

ESP32의 Dual Core를 활용하자.

1. ESP32와 ESP8266의 차이는?

 ESP32는 ESP8266과 많은 차이를 보인다.  그중 가장 으뜸을 꼽으라 하면 듀얼코어와 싱글코어의 차이라고 하겠다.  ESP32는 듀얼코어이다. !!

2. 음 듀얼코어라고? 난 안쓰는데?

 사실 이미 쓰고 있다. 느끼지 못할 뿐이다.  Arduino IDE로 프로그램을 만들어서 실행중이라면 이미 2개의 코어를 모두 쓰고 있다. 다만 모르고 있을 뿐이다.
일반적으로
  Core 0 : 무선 통신과 같은  ESP32 본연의 기능이 실행됨
  Core 1 : 컴파일된 Arduino 코드가 실행됨

3. 알아서 듀얼 코어를 잘 사용하는데 왜?

 사실 간단하게 온도나 측정하거나 LED나 껏다가 켜는 등의 별거 아닌것들을 하는 경우 큰 의미가 없다. 온도나 측정하는데 ESP32는 오버 스펙이다.  각설하고, ESP32의 코어 하나로 수행하기에 벅찬 작업을 하는 듀얼 코어를 사용한다.  ESP32의 Core 0은 무선 통신과 같은 작업을 수행하기에 상대적으로 널널하다. 즉 대부분 쉬고 있다. 이를 활용하면 ESP32의 기능을 극대화 할 수 있다.  또는 Core 0을 이용하여 Core 1의 패닉 상태를 조사하고, 필요시 리부팅을 할 수 있다.

4. 사용 예제는?

크게 어렵지 않은 예제 코드를 아래에 기록해 본다.  예제는 코어 2개에서 각각의 analogRead를 수행하는 예제이다.

/* -----------------------------------------------
   ESP32 Dual Core tester
  ----------------------------------------------- */

//-----------------------------------------------
// global functions
//-----------------------------------------------
void Task1(void * parameter)
{
  while (true) {
    unsigned long start = micros();
    // very long task..
    for ( uint32_t i = 0; i < 1000; i++) {
      analogRead(33);
    }
    Serial.printf("Task 1 done  (on Core : %d)  Elps = %d  µs \n", xPortGetCoreID(), micros() - start);
    delay(100);
  }
}
void Task2(void * parameter)
{
  while (true) {
    unsigned long start = micros();
    // very long task..
    for ( uint32_t i = 0; i < 1000; i++) {
      analogRead(35);
    }
    //workLoad();
    Serial.printf("Task 2 done  (on Core : %d)  Elps = %d  µs \n", xPortGetCoreID(), micros() - start);
    delay(100);
  }
}
TaskHandle_t TaskA, TaskB;

//-----------------------------------------------
// setup functions
//-----------------------------------------------
void setup() {
  Serial.begin(115200);
  delay(100);

  xTaskCreatePinnedToCore(
    Task1,                  /* pvTaskCode */
    "Workload1",            /* pcName */
    1000,                   /* usStackDepth */
    NULL,                   /* pvParameters */
    1,                      /* uxPriority */
    &TaskA,                 /* pxCreatedTask */
    0);                     /* xCoreID */

  xTaskCreatePinnedToCore(
    Task2,
    "Workload2",
    1000,
    NULL,
    1,
    &TaskB,
    1);
}

//-----------------------------------------------
// loop functions
//-----------------------------------------------
void loop() {
  // This task will run in the core 1
  unsigned long start = micros();
  for ( uint32_t i = 0; i < 1000; i++) {
    // do nothing
  }
  Serial.printf("Task 0 done  (on Core : %d)  Elps = %d  µs \n", xPortGetCoreID(), micros() - start);
  delay(10) ;
}



위의 예제를 실행 시키면 아래와 같은 출력을 볼 수 있다.

Task 0 done  (on Core : 1)  Elps = 0  µs 
Task 0 done  (on Core : 1)  Elps = 2  µs 
Task 1 done  (on Core : 0)  Elps = 12450  µs 
Task 2 done  (on Core : 1)  Elps = 12380  µs 
Task 0 done  (on Core : 1)  Elps = 0  µs 
Task 0 done  (on Core : 1)  Elps = 0  µs 
Task 0 done  (on Core : 1)  Elps = 0  µs 
Task 0 done  (on Core : 1)  Elps = 0  µs 
Task 0 done  (on Core : 1)  Elps = 0  µs 




2018년 11월 29일 목요일

ESP로 오실로스코프를 만들자 - #4 (최소 크기 및 비용편)

1. 제작 동기

 나는 거의 대부분의 부품 조달을 알리에서 진행하는데, 마침 배송에 따른 공백기가 생겼다. 즉 부품들을 주문했지만, 배달까지의 시간이 워낙 오래 걸리기 때문에 가끔 공백기가 찾아온다.  이 시기에 집, 직장을 오가면서 연구(?)  활동중인 나에게 아주 작고 휴대가 간편한 오실로스코프를 하나 만들어야 겠다는 생각이 갑자기 들었다.

[ 다 만들면 저정도 크기. 기판 = 5X7 Cm ]

- 이 버전은 자체적으로 정보 표시용 디스플레이가 없다. 측정 정보는 Wi-Fi로 오실로스코프에 연결한 후에 웹브라우저를 이용하여 확인이 가능하다.  아래쪽에 올린 동영상 역시 PC에서 오실로스코프로 연결한 후에 촬영하였다.

2. 요구 조건 

  즉 결과물은 아래의 조건을 만족 시킨다.
 - 3개 채널 : 3상 전기 측정이 가능하여야 한다.
 - 최소크기 : 바지 주머니 정도에 넣을 수 있어야 한다.
 - 최대 10KHz 측정 가능(음향기기나 모터 PWM 신호 정도는 측정이 가능한 수준이다 )

3. 필요 부품 및 구매 가격
 - ESP32 모듈 1개 = 5000원  [구매링크]
          ESP32계열이라면 어떠한 모듈이던 관계없다. 
          소켓과 연결핀등이 함께 동봉되어 있다. 
 - 5 X 7 Cm 기판(PCB) 2개 * 120원 = 240원 [구매링크]
          기판은 상판, 하판 해서 2장 쓰인다. 
          이 글의 첫부분에 표시한 사진은 상판을 아크릴판으로 교체한 버전이다. 
 - 스페이서 16개 * 평균 30원 = 480원 
          플라스틱으로 된거 싼거 쓰면 된다.
 - 저항 6개  * 10원 = 60원   
          1/4W 짜리이고, 사실 개당 가격은 10원 이하이다.
 - 버리기 아까운 랜케이블 30Cm = 0원
         불량난 랜케이블 버리지 않고 잘라서 사용
 - 인두, 납, 니퍼 등의 미리 준비된 것들.
  
 위의 내용을 다 더하면 5780원... 어떤것은 배송료도 포함되어 있지만, 어찌 하던 $10 이하에 모든 재료가 준비가 된다. 만약 $10 이하로 위의 재료를 공수하지 못한다면,  모든 것을 뒤로 하고 인터넷 쇼핑 스킬을 먼저 업그레이드 하는 것을 추천한다. 


3. 회로도

부품이 적은 만큼, 회로도도 간단하다.
여기서 주의할 점은 나는 330R 과 100R의 두 종류 저항을 사용하였는데, 이것은 사용자의 상황에 따라 다르다. 나는 5V 신호를 측정하기 위하여 이렇게 구성하였으며, 만약 24V  신호를 측정하려면 330R대신 1.2K나 1.5K 정도의 저항을 사용하여 분압하여야 한다.  분압 공식을 잘 모르시겟다면 구글 검색을 하자.  [구글 검색 분압계산 링크]
위의 회로와 동일한 저항을 사용한다면 약 8V까지 구별이 가능하며(즉 8V 이상 측정하면 8V라고 표시된다.) 이론상 13V 정도의 입력이 이루어지면 타는 냄새와 함께, 미량의 연기를 관찰할 수 있게 될 것이다.


4. 제작 과정

기껏해야 저항 6개 납땜 하는 정도라 아주 간단 하다.  나는 ESP32 Mini를 탈착하기위하여 소켓 방식으로 제작하였지만, 소켓 방식을 포기하면 적어도 부피는 1/2 이하로 줄어든다. 저항의 배치를 바꾸면 내가 만든 결과물의 1/ 4 부피로도 가능할듯 하다.




ESP32 Mini 보드를 끼우면 위의 그림과 같다.
아래쪽에 4개의 검정색은 측정단자를 꼽기 위한 간이형 터미널이다.  굳이 재료에 소개안한 이유는 여기 저기에  있는 것을 주서다가 썻기 때문이다.

그리고 스페이서와 다른 기판 한장을 이용하여 아래와 같이 만든다.  이 포스트의 맨 처음에 소개한 사진은 아래 그림에서 상판을 아크릴로 대체한 형태이다.





기본 컨셉은 휴대성을 위하여 아주 작게 만드는 버전이기 때문에, 전력은 별도의 장치에서 공급하는 방식이지만, 굳이 배터리를 이용해야 겠다면 이전 포스트에서 소개한 컨셉으로 만들어서 아래와 같이 붙일 수 있다.

배터리관련하여 만드는 방법은 아래의 링크로 확인이 가능하다.
[클립 2개로 만드는 18650 배터리팩]



5.  테스트 환경 및 동작 소개

신호 생성기를 따로 보유하고 있지 않는 내 입장에서 가장 손쉬운 방법은 http://onlinetonegenerator.com/ 를 이용하는 것이며, PC나 핸드폰의 오디오 단자를 이용하여 출력하면 된다.  이 신호를 이용하여 각 측정용 채널에 연결하면 된다. 아래의 사진은 동영상이나 스크린샷을 찍기 위하여 잠시 연결한 상태를 보여준다. 
[ 빵판에 꼽혀있는 모든 것들이 사용된 것은 아니다 ]


익숙하지 않은 동영상 촬영을 하여 유투브에 올려 보았다.  오실로스코프를 AP로 동작 시키고, PC에서 WiFi로 오실로스코프에 연결한뒤, 구글 크롬을 이용한 동영상이다.



PC의 스크린샷은 아래와 같다.

[ PC + 1433Hz + 3채널 분리 ]

[ PC + 1555Hz + 3채널 통합 ]

[ PC + 10KHz + 3채널 분리 ]


핸드폰의 크롬 브라우저에서 오실로스코프의 AP로 접속한 화면은 아래와 같다. PC의 웹브라우저에서는 그나마 사용하기 쉽지만, 모바일에서는 상황이 약간 다르다. 향후 기회가 되면 모바일쪽에서 동작하는 스크립트를 수정해야 할듯 하다.
[ 모바일 + 1433Hz + 1채널 ]

각 버튼에 대한 설명은 이전에 포스트한 내용에서 '5. 기능소개' 부분을 참조하면 된다.
[ ESP로 오실로스코프를 만들자 - #3 (ESP32 편) ]


6. 소스코드 및 설명

 이 버전은 ESP32의 기본 라이브러리를 제외하고 전체 소스코드를 공개한다. 즉 내가 코딩한 전체 부분을 공개 하니,  어느 용자분이 써보시고 웹 관련쪽은 수정의 댓글을 올려주시길 기대해본다.
 ESP32쪽은 코드부분에 define된 부분을 수정하여 AP모드나 Station 모드로 동작이 가능하다. 웹 페이지 관련해서는 SPIFFS를 사용하기 때문에 미리 'ESP32 Sketch data upload' 기능을 사용하여 ESP32쪽에 올려 두어야 한다.  ( [ ESP의 SPIFFS에 파일 업로드 방법 ] )

이 오실로스코프는 총 4개의 소스코드 파일로 이루어져 있으며, 각 부분의 설명은 소스코드내에 코멘트로 처리되어 있다. (이 포스트에 모든 내용을 담으려고 하였으나, 아무래도 글자수 제한이 있는듯 하다.  불가피하게 3개의 포스트로 나누어 올렸다. )

[ Web oscilloscope source code part 1 ]
1. ./Web_Oscilloscope_32.ino
   Webserver, WebsocketServer등을 이용하여 통신을 담당하고 중계하는 메인 파일
2. ./OscilloscopeClass.h
  Oscilloscope의 기능과 관련된 Class를 정의한 파일
3. /OscilloscopeClass.cpp
 Oscilloscope의 기능이 포함된 파일


[ Web oscilloscope source code part 2 ]
4. ./data/web_interface.html
  Web으로 연결할때 사용하는 파일


3단 6핀 스위치로 DC 모터의 회전 방향을 바꾸어 보자

1. 필요는 연구의 어머니 항상 느끼는 부분이다. 필요하지 않으면 연구하지 않으며, 필요하면 연구한다. DC 모터를 조건에 따라서 정방향 또는 역방향으로 회전시켜야 하는 필요가 생겼다. 처음에는 MCU 및 Relay Switch를 이용하는 방법을 생각...