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 




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

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