본문 바로가기

DIY Atelier


카메라 무선 컨트롤러 (Wireless Pan-Tilt-Zoom Controller) - 2. 송신부

페이지 정보

작성자 최고관리자 댓글 0건 조회 2,343회 작성일 18-07-27 04:10

본문

 

서 제작한 기구물을 원격으로 조작하기 위한 두뇌부분입니다. 내용이 적지 않으니 아마 송신과 수신 부분을 나누어서 올려야 할것 같습니다.

회로와 펌웨어는 그리 복잡하진 않지만, 영상까지 RF로 송수신 하려다 보니 왠지 거창하고 복잡해 보입니다. 아래에 전체 다이어그램을 올립니다.

 

 

 1  전체 구조의 개요


{이미지:21}

- 회로부의 전체 구조도 -

 

{이미지:10}

- 제작된 송신부 -

 

 2  MCU(Micro Controller Unit)의 선정 및 설계

 

MCU(Micro Controller Unit) 는 보통 Microcontroller(마이크로 컨트롤러)라고 불립니다. 아시다시피 자유롭게 프로그램(C언어)으로써 원하는 동작과 센싱을 구현해낼 수 있는 작은 컴퓨터지요.

굳이 펌웨어를 짜서 구워야 하는 MCU를 사용한 것은 다음과 같은 이유 때문입니다.

 

1. 카메라의 움직임 명령을 여러가지 버튼 입력으로 받아야 한다.

2. RF 송수신을 위한 Serial 통신 코드를 만들고 인식하며 오류 정정을 해야 한다.

3. 모터 제어를 위한 PWM 신호를 간단하고 정확하게 만들어야 한다.

4. 속도 제어 및 각종 온오프 신호를 쉽게 만들 수 있어야 한다.

 

그래서 다음과 같은 기능들이 들어 있는 MCU를 선정했습니다.

 

1. 버튼 입력 및 각종 출력 포트가 9개 이상

2. USART(시리얼 통신) 기능

3. PWM 기능 : 가능하면 2개 이상 (필요한 PWM 포트는 3개임-pan, tilt, zoom)

4. 가급적 포트의 입출력 전류가 클것

5. 가급적 핀이 적을 것 - 아무래도 소형화가 좋으므로

 

세상엔 다양한 MCU가 존재하지만, 제가 다뤄본 것들 중에서는 가장 가성비가 높고 종류가 다양한 콘트롤러는 역시 AVR 시리즈라서 이 중에서 위의 기능들을 포함한 것을 골랐더니 마침 몇개 가지고 있던 ATtiny 2313 정도가 무난했습니다. 다만 프로그램 메모리가 다소 작은게 흠이라, 마지막에는 거의 다 차버렸습니다 (송신기와 수신기의 프로그램을 통합해서 만든 때문이기도).

 

{이미지:1}

- 송신부 회로도 -

 

 3  RF Transmitter(무선송신기)의 선정 및 설계


이 시스템의 가장 핵심적인 부분이며 가장 돈의 위력에 좌우되는 부분인지라 많이 고심했지만

누구나 쉽게 만들 수 있어야 한다는 조건에서 가장 저렴한 모델을 선정했습니다.

하지만 스펙상에는 노지(open)에서 200m 까지 가능하다고 명시되어 있고, 유튜브의 해외 설험 영상에서도 100m를 넘었기 떄문에 혹시나 하는 기대감도 있었습니다.

웬만한 쇼핑몰에서 RF 송수신기로 검색하면 뜨는 유명한 모델이기도 합니다. 

 

{이미지:2}

- RF Transmitter & Receiver -

 

 

이 모델의 장점은

1. 무척 저렴하다 - 송수신기 합쳐서 5천원 안됨

2. 핀이 단순하다 - 3~4개로 동작. 데이터만 보내고 받는 단순한 동작

3. 크기가 작다.

 

이 모델의 단점은

1. 송수신 거리가 짧다 - 실험상 30m 이내

2. 높은 BAUD의 Data 처리가 불가능하다 - 스펙상 5K, 실험상 3K 미만에서 안정적

 

이 시스템에서는 그다지 많은 양의 데이터나 높은 BAUD의 처리 능력이 필요하진 않기 떄문에, 일단 감안하고 설계 했습니다. 물론 BAUD가 높을 수록 속도나 안정성 면에서 더 유리하겠지요.

 

아래의 모듈은 실험만 해 본 것이지만, BAUD rate가 수십K 까지 가능하며 안정성 및 거리도 훨씬 높게 나옵니다.

다만 가격이 조금 높고 가공성이 떨어져서(pitch가 1.6mm로서, 납땜시 변환해야 함) 일단 범용 설계에서는 제외했습니다. 다음 업그레이드 버전에서나 다뤄볼까 합니다.

{이미지:8}

- 조금 더 비싼 모델 -

 

 

수신기에서는 입력되는 신호가 아무것도 없을 때, (또는 DC 신호가 뜰 때) 전원 인가시 아래와 같은 노이즈가 항상 감지됩니다.

 

{이미지:4}

- 수신부에 뜨는 노이즈 -

 

하지만 같은 주파수대역에서 일정한 신호(펄스)가 잡힐 경우 아래와 같이 정상 신호가 출력됩니다.

 

{이미지:5}

- 수신부에 정상 파형이 잡힌 경우 -

 

참고로, 위의 파형을 측정한 장비는 일반 디지털 스코프가 아니라 오디오카드로 입력 받는 PC Scope이며, 예전에 한번 소개한 적이 있습니다.

이 장비로는 고주파(수십kHz) 또는 DC 값은 측정하지 못하고 단순히 펄스만 인식되지만 (오디오카드 입력단에서 DC는 커트되며, 오디오카드의 샘플링 주파수가 정밀도임), 현재 시스템에서는 이 정도로도 충분히 측정 가능합니다 (하지만 제대로 된 스코프 하나쯤 갖고 싶음,,)

 

......................................................................................

 

데이터는 펄스열로 전송해야 하며, 일정한 규격을 갖춘 프로토콜(USART 규격)로 보냅니다.

송신하는 데이터 패킷은 다음과 같습니다.

 

1. 여러대의 카메라를 컨트롤 할 경우를 대비해서 각 수신기에 고유 어드레스를 부여하는 방식입니다.

2. 자신의 어드레스가 수신되면 해당 카메라만 동작하게 됩니다.

3. 전송 데이터가 없는 경우(버튼이 눌리지 않은 경우)에도 연속으로 No Data signal을 보냅니다 - 노이즈로 인한 오류 방지

 

{이미지:6}

-  전송 데이터 패킷(Data Packet) -

 

데이터의 BAUD rate는 약 1K이며, 1 bit의 폭은 약 1msec입니다.

한 패킷을 전송하는데 약 20msec 가 필요하며, 조금 더 높여도 좋겠지만 일단은 이정도로 설계했습니다.

(규격화된 보레이트, 즉 1200의 배수로 만들지 않은 이유는, 송신기와 수신기 사이에서만 일정하게 통일되면 되므로) 

 

   RF Transmitter 입력단 

 

MCU의 출력은 5V이고 송신기의 전원은 12V라서 - 물론 다이렉트로 연결해도 동작은 되지만 - 입력 레벨을 맞추기 위해 TR을 한개 사용했습니다. 이 부분은 없어도 무방할것 같습니다. 반전회로이기 때문에 파형은 역상으로 입력됩니다. (수신단에서 다시 반전시켜야 함)


{이미지:20}

-  송신기의 입력단에 TR을 연결한 경우 -

 

 

 4  전원(Battery)의 설계


전원은 회로 내의 소자들의 필요 전압을 기준으로 설정해야 겠지요.

MCU는 1.8V 부터 동작 가능하지만 RF 송신기는 3.5V부터 동작합니다.

외부 배터리로서 건전지나 니켈충전지, 납축전지 등 여러가지가 가능하겠지만, 용량과 동작 시간, 편의성 등을 고려해보니

일반 스마트폰 충전용으로 쉽게 구할 수 있는 보조배터리가 좋을 것 같아서 정했습니다. 꽤 안정된 5V를 공급해줍니다. 

 

요즘엔 5000mA 이상의 제품도 5천원 정도에 구매할 수 있고 5000mA 급의 배터리라면 몇일을 사용할 수 있는 용량입니다.

 

다만 보조배터리에는 치명적인 단점이 하나 있는데, 바로 소비전력이 작을 경우 (전류를 체크합니다) 파워오프되어 버린다는 점입니다. 이것은 폰의 충전이 끝났음을 전류의 양으로 판단하는 회로 때문이며, 폰 충전용의 보조배터리에는 필요한 기능이겠지만 범용 배터리로서는 치명적인 약점입니다.

그래서 시스템의 소비전력을 낮추는 것이 꼭 유리하지는 않습니다. 사용중 갑자기 꺼져 버리는 현상이 발생할 수 있습니다.

이 시스템에서는 다행히 TL499의 승압회로가 전력을 다소 잡아먹기 때문에 꺼지는 현상은 발생하지 않았습니다.

(만일 저전력 회로라면, 더미저항이나 LED 등으로 추가 소비가 필요할 수 있습니다)

 

케이블은 USB 케이블 중간을 잘라서, 검은색을 GND, 빨간색을 5V로 연결하면 됩니다.

 

 

{이미지:11}

-  보조배터리와 제작 케이블 -

 

   RF Transmitter용 전원의 설계 


Transmitter는 12V 정도 까지 동작하며, 보통 전압이 높을 수록 전송 파워도 높아집니다. 따라서 최대한의 전송률을 위해 12V의 전원을 만들어서 송신기에만 따로 공급합니다.

시스템의 기본 전원이 5V이므로 DC 전압을 증폭(step-up)해 주는 기능이 필요한데, 이에 적당한 놈이 바로 step-up regulator IC 입니다. 다른 표현으로는 DC-DC Converter 라고도 합니다.
동작원리로는 일반적인 SMPS 전원에 주로 사용하는 쵸핑 방식이고 위의 TL499라는 IC가 그런 역할을 합니다 (가격은 1,000원 정도 합니다)
 
아래 그림 처럼 주변 부품을 설정해 주면, 부품 값의 조합에 따라 자유롭게 출력 전압을 바꿀 수 있게 되어 있습니다.
아래는 TL499의 핀배치도와 부품의 조합에 따른 출력 전압의 설정 방법입니다.

이를 위한 설계는 예전에 마이크를 제작할 때 설명한 바 있으므로, 참고로 링크만 걸어둡니다.

 

http://dameum.kr/GNB5/bbs/board.php?bo_table=atelier01&wr_id=12 

 

{이미지:7}

{이미지:12}

{이미지:13}

-  TL499를 사용한 12V 컨버터부 -

 

   안테나의 설계

 

안테나는 무선 데이터를전송하는 최종 관문이면서 또한 중요한 요소입니다. 

일반적으로 전파 파장의 1, 1/2, 1/4 등등 배수의 길이로 만들면 되는데, 중심 주파수가 433MHz이므로 1/4 길이는 약 17cm 정도 될텐데, 스펙상으로는 25cm로 만들라고 되어 있네요.

그냥 일반 전선을 이 길이로 잘라서 안테나 단자에 연결해도 되지만, 실제 상황에서 방향성을 가지기 때문에 적절히 그때 그때 길이와 방향을 조절할 필요성이 있어 라디오 안테나를 달았습니다.

또는 소형화에 좋은 헬리컬 안테나를 달아도 됩니다만, 실험상으로는 라디오 안테나가 그나마 가장 성능이 나오는 듯 합니다.

케이스 뚜껑에 부착하기 편하도록 나사와 서포터로 고정하게 했습니다.

 

{이미지:17}

 

{이미지:18} 

-  라디오 안테나를 부착한 모습 - 



 5  입력용 버튼의 설계

 

사진에서 보이듯이, 버튼은 일반 푸시버튼을 사용했습니다.

조이스틱이 편리할것 같아 설계해 보았지만, 오히려 정확하고 빠른 동작과 에러의 가능성 및 내구성 등에서 푸시버튼이 더 좋다는 판단으로 하게 되었지만(주로 한 손으로 조작해야 하기 떄문에 버튼이 편하지만, PCB가 튼튼하게 고정될 수 있다면 조이스틱도 괜찮음), 아래와 같은 조이스틱도 저렴하고 설계가 간단합니다. 아두이노 조이스틱으로 검색하면 나오며, 600원 정도의 가격으로 구할 수 있습니다.

 

 

 

{이미지:9}

-  조이스틱의 예 -

 

 

 6  소프트웨어의 설계

 

프로그램 및 컴파일러로는 Atmel Studio를 사용하고, 프로그래머로는 AVRISP (STK500)를 쓰고 있습니다.

송신부의 프로그램은 매우 간단하며, 따로 인터럽트를 쓰지 않고 무한순차제어만 행하고 있습니다.

핵심 부분만 보면 다음과 같습니다.

 

= 메인 루틴 =

 

while(1)

{

key_check();

USART_Transmit(addr, command);

}

 

= 명령코드 = 

 

#define command_up    0xa1

#define command_left     0xa3

#define command_down    0xa2

#define command_right    0xa4

#define command_zoomup    0xb1

#define command_zoomdown    0xb2

#define command_shutter    0xc3

#define command_non    0x00

 

= USART 설정 및 전송 루틴 = 

 

////////////////////////////////// UART 초기화 //////////////////////////////////////

void USART_Init( unsigned int baud )

{

UBRRH = (unsigned char)(baud>>8);  /* Set baud rate */ 

UBRRL = (unsigned char)baud;

UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); /* Enable receiver and transmitter */ 

UCSRC = (1<<USBS)|(3<<UCSZ0);  /* Set frame format: 8data, 2stop bit */ 

}

 

////////////////////////////////// UART 송신 //////////////////////////////////////

void USART_Transmit( unsigned int addr0, unsigned int data )

{

while ( !( UCSRA & (1<<UDRE)) )

;

UDR = addr0;

while ( !( UCSRA & (1<<UDRE)) )

;

UDR = data;

}


버튼 입력은 소프트웨어적으로 채터링을 보완하며, 같은 값이 3번 이상 입력되었을 때 인정되도록 하고 있습니다.

 

 

 7  케이스

 

케이스는, PCB와 배터리, 안테나 등의 보관 및 이동, 그리고 동작시에는 PCB를 뚜껑에 부착하여 조작의 편의를 위해 마련했지만 좀 투박하고 솔직히 보기 좋진 않습니다. 그냥 다이소에서 산 2천원짜리 밀폐용기입니다.

 

{이미지:19} 

-  케이스 -

 

 

 8  사용 재료 및 가격 

 

 

재료 사진

재료명

가격

구입처(비고)

{이미지:14}

 ATtiny 2313A

 약 3,000원

 http://bitly.kr/UEBk

{이미지:15}

 TL499

 약 1,000원

 http://bitly.kr/2cUn

 

 PCB

 약 2,000원

 자상가

 

 Push button

 약 200원

 자상가

{이미지:16}

 RF 송수신기

 약 1,500원

 http://bitly.kr/aVOZ

 

 안테나

 약 2,300원

 http://bitly.kr/3aR2

 

 보조배터리

 약 3,000원

 

 

 기타

 약 5,000원

 수동부품, 서포터, 나사 등

 

 총계

 약 20,000원

 배송비 미포함

 

  


댓글목록

등록된 댓글이 없습니다.