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

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번을 겨거나 하면 된다. 두개를 동시에 켜도 되긴 하지만 굳이 전력을 낭비할 필요가 없으니 둘중 하나면 켜 놓으면 된다. 켜진 것은 전원 공급장치 전면부에 뚤어 놓은 구멍으로 확인 가능하다. 이제 부터 하나는 쉬면서 하나는 일 할 수 있게 되었다. 


2019년 10월 14일 월요일

가장 싸게 CCTV를 구현해 보자 (ESP32-CAM)

1. 카메라 모듈의 연구

여러 종류의 카메라 모듈을 연구했다. MCU와 결합해서 사진을 서버로 전송하는 기능을 만들기도하고, 원격 조정이 가능한 탱크(물론 이것 역시 제작한 것)에 올려서 스트리밍을 기능을 하는 것도 만들기도 했다. 하지만 카메라 모듈의 크기나 가격, 연구 난이도 등등 여러 이유때문에 많이 만들지는 않았다. (모듈별로 한두개 정도)

 
[ 처음 연구한 카메라 모듈 ]

[ 네번째 연구한 모듈 ]

[ 연구후에 기판에 납땜한 모습 ]


[ 배선이 복잡해서 양면으로 배선햇다. ㅠㅠ ]

이정도 까지 연구하고  나니, PCB를 떠서 다량으로 만들까 생각도 했지만, 카메라 모듈의 화질이 별로 여서 저정도까지 만들고 멈추었다. 

2. ESP-EYE, ESP32-CAM

 마지막에 연구한 것이 바로 ESP32와 카메라 모듈을 결합하는 형태인데, 이젠 아예 쉽게 결합이 가능한 형태로 만들어진 제품이 나오고 있었다. 즉 납땜할 필요가 없는 정도의 레벨로 제품이 나오고 있으며, 가격또한 저렴했다.

알리 기준으로 ESP32-CAM은 5$ 이하에 구입이 가능하다.

[ 외부에 나와 있는 핀들의 배열 ]

[ 내부 핀 정보 ]


3. 동작을 시키는 방법

 정말 손쉽다. 뭐 별거 할것이 없는 정도로 쉬웠다. 먼저 Arduino IDE에서 보드매니저를 열고 ESP32 보드를 추가하자.

먼저 IDE의 파일 > 환경설정창에 추가적인 보드매니저를 추가하자. 아래 그림의 표시한 부분 버튼을 누르고 https://dl.espressif.com/dl/package_esp32_index.json 를 추가 한다.

그리고 IDE의 툴 > 보드 > 보드 매니저 에서 esp32를 검색하여 설치
[ 보드 매니저에서 esp32를 검색하고 설치 ]


거의 다 되었다.  그다음 IDE의 파일 > 예제 > ESP32 > Camera > CameraWebServer를 열면된다.  소스코드에서 구매한 모듈과 맞는 핀번호를 설정해야 하는데, 핀별로 설정하는 것이 아니라 이미 define 된 것중에서 선택하면 손쉽다. 아래의 그림과 같이 다른 제품들의 define 내용은 코멘트 처리하고 AI-THINKER 쪽을 활성화 하자.

[ 소스코드에서 수정할 부분은 위에 표시한 곳 및 WiFi 관련 비번 정도 ]

그 다음은 IDE에서  툴 메뉴에서 보드 및 파티션 정보를 올바르게 넣으면 된다.
보드는 "ESP32 Wrover Modue" 이며,  파티션 스키마는 "Huge APP (3MB No OTA)"로 설정하면 된다. 

[ 보드및 파티션 스키마 !! ]

이제 컴파일 하고 스케치만 업로드 하면 된다. 

[ 이렇게 연결하면 업로드 가능 ]

위와 같이 연결하고 스케치 업로드한 후에 GND + IO 0 핀에 연결된 부분을 해제 하고 리셋버튼을 누르면 동작한다. 리셋하기 전에 Serial Monitor를 켜고 리셋하자. 리셋된 후에 Serial Monitor에 아이피가 표시될 것이다.

4. 결과는?

 웹브라우져에서 표시된 아이피를 입력하고 연결하면 아래와 같이 설정가능한 화면과 현재 모습이 라이브로 방송되고 있을 것이다.  

[ 고해상도도 가능하다 ]

5. 향후 작업 예정

 다중 접속 활성화, 웹페이지 개선, 리셋 되더라도 환경변수 기억 등등..



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년 11월 20일 화요일

ESP32로의 전환점에서

1. 다음 세대의 MCU 선정

 ESP8266을 대략 2년 정도 사용했다. 순수한 ESP8266 보다는  Wemos D1 mini 보드를 이용하였고, 나름 편리하게 사용하였다.  (호환 보드의 경우 2.5$의 수준으로 구매가 가능하다.) 더이상 가격적으로는 하락하지 않고 있는 상황을 본다면, 결국 ESP8266의 끝물이 시작된 것이 아닌가 생각된다.
 ESP의 다음 세대인 ESP32에 대한 여러가지 보드를 살펴보게 되었고, 향구 연구들은 ESP32 Mini 보드로 진행할까 한다. 

2. ESP32의 Pin Out

아래의 그림과 같이 총 40개의 핀을 가지고 있다. 물론 40개핀 모두를 사용할 수 있을 것이라는 오산은 버려야 한다.  보드 자체에서 사용하는 핀이 몇개 있기에 이 핀을 이용하려면, 정말 ESP32 및 이 보드에 대한 지식이 많이 필요하다. (즉 웬만하면 사용하지 않는 것이 현명하다.)
[ ESP32 mini  Pin Out ]

Pin Out을 잘 살펴보면 왜 이것으로 선정했는지 알 수 있다. Wemos D1 mini 보드를 정면에서 보면 오른쪽 위로 부터  TX, RX, D1,D2,D3,D4, G, 5V의 순서이고, ESP32 mini 역시 TX, RX, I/O용 4핀, G, 5V 이다. (위의 그림을 보면 핀위치에 하얀색으로 마킹되어 있는 것들중 오른쪽 부분).  즉 GPIO 번호는 틀리더라도 동일한 기능을 하는 핀들이 같은 위치에 있다는 이야기 이다. SPI통신 관련 기본핀들도 D1 mini 보드와  ESP32 mini 보드가 같은 위치에 존재한다. 즉  S/W 적으로 일부만 수정한다면 Wemos D1 mini 를 장착한 소켓 위치에 ESP32를 그대로 끼울수 있다는 이야기다. 다음 세대의 MCU를 선택한 최고의 이유중 하나 였다.

3. 성능은?

 ESP8266 대비  CPU 클럭은 3배 정도이다.  ESP8266은 기본 클럭이 80MHz(물론 160MHz로도 사용가능)이나, ESP32는 240MHz이다. 또한 ESP32는 듀얼코어 이다.  사실 I/O를 위한 핀 숫자가 ESP8266 보다 월등 하다는 것도 큰 매력이긴 하다.  모든 면에서 뛰어난 MCU인데 소비전력은 이전 모델과 비슷한 수준이다.

4. 이제부터는?

 한동안은 ESP8266과 ESP32를 함께 쓸 예정이다. 두가지를 용도에 맞게 분리하여 사용할 예정이다. 이유는 아직 ESP32가 ESP8266의 두배 가격이기 때문이다.




2017년 10월 17일 화요일

DRV8833을 구매하다.

1. DRV8833 구매에 앞서서.

 시작은 아들을 위한 장난감에서 시작되었다.  아들이 진행중인 방과후 수업중에서 2개의 과목이 로봇과 관련된 내용이었다.  아주 어렸을적에 과학상자라는 것을 통하여 강원도대표로 전국대회에 참여해 본적이 있는 나로서는 무척 흥미 있는 과목이었다.  다만 요즘 애들의 방과후 수업은 단순히 볼트,너트만을 고정시키는 차원을 넘어서 프로그래밍이라는 요소도 포함되어 있었다. 물론 아들은 아직 어려서 프로그래밍 단계까지는 진행하지 못하고 있다.
 아들이 수업중에 만들어온 것을 보자니, 이 시대에 유선 조정 자동차를 만들어 오고 있길래 핸드폰으로 간단히 원격접속 하는 모듈을 만들어 보자는 취지에서 시작하게 되었다.

2. 시작은 PNP형 TR 2개로.

 사실 집에 보유하고 있는 소재들중 모터 스위치를 제어하기 위해 쓸만한 것들이 PNP형 TR 10여개, 그리고 어디선가 뜯어 놓은 NPN형 TR 2개가 있는 상황이어서,  아무 생각없이 PNP형 TR 2개로 모터 2개 각각의 스위치를 On/Off 하는 회로를 구성하였다. 또한 원격접속을 위해서 ESP8266을 붙이고, TCP/IP 소켓 통신으로 제어하게 되었다. 


[ TR을 이용한 초기 모델 ]

3. DRV8833을 찾다.

 핸드폰을 이용하여 잘 연결되고 잘 움직였으나, 단점이 후진이 없는 상황이었다.  아무리 장난감이라고 하더라도 장애물에 걸린 상태에서 좌회전, 우회전 만으로는 장애물을 회피하기가 무척 어려운 상황이었다. 후진을 위해서 1차적으로 선택한 상황이 H-bridge 회로인데 2개의 모터를 제어하기 위해서는 H-bridge가 2개 필요했다. 1개의 H-bridge는 PNP형 TR 2개, NPN형 TR 2개가 필요한 상황이기 때문에, TR을 구매하려고 검색하다가 발견한 것이 TA7291P였다. 내부에 H-bridge 회로를 내장하고 있는 것이라서 일단 구매를 진행하였다. 이런 와중에 웹서핑을 하다가 DRV8833을 발견하게 되었고, 이를 다시 구매 하였다.

[ DRV8833 ]
 DRV8833은 2개의 H-bridge를 포함하고 있으며 PWM 제어가 가능한 모듈인터라 마음을 바꾸고 이것을 구매하였다.

[[ PIN 설명]]

IN4 : 두번째 모터 제어용 2번핀
IN3 : 두번째 모터 제어용 1번핀 (PWM 핀)
GND : Ground
VCC : 2.7‌‌–10.8 V
IN2 : 첫번째 모터 제어용 2번핀
IN1 : 첫번째 모터 제어용 1번핀 (PWM 핀)

EEP : Sleep핀. 보드상에서 풀업된 상태이며, 저전력 슬립모드를 사용시 연결
       (J2를 끊고 사용해야 함)
OUT1: 첫번째 모터 출력1 
         (1.2A 이상이 걸리면 발열이 발생하고 1.5A 부하가 걸리면 대략 3분후 fault)
OUT2: 첫번째 모터 출력2 
OUT3: 두번째 모터 출력1
OUT4: 두번째 모터 출력2
ULT : Fault.  open-drain 출력으로 과전류, 과열, 저전압 상황이면 low로 변경 풀업된 핀에 연결되어야 함

J2 : UTL(low ttl sleep mode)를 사용할때에는 이 점퍼를 끊어야 한다. 
     (일반적으로 사용할때는 연결되어야 함)


이를 응용한 장난감에 대해서는 다른 포스트로 올리도록 하겠다.

2017년 10월 16일 월요일

PN532 NFC/RFID Controller + ESP8266 (Wemos D1 mini)

1. PN532 V3 Controller

 NFC/RFID 정보를 읽기위한 모듈로서 범용(?)적으로 사용되는 것이 PN532다. 내가 구매한 것은 버전3이며 입출력 모드의 선택이 가능한 모듈이다.  3개의 입출력 방식을 지원하나 금번에는 SPI 방식으로 연결하였다.

[ PN532 V3 ]
 위의 그림으로 놓고 보면 왼쪽 위가 입출력 모드를 설정하기 위한 2개의 스위치가 있으며, SPI 방식으로 연결하기 위해서는 오른쪽 박스 부분의 6개 핀이 연결되어야 한다.
SPI 방식의 입출력은 1번 스위치는 OFF, 2번 스위치는 ON 상태이며 위의 이미지 기준으로 스위치 부분에서 왼쪽이 2번 스위치 오른쪽이 1번 스위치 이며, 위쪽이 OFF, 아래쪽이 ON 이다.  (사실 PCB에 친절히 프린팅 되어 있다.)

3.3V ~ 5.0V 사이에서 동작하는 모듈이며, 소비전력은 크지 않은 편이다. 즉 Wemos D1 mini에서 뽑아서 써도 큰 문제가 되지않는 소비전력이다.

2. 선연결

 PN532쪽은 6개의 선을 뽑아서 Wemos의 아래핀에 연결하였다. 
PN532      Wemos D1  
SCK     -> D5
MOSI   -> D7
SS       -> D3
MISO   -> D6

SS의 경우 다른 핀에 연결하여 테스트는 해 보았지만, 그외의 핀은 Wemos가 정해놓은 핀이 있기 때문에 그것을 그대로 사용했다.

그외에 VCC와 GND를 연결해 주면 된다.

3. 테스트

일단 https://github.com/adafruit/Adafruit-PN532 에서 필요한 라이브러를 다운로드 받아 Arduino IDE에 추가 시킨다. 라이브러리 관리 창에서 직접 PN532를 검색해서 다운로드 가능하다.

그 후에 라이브러리에 포함된 PN532관련된 예제를 아무거나 열어서 테스트가 가능하다.
다만 위에서 설명한 방법으로 선을 연결하였다면, 아래의 코드와  같이 일부를 수정하면 된다. setup, loop함수를 제외한다면 실제로 필요한 코드는 7줄이면 된다. 

#include <ESP8266WiFi.h>
#include <Adafruit_PN532.h>

#define PN532_SCK  (D5) //(2)
#define PN532_MOSI (D7) //(3)
#define PN532_SS   (D3) //(4)
#define PN532_MISO (D6) //(5)

Adafruit_PN532 nfc(PN532_SS);

void setup(void) { ... }
void loop(void) { ... }


4. 끝으로

예제를 실행시키면 카드의 아이디를 가져오는데, 아직은 사용처를 정하지 않았다. T-money의 잔액이나 조회하는 것이나 만들어야겠다.

- 2019.03.22 추가
 아래의 링크에 제작 결과물, 제작 방법등을 소개 했다.
  [ 선불 교통 카드 잔액 조회기 만들기 ]









2017년 8월 16일 수요일

ESP8266으로 만드는 이동식 카메라



1.앞서서...

 이것은 IP 카메라를 대체하기 위하여 제작한 것은 아니다. 오히려 IP카메라 완제품을 35달러에 사는 것이 더 경제적일지도 모른다.  이것은  전원선이나 네트워크 선을 연결하지 않고 실외에 설치 가능한 원격 카메라를 제작하기 위해서이다. 굳이 감시용으로 카메라를 설치하여야 하겠다면 그냥 싼  IP 카메라를 추천한다. 더더욱이 이것은 내가 보고 싶을때 사진을 전송하는 것이 아니라 일정 시간마다 서버로 사진을 전행해 주는 장치이다. 식물이나 날씨등 민감하지 않은 상태를 확인하기 위한 장치이다. 연구, 개발, 부품수급, 제작, 테스트 등의 전 과정은 실제로는 수개월에 걸쳐서 이루어졌다. 

2. 대략적 재료 및 가격

  정확한 가격도 사실 계산하기 너무 힘들다.  거의 대부분 중국 알리바바에서 구매하였으며, 한꺼번에 많은 내용을 구매한 터라 정확한 가격을 알지는 못하지만 대략적으로 아래와 같다.
  . OV528 카메라 모듈 : 18000원
  . 18650 배터리 : 4000원
  . Wemos D1 mini 호환 보드 : 3000원
  . 1W 태양광 패널 2개 : 1000원 * 2
  . 락앤락 비스무리 반찬통 : 500원
  . 18650 충전 및 보호 모듈 : 300원
  . 만능보드 : 100원
  . 배터리 홀더 : 200원
  . 저항4개 : 50원 
  . 트랜지스터 3개 : 50원
  . 그외에 글루건, 빈 PET병, 전선약간 및 주변에서 구할 수 있는 것들.

3. 태양광 패널

  사실 이 부분이 가장 오래 테스트 하고 준비한 부분이다. 과연 작은 태양광 패널이 얼마나 전기를 모을수 있을까 하는 것이 걱정되었기 때문이다.  장마철 태양이 적게 비치는 시기에 테스트를 하였고, 다행히도 충분한 전력량을 생산하였다. (내가 구성한 시스템은 1일 약 400mAh 정도를필요로한다.)

일단 실외에 설치할 예정이기 때문에 플라스틱으로 프레임을 구성하였다.

[플라스틱프레임 - 아들 교재 이용]
[반찬통 위에 설치한 모습]

실제로는 2장의 태양광 패널을 붙였다. 
 

4. 납땜

  프로그램 개발은 이미 완료되었고, 회로 설계도 완료된 터라 납땜 작업을 하였다.  납땜은 초등학교 시절 4석 라디오 만들어 본 이후에, 이번 작업이 제일 많이했다. (즉 그만큼 손방인 셈이다.)  
참고로 3개의 트랜지스터는 카메라 모듈에 전원을 공급하는 병렬 스위치이다. 최저전력을 사용하기 위해서 ESP8266을 슬립 모드로 만드는 것 이외에도, 카메라 모듈도 전원을 차단한다.
 
[초기에 설계한 회로도]
 
[기판 전면부]
 
[기판 후면부]
[전면부 소켓에 Wemos D1 mini를 장착한 모습]
 
납땜을 마친 기판은 반찬통 뚜껑에 붙이기로 결정했다. (실외에 설치할 예정이고, 혹시 모를 누수에 의하여 합선되는 것을 방지하기 위하여 높은 위치에 배치하였다.) 글루건으로 약간의 받침대를 뚜껑에 만들고 기판을 피스로 고정하였다.
 
[반찬통 뚜껑에 배치한 모습]
 
 
[측면에서 보면 글루건으로 만든 받침대가 잘 보임]
 
 

5. 배치

  반찬통 바닥에는18650 배터리, 충전보호 모듈, 카메라 모듈을 배치하였다. 또한 반찬통 바닥에는 여러개의 구멍을 뚫어 혹시나 모를 누수에 의한 배수 효과와 내부 과열시 환기가 가능 하도록 하였다.

[위쪽 : 충전모듈, 아래쪽 : 18650 배터리, 오른쪽 : 카메라 모듈]

다만 아무리 투명한 반찬통이라고하여도 카메라를 내부에 넣고 사진을 찍으니, 반찬통이 그다지 투명하지 않다는 것을 알게 되었다.  그래서 반찬통에 구멍을 뚫고 유리 조각을 끼운후 글루건으로 처리하였다.

[사각형 모양의 유리로 일부 대체한 모습]

[전체적으로 조립한 모습]

6. 끝으로...

  다 만든 후에 장마철 기간에 실외에서 테스트 하였다. 성공적으로 동작할 뿐만 아니라, 누수 현상도 크게 걱정할 필요가 없었다. 다만 카메라에 직접적으로 태양이 비추게 되는 경우, 시계가 아주 안좋았다. 그래서 서 카메라를 태양으로 부터 살짝 가려줄 그러한 것을 만들어서 카메라 전면부에 장착하였다.
 적당한 크기의 PET병을 자르고, 유성펜으로 검게 색칠하였다.
 


[나름 그럴듯해 보이는 결과물]


아직 필요한 곳에 설치는 하지 못했지만, 워낙 장소 이동이 수월한 물건이라 이제 가져다 놓기만 하면 될듯하다.

* 이 내용은 처음 작성되어 공개되었고, 내용 보충이 될 수 있습니다.














ESP8266 Digital Input Pin의 불편한 진실

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