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









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

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