로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Products Manual
상품 자료실
       
판매하는 상품의 관련자료입니다.
작성자 leeky        
작성일 2007/07/10
첨부#1 t2313_snake_v2.zip (4KB) (Down:478)
첨부#2 snake_robot_wagons.jpg (181KB) (Down:52)
ㆍ추천: 0  ㆍ조회: 3333   
  AVR 8 RC-서보 뱀로봇 소스

AVR 칩으로 RC-서보모터를 제어하는 로봇의 응용이 많이 있습니다.
RC-서보모터만 제어하면 된다고 생각하여 쉽게 시작하지만, AVR의 타이머와 PWM 발생기의 채널 부족으로,
8채널의 RC-서보모터의 각도만으로 뱀로봇을 자유자재로 움직이는 소프트웨어의 개발은 의외로 쉽지 않습니다.
저도 인터넷에서 소스를 찾아 보았지만, 완전한 소스는 아무도 공개하지 않는 실정입니다.
이번에는, ATMEGA8~32를 사용하여 8개의 RC-서보모터를 제어하는 소스를 만들어 보도록 하겟습니다.
.
■ RC-서보모터란?
RC-서보모터의 모양은 다음 그림과 같은 구조로 HS311등
국산이 성능과 가격에서 업계의 선두를 지키고 있습니다.
RC-서보모터의 사용목적은 무선조정 비행기의 보조익 제어 입니다만,
요즈음은 로봇의 관절제어에도 많이 쓰이고 있습니다.
 
.
■ RC-서보모터의 특징과 규격
소형로봇의 관절을 제어하는데 매우 좋다. 마이크로 프로세서 회로의 출력에 직접 연결가능.
감속 기어 내장. 동작범위 ±90도 (180도), 개조하면 무한회전이 가능
- 동작속도 : 4.8 Volt에서 0.1 초/30도
- 출력 토크 : 4.8 Volt에서 3.0 kg.cm
- 무게 : 44.5 g
- 크기 : 40 x 20 x 36 mm
- 커넥터 구조 : 검정색 : GND (접지), 빨간색 : VCC (전원), 노란색 : PWM (신호)
- 가격 : 1 만원 대 (품번에 따라서 차이가 있음)
.
■ RC-서보모터의 제어파형과 제어각도 (중간에 잠시 멈추는 각도는 90도로 펄스폭은 1.5ms 이다)
 
 
RC-서보모터의 제어각도는 -90 ~ +90 도 (0.5 ~ 2.5ms) 입니다.
인가하는 펄스의 주기는 40 ~ 80Hz, 펄스폭은 0.5ms ~ 2.5 ms 입니다.
그러나 -90 도와 +90 도에서는 펄스의 정확도 문제로 RC-서보모터의 떨림과 구속현상의 문제가 있으므로
제어각도는 -45도 ~ +45도 이내로, 펄스폭으로는 1.0ms ~ 2.0ms 이내의 제어를 하는 것이 좋습니다. 

■ 8개의 RC-서보모터는 어떻게 제어하는가?
1개의 펄스폭을 50Hz 정도로 구동하는 것은 PWM 포트 만으로 쓸 수도 있고,
1개의 타이머를 이용하여 소프트웨어로 쉽게 펄스폭을 생성할 수 도 있습니다.
다음은 1개의 2.5ms 펄스폭을 생성하는 파형입니다.

__-------____________________________-------___
   |<-A->|
   |<-------------------B----------------->|
.
8개의 RC-서보모터를 제어하려면, 펄스폭을 잘 검토하면 쉽게 풀리게 됩니다.
A는 펄스폭 2.5ms 이며 B는 펄스의 주기 50Hz 즉 20ms 입니다.
그러므로 20ms의 주기안에 2.5ms의 펄스폭을 8개까지 넣을 수 있다는 것을 알 수 있습니다.
만일 16 채널의 펄스폭을 수용한다면 2,5ms x16개 = 40ms =25Hz로 됩니다.

다음은 8개의 RC-서보모터를 제어하는 8개의 PWM  펄스폭을 각각의 포트로 출력하는 경우의 파형입니다.
PORTC0 ____----___________________________________----________
PORTC1 ________----____________________________________----___
PORTC2 _____________----____________________________________--
PORTC3 __________________----_________________________________
PORTC4 _______________________----____________________________
PORTC5 ____________________________----_______________________
PORTC6 _________________________________----__________________
PORTC7 ______________________________________----_____________
.
최대 2.5ms의 펄스폭을 8개의 포트에 각각 출력해도 모든시간의 합은 2.5ms x 8개 = 20ms 이다.
그러므로 1개의 타이머를 10us으로 인터럽트 처리에서 8비트 변수하나로 250 까지 계수하면
10us x 250 =2500us =2.5ms 이며 실지 1개의 RC-서보모터에 필요한 펄스폭 0.5ms ~2.5ms는
소프트웨어 타이머는 50 ~ 250 count 이내로 8비트 변수 1개로 충분히 제어가 가능하다.
(물론 이 외에도 8개 출력 펄스폭의 설정 값을 저장하는 8비트 변수는 8개 필요하다)  
.
ICC-AVR C  컴파일러의 경우는 코드생성 마법사를 사용하면,
1개의 타이머를 구동하는 정도라면, 마법사를 열고, 몇 번의 단추 조작으로 간단히 소스가 나온다.
다음 사이트를 방문하면 45일 동안 무료로 쓸 수 있는 평가판을 받을 수 있다.

ICC-AVR C  컴파일러 내려받기 : http://www.imagecraft.com/devtools_AVR.html 

 

MPU = MEGA8~32 혹은 MEGA64, XTAL = 16MHz
TIMER1 = Timer1 사용, Overflow Interrupt 사용, 단순 타이머의 경우 나머지는 모두 선택하지 않음.
10us 선택, 분주비 8 혹은 64를 선택하면 다음과 같은 소스가 나온다. 
 

//ICC-AVR application builder
// Target : M32, Crystal: 16.000Mhz
#include <iom32v.h>
#include <macros.h>
.
// 포트 초기화 루틴이 나온다, PB와 PC를 출력, 나머지 포트는 입력으로 사용
void port_init(void)
{
PORTA = 0xFF; // 초기 데이터 =1 =풀업
DDRA = 0x00; // 방향 =0 =입력
PORTB = 0x00; // 초기 데이터 =0
DDRB = 0xFF; // 방향 =1 =출력
PORTC = 0x00; // 초기 데이터 =0
DDRC = 0xFF; // 방향 =1 =출력
PORTD = 0xFF; // 초기 데이터 =1 =풀업
DDRD = 0x00; // 방향 =0 =입력
}
.
// 다음은 타이머1의 초기화 소스이다.
// 타이머1의 클럭을 16MHZ XTAL을 8 분주하고, 10us 간격의 가로채기를 발생한다.
//TIMER1 initialisation - prescale:8
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 10uSec
// actual value: 10.000uSec (0.0%)
void timer1_init(void)
{
TCCR1B = 0x00; // stop = 타이머1 정지
TCNT1H = 0xFF; // setup = 타이머 1을 10 us으로 설정
TCNT1L = 0xEC;
TCCR1A = 0x00; // 타이머 1 입력 설정
TCCR1B = 0x02; // start Timer = 타이머 1 작동시작
}
.
// 다음은 타이머1의 10us 시간간격 가로채기를 실행하는 가로채기 처리함수의 소스이다.
// 8개의 PWM의 duty를 0.5~2.5ms 범위에서 RC-서보모터용 pwm 펄스를 출력하는 보조함수이다.
// 이 보조함수는 변수 pwm1~pwm8에 저장된 50~250 범위의 duty값을 PC0~PC7에 출력한다.
// 각 PWM 펄스의 분해능(최소가변 펄스폭)은 0.01ms 이며, 각 펄스의 주기는 20ms(50Hz) 이다.

// #pragma는 컴파일러의 전치처리기(pre processor)이며, 컴파일러의 전용(이식성이 없음) 지시자이다.
// interrupt_handler는 가로채기 시작주소를 지시하며 MPU에 따라서 상이한 주소를 출력한다.
// timer1_ovf_isr:10는 가로채기 시작주소 목록의 10 번째 주소값을 이름 timer1_ovf_isr이 있는 주소
#pragma interrupt_handler timer1_ovf_isr:10
void timer1_ovf_isr(void)
{
// TIMER1 has overflowed =이곳이 실행되면 이미 타이머1이 가득차서 0이 된 것이다.
TCNT1H = 0xFF //reload counter high value =1/8 클럭을 20개 상승계수하는 설정값을 다시 적재시킨다.
TCNT1L = 0xEC; //reload counter low value =2개의 8비트 카운터이므로 설정값을 상위, 하위로 각각 적재.
pwm8_gen(); // 8개의 PWM 펄스를 생성하는 보조함수를 실행한다. (아래의 pwm8_gen() 함수를 참조하라)
}
.
// 다음은 마법사로 생성한 소스를 실행하는 초기화 함수이다.
// 이 소스는 주함수이므로 소스의 가장 아래에 있어야 한다.
void main(void) // 주함수를 선언한다.
{
CLI();   //disable all interrupts =모든 가로채기를 중지한다.
port_init();       // 위에 생성된 일반포트의 초기값과 방향을 설정하는 보조함수를 1회 실행한다.
timer1_init();    // 위에 생성된 타이머1의 10us 시간간격 가로채기 초기화를 1회 실행한다
.
MCUCR = 0x00;  // 특별 기능의 설정이 없음
GICR  = 0x00;    // 범용 가로채기 설정 없음
TIMSK = 0x04;   // timer interrupt sources = 타이머1 가로채기 1개를 설정
SEI();              //re-enable interrupts = 설정된 모든 가로채기를 시작한다.
// all peripherals are now initialised = 이제 모든 주변장치의 초기화가 끝났다. 

// 각포트로 출력하는 8개의 펄스폭을 설정하는 8비트 변수 8개를 다음과 같이 윗 부분에서 선언해야 한다.
// unsigned char pwm1, pwm2, pwm3, pwm4, pwm5, pwm6, pwm7, pwm8;
// 8개의 RC-서보모터를 제어하는 pwm 펄스폭 값의 초기값을 설정한다.
// 150 =1.5ms = 서보각도의 중심값.
pwm1 =pwm2 =pwm3 =pwm4 =pwm5 =pwm6 =pwm7 =pwm8 =150;

// 주변장치의 초기화와 변수의 초기화가 끝났으므로,
// 이제 실지로 작동하는 사용자 응용함수를 계속 돌리는 무한루프를 선언한다.
while(1)
{   // 무한순환 while(1)의 시작을 선언
    
     // 이곳에 주함수에서 실행하는 사용자의 마지막 응용함수를 추가한다.
}   // 무한순환 while(1)의 끝을 선언
}    // 주함수의 끝을 선언
.
■ ATMEGA32를 사용하여 8개의 RC-서보모터를 각도를 각각 제어하는 소스.
실지로 PWM 펄스를 생성하는 보조함수는 10us 타이머1 가로채기 루틴에서 사용한다.
10us 타이머1 가로채기 void timer1_ovf_isr(void) 안에 직접 입력되어 있다.
.
#pragma interrupt_handler timer1_ovf_isr:10
void timer1_ovf_isr(void)
{
  //TIMER1 has overflowed
  TCNT1H = 0xFF; // reload counter high value
  TCNT1L = 0xEC; // reload counter low value
  //
  // 여기서 부터 UART 초기화 전 까지는 8개의 pwm 펄스를 생성하는 타이머1의 보조함수 pwm8_gen() 이다.
  pwm++;           // for pwm duty 0 ~ 2.5 ms
  switch (servo_ch)                   // pwm output to PORTC
  {
        case (1):                        // for servo #1
         if (pwm >pwm1) PORTC &= ~0x01;         // off pwm #1
         if (pwm >249)
         {
                 PORTC |= 0x02;         // on pwm #2                           
                 servo_ch =2;            // next pwm ch =#2
         }        
        break;

        case (2):                        // for servo #2
         if (pwm >pwm2) PORTC &= ~0x02;         // off pwm #2
         if (pwm >249)
         {
                 PORTC |= 0x04;         // on pwm #3                           
                 servo_ch =3;            // next pwm ch =#3
         }        
        break;

        case (3):                        // for servo #3
         if (pwm >pwm3) PORTC &= ~0x04;         // off pwm #3
         if (pwm >249)
         {
                 PORTC |= 0x08;         // on pwm #4                           
                 servo_ch =4;            // next pwm ch =#4
         }        
        break;

        case (4):                        // for servo #4
         if (pwm >pwm4) PORTC &= ~0x08;         // off pwm #4
         if (pwm >249)
         {
                 PORTC |= 0x10;         // on pwm #5                           
                 servo_ch =5;            // next pwm ch =#5
         }        
        break;

        case (5):                        // for servo #5
         if (pwm >pwm5) PORTC &= ~0x10;         // off pwm #5
         if (pwm >249)
         {
                 PORTC |= 0x20;         // on pwm #6                           
                 servo_ch =6;            // next pwm ch =#6
         }        
        break;

        case (6):                        // for servo #6
         if (pwm >pwm6) PORTC &= ~0x20;         // off pwm #6
         if (pwm >249)
         {
                 PORTC |= 0x40;         // on pwm #7                           
                 servo_ch =7;            // next pwm ch =#7
         }        
        break;

        case (7):                        // for servo #7
         if (pwm >pwm7) PORTC &= ~0x40;         // off pwm #7
         if (pwm >249)
         {
                 PORTC |= 0x80;         // on pwm #8                           
                 servo_ch =8;            // next pwm ch =#8
         }        
        break;

        case (8):                        // for servo #8
         if (pwm >pwm8) PORTC &= ~0x80;         // off pwm #8
         if (pwm >249)
         {
                 PORTC |= 0x01;         // on pwm #1                           
                 servo_ch =1;            // next pwm ch =#1
         }        
        break;
  }                                
  if (pwm >249) pwm =0;             // for pwm duty 0 ~ 2.5 ms
}
.
■ 바퀴나 다리가 없는 뱀로봇의 제어는 RC-서보모터를 관절로 사용하므로 매우 특별하다.
8개의 RC-서보모터를 사용하여 PWM의 펄스폭으로 뱀로봇의 이동을 만들려면 정재파와 진행파를 이해야 한다.
뱀로봇의 모든 관절을 동시에 구불구불하게 만들거나, 직선으로 펴진 자세를 만들면 전혀 움직이지 않는다.
이것은 정재파이기 때문이다. 움직이려면 진행파를 생성해야 앞으로, 뒤로, 좌로, 우로 움직임을 만들 수 있다.
다음 소스는 통신포트로 PC와 연결하여 R, L 그리고 S를 명령으로 좌로 진행, 우로 진행, 정지를 실행한다.
.
다음은 Snake Robot V1.0 에서 사용된 변수 들의 정의이다.
unsigned char servo_ch =1;        // current servo number        
unsigned char pwm1,pwm2,pwm3,pwm4,pwm5,pwm6,pwm7,pwm8;  // pwm preset
unsigned char pwm =0;                // pwm counter for timer1
unsigned char offset =10;             // wave offset for snake joint action/step
unsigned char delay =10;               // pwm step delay        for action delay
unsigned char flag_1ms;                // flag of 1ms for software delay
unsigned char cmd_buf;                 // command =null
unsigned char mode ='s';                // mode =stop                                 
unsigned char flag_cmd =0;             // not ready                                                 
.
시간지연 타이머와 8개의 PWM 펄스폭을 생성하는 타이머1의 보조함수들은 위의 예와 동일하므로 생략한다.
뱀로봇의 초기자세를 잡는 보조함수는 다음과 같다. (뱀로봇의 정지상태 자세를 잡는다 - 이동하지 않는다)
void init_stop(void)        // stop action for stop
{
pwm1 =mid +angle;;
delay_1ms(delay);     // delay time for servo action [ms/deg]
pwm2 =mid +angle;;
delay_1ms(delay);     // delay time for servo action [ms/deg]
pwm3 =mide +angle;
delay_1ms(delay);     // delay time for servo action [ms/deg]
pwm4 =mide -angle;
delay_1ms(delay);     // delay time for servo action [ms/deg]
pwm5 =mide -angle;
delay_1ms(delay);     // delay time for servo action [ms/deg]
pwm6 =mide -angle;
delay_1ms(delay);     // delay time for servo action [ms/deg]
pwm7 =mide +angle;
delay_1ms(delay);     // delay time for servo action [ms/deg]
pwm8 =mide +angle;
delay_1ms(delay);     // delay time for servo action [ms/deg]
}
.
■ 뱀로봇의 좌측 전방과 우측 전방으로 진행하는 뱀로봇의 진행파를 생성하는 보조함수는 다음과 같다.
뱀로봇의 단위동작은 8개의 진행하는 정현파로 생성되며, 8개의 진행하는 정현파의 반복동작으로 나아간다.
뱀로봇의 머리가 검정색이라면, 검정색에 연결된 RC-서보모터의 번호는 #1 이며 꼬리는 #8 이다.
.
뱀로봇의 관절각도는 다음과 같다.
- - - 는 좌측으로 꺽어진 3개의 관절로 0~180도의 진행하는 정현파를 생성하며,
+ + + 는 우측으로 꺽어진 3개의 관절로 180~360도의 진행하는 정현파를 생성한다.
(L1)  - - - + + + - - (L2) - - + + + - - -  (L3) - + + + - - - +  
(+부호는 정현파의 양수영역이고, -는 음수영역이다)
(R1) + + + - - - + + (R2) + + - - - + + +  (R3) + - - - + + + - 
(L1~L3과 R1~R3은 시작하는 영역이 180 위상차가 있다)
.
정지 동작은 모든 관절이 목표로 하는 각도로 동시에 움직이는 하나의 동작이며
이것으로는 뱀로봇이 전혀 나아가지 않는다.
진행 동작은 순서대로 관절이 움직이는 동작이다,
즉 L1의 동작 하나를 예로 들면 각도가 동시에 변화하는 정지 동작이지만,
L1에서 L2로, L2에서 L3으로, 혹은 L3에서 R1으로 뱀로봇 몸체의 자세가 변하는 중에 발생하는
진행파의 힘으로 뱀로봇은 움직이게 된다.
.
[img:snake_moving_phase.jpg,align=,width=400,height=280,vspace=0,hspace=0,border=0]
(L1) ---+++-- (L2) --+++--- (L3) -+++---+ 의 3개는 좌측으로 진행하는 위상을 생성한다.
(R1) +++---++ (R2) ++---+++ (R3) +---+++- 의 3개는 우측으로 진행하는 위상을 생성한다.
.    
3개의 관절을 10~30도로 동일하게 만들고
(동일한 각도로 된 관절 3개의 이어진 모양은 정현파 형태로 구부러 진다),
뒤따르는 3개의 관절은 반대 방향으로 동일한 각도로 만든다.
(먼저 3개의 모양과 같으나 반대 방향으로 구부러 진다).
.
동일한 각도로 제어된 3개의 RC-서보모터와 서로 반대방향으로 제어된 3개의 RC-서보모터의 연결 형태는,
결국 뱀로봇의 몸체는 +++(정현파 0~180도)와 ---(정현파 180~360도)로 정지된 정현파 상태로 된다.
뱀로봇의 이동방법은 8번 관절의 각도가 7번으로 시프트되고 나서, 8번 관절에는 1번 관절의 각도를 부여한다.
뱀보봇의 각 관절(마디와 마디 사이에 연결된 RC-서보모터)의 각도는 다음 관절로 이동(Shift) 되어야 한다.  
.
■ 다음은 뱀로봇의 관절각도의 배열((위상)을 시프트(한 방향으로 이동)하여
   진행파를 생성하는 보조함수의 소스이다.
void snake_front(void)        // snake body move to right #1
{
        pwm1 =pwm2;              
        delay_1ms(delay);     // delay time for servo action [ms/deg]
        pwm2 =pwm3;             
        delay_1ms(delay);     // delay time for servo action [ms/deg]
        pwm3 =pwm4;               
        delay_1ms(delay);     // delay time for servo action [ms/deg]
        pwm4 =pwm5;                
        delay_1ms(delay);     // delay time for servo action [ms/deg]
        pwm5 =pwm6;                
        delay_1ms(delay);     // delay time for servo action [ms/deg]
        pwm6 =pwm7;                
        delay_1ms(delay);     // delay time for servo action [ms/deg]
        pwm7 =pwm8;                
        delay_1ms(delay);     // delay time for servo action [ms/deg]
        pwm8 =pwm1;                
        delay_1ms(delay);     // delay time for servo action [ms/deg]
}
.
■ 첨부자료는 t2313_snake_v2.hex이며 ZIP으로 압축되어 있다.
MPU는 ATtiny2313-20SU이며, XTAL은 20MHz를 사용해야 한다,
직렬통신은 115200 bps로 명령을 수신하여, 8개의 RC-서보모터를 제어하여 뱀로봇을 작동한다.
명령은 소문자 알파벳으로 A와 L은 좌측이동, S와 0은 정지, D와 R은 우측이동, 숫자 1~9는 속도 조절이다.
(뱀로봇 제어용 소프트웨어는 PC의 직렬통신 소프트웨어를 사용, 명령키를 누르면 뱀로봇이 제어 된다)
초기 이동속도는 5이며 속도제어 범위는 3~12 msec/deg, RC-서보는 국산 Hitec사의 HS311이다.
.
이 화일은 AVRISP로 ATtiny2313-20SU에 직접 구워 넣는 HEX 화일이다.
 Fuse는 외부 XTAL은 켜고, CLK DIV 1/8은 끈다. 8개의 RC-서보모터는 PB0~PB7에 연결하며,
PD0~PD1은 UART로 RS232 회로를 구성하여 PC의 COM1 포트와 연결한다.
펌웨어는 뱀로봇의 하드웨어 시험용으로 제어기능은 정식버전과 같다.
.
ATMEGA8을 사용한 8~12 RC-서보모터 뱀로봇 제어기판의 회로도. (Zigbee 무선모뎀 별매)
  

판매용 버전은 적외선 비접촉 거리센서를 장착하고, 장애물과의 방향과 거리를 무선모뎀으로 전송한다,
비접촉 거리측정 센서는 샤프 GP2Y0A21YK (6,000원 별매)이며, 5V로 전원으로, 측정거리는 10 ~ 80 cm 이다.  
측정 출력은 0~2.5V 아날로그 전압이며 10cm 거리에서 2.5V, 60cm에서 0.5V, 80cm 거리에서 0.4V를 출력한다. 
참고로 측정거리별 FS =5V 일때의 ADC 값은 10cm =480, 15cm =340, 20cm =280, 25cm =210, 30cm =180 이다.
 
  
로봇제어용 M8-Zigbee-8RCservo 기판은 50 x 60mm,
원격제어용 Zigbee-USB  인터페이스 기판은 30 x 50mm 이다.
MPU 기판은 MEGA8, 48, 88, 168 (QFP 32핀)을 공용으로 사용할 수 있으며
XTAL은 20MHz (ATS 타입)까지 연결할 수 있다.
센서와 로봇용 무선모뎀은 GP2Y0A21YK와 XBee (Zigbee RF-Modem)를 연결할 수 있다.
 
USB 동글은 PC와 통신하는 또 하나의 XBee 무선모뎀를 USB 포트에 연결하는 기능이다.
FT232 가상직렬포트 USB 칩을 사용하여 X-CTU 등 직렬포트용 소프트웨어를 그대로 사용할 수 있다.
(XBee 무선모뎀은 별매)  
 
로봇제어용 기판과 USB 동글기판은 세트이다, 무선모뎀은 항상 송신용과 수신용 2개가 기본이다.
(1개로는 통신할 수 없다)
통신 거리를 늘리려면, PC의 USB 포트로 연결하는 USB 동글의 무선모뎀은 XBee Pro를 사용할 수 있다,
그러나 로봇에 장착하는 무선모뎀은 전원소비를 줄이기 위해, 기본형 XBee 무선모뎀을 사용하는 것이 좋다.
(내장된 펌웨어는 그대로 사용하면 즉시 8~10 개의 RC-서보모터를 연결하여 무선으로 뱀로봇을 제어할 수 있다.)

로봇제어용 MPU는 AVR Mega8을 사용하며,
RC-서보모터는 HS311(용산RC에서 8,800 원)을 12개 까지 연결할 수 있다.
(2개는 사용자 옵션으로 뱀로봇의 확장관절이나 추가기능으로 사용이 가능하다)
장애물 검출센서는 비접촉 적외선 거리측정 센서 GP2Y0A21YK (측정거리 10~80cm)를
3핀 콘넥터로 연결 할 수 있으며,
적외선 센서의 실지 측정거리는 주변환경의 적외선 분포에 따라서 차이가 있으며,
대상물체의 적외선 반사도에 따라서 틀리게 들어 오므로
실지로 사용할 때는 10~50cm 정도를 감지할 수 있으며,
내부 REF를 사용하는 ADC 값으로는 500~90 정도로 감지된다.
.
MPU는 아날로그 입력전용인 ADC7 핀을 사용하고 있다.
외부 직류전원을 연결하는 2mm 전원입력 잭과 전원 스위치,
Zigbee 모뎀의 연결상태를 표시하는 Status LED가 있다.  
또한 원격(Master or Coodinator) RF모뎀 측에서 소프트웨어로 로봇제어 기판에 장착된 RF모뎀의
수신레벨을 점검하는 RF-Modem Loop 점퍼도 있다.
Zigbee-USB 인터페이스 기판은 RF 모뎀의 펌웨어를 USB 포트로 업그레이드하는 Setup 점퍼도 있다.
Zigbee 모뎀은 MPU 기판과 USB 인터페이스에 각각 1개씩 2개를 장착할 수 있으며,
30~100M 까지 무선으로 원격 제어된다.
.
기판과 함께 타이머 설정 및 지연시간 소스, 직렬통신, 10개의 PWM 펄스폭 발생기의 소스를 제공한다,
원격 제어용 Zigbee 모뎀은 USB 인테페이스와 3.0V Regulator를 장착
PC에서 X-CTU 소프트웨어로 Zigbee 모뎀의 파라메터를 설정할 수 있다,
M8-ZIigbee-8Servo 기판과 무선연결도 가능하다.
   

X-CTU 소프트웨어는 키보드로 문자를 송수신하는 데이터통신 기능도 있어 터미널이 필요없다. 
화면은 X-CTU를 사용하여 M8-8RCservo기판을 장착한 Snake Robot V1.0을 제어하는 명령과 응답을 보여준다.
(청색은 PC 키보드에서 무선모뎀을 통하여 로봇으로 보내진 송신, 적색은 로봇에서 응답한 수신 데이터)
  

숫자 1~5는 작동 속도의 변경이며 숫자가 크면 빠르며, (리셋후의 초기속도는 1 이다)
W는 거리측정, A는 좌로 이동, S는 정지, D는 우로 진행, X는 일자로 정지한다.
이 명령은 Mega8 8/12RC-Servo 기판에 구어진 펌웨어에 의해서 작동한다. (통신속도는 9600 BPS이다)  
XBee 무선모뎀 소프트웨어 X-CTU 내려받기 : http://avrtools.co.kr/down/setup_x-ctu_5.0.22.exe

별매(Option) XBee (2.4GHz Zigbee 무선모뎀)을 기판위에 장착하면,
8RC-서보모터 뱀로봇을 구입즉시 무선으로 제어 할 수 있다.
CN5의 RC-서보모터 #11, #12는 소프트웨어를 개조하여 센서의 방향전환 등,
사용자가 추가하는 기능으로 이용이 가능하다.
또한 CN7은 4핀 콘넥터는 1 =VCC, 2 =PB0/ICP, 3 =PB1/OC1A, 4 =GND로 사용자가 기능을 추가할 수 있다.
  
XBee 무선 모듈은 저 가격대와 저-전력의 무선 네트워크를 만족하는 ZigBee/IEEE 802.15.4 호환 솔루션을 제공한다.
쉬운 사용법(초기화 및 무선 연결은 자동), 저-전력(소비전류 50mA @3.3V), 장치간에 신뢰성 있는 데이터 전송을 제공한다.
(자동 오류정정 FEC 기능을 사용), 또한 XBee는 작은 크기(24.4 x 27.6 mm)로 여유 있는 보드 공간을 제공한다.
XBee 모듈은 ISM 2.4 GHz 주파수 대역에서 작동되며, 구입하여 사용하는데 어떠한 설정도 필요하지 않다.
.
Xbee 모뎀은 1-전원, 2-DO, 3-DI, 10-GND를 연결하면 MPU 기판과 직렬포트로 9600BPS의 송수신이 가능하다.
규격에는 1.7V~ 3.3V 까지 작동한다고 하지만, 3.3V로 구동하면 연결이 거의 안되는데,
이유는 XBee가 3.3V 에서 채널 주파수가 틀어 지는 현상이 있으므로, 규격과 달리 반드시 3V 이하로 연결해야 한다.  
직렬통신 속도는 9600 BPS가 초기값이며, 통신 속도를 변경하려면 X-CTU라는 소프트웨어를 사용해야 한다.
또한 Xbee 모뎀의 펌웨어를 업그레이드 하려면, /DTR, /RTS를 추가로 연결해 주어야 한다. (기판에 점퍼 있음)
.
- ISM 2.4 GHz 작동 주파수 (무선 전송속도는 250K bps)
- 1 mW (0 dBm), 파워 출력
- U.FL. RF 콘넥터, 칩 또는 와이어 안테나 옵션
- 산업용 온도 범위 (-40 ~ 85°C)
- 미국, 캐나다, 유럽 등지에서 사용이 허가됨
- 향상된 네트워킹과 저-전력 모드 지원 
 
이 자료의 무단 배포 및 무단 게시를 금합니다. 특히 상용 사이트의 게시는 절대로 안됩니다.
단 개인적인 용도로 개인 사이트에 올리는 경우는, 원저자를 글과 함께 반드시 게시해야 합니다.
원저자 : http://avrtools.co.kr/

 AVRTOOLS™


   
윗글 USB AVR-ISP 사용설명서
아래글 M128-NIC KIT 2.0의 펌웨어를 이더넷으로 굽기.
    N         제목    글쓴이 작성일 조회 추천
22 AVRISP-mkII-CL 사용방법(고급) avrtools™ 2011/07/30 (토) 2495 0
21 M328-mini V2.0 사용 설명서 avrtools™ 2011/08/29 (월) 1589 0
20 USB2serial V2.0 사용설명서 avrtools™ 2011/07/30 (토) 1487 0
19 AVR Studio에서 Jtagice-mkII로 펌웨어 굽기 leeky 2011/08/05 (금) 2243 0
18 USB2serial V1.0 사용설명서 avrtools™ 2011/07/30 (토) 1428 0
17 USBISP-mkII V2.0 사용설명서 leeky 2011/07/15 (금) 1534 0
16 USBISP-mkII V1.0 사용설명서 avrtools™ 2011/07/19 (화) 1511 0
15 AVRISP-mkII-CL 사용설명서 leeky 2011/07/15 (금) 1469 0
14 AVR JTAGICE MKII CL 설명서 avrtools™ 2009/09/25 (금) 1993 0
13 JTAGICE-mkII의 Debug WIRE 사용방법 avrtools™ 2009/10/15 (목) 1494 10
12 AVR STUDIO V4.12 SP498 설치파일 leeky 2007/11/10 (토) 2661 0
11 FT232 가상직렬포트 드라이버 leeky 2007/11/10 (토) 2178 0
10 MEGA128-MPU KIT 사용설명서 avrtools™ 2007/11/14 (수) 2273 0
9 MEGA128-NIC KIT V2.0 (인터넷 제어장치) leeky 2006/03/08 (수) 3350 2
8 AVR OSP II 사용 설명서 leeky 2007/11/10 (토) 2511 0
7 AVR 910-ISP V3.0 사용설명서 leeky 2007/11/10 (토) 2825 0
6 USB AVR-ISP 사용설명서 avrtools™ 2007/11/16 (금) 3439 0
5 AVR 8 RC-서보 뱀로봇 소스 leeky 2007/07/10 (화) 3333 0
4 M128-NIC KIT 2.0의 펌웨어를 이더넷으로 굽기. leeky 2006/04/15 (토) 2110 0
3 AVR Studio SP498 사용 설명서 leeky 2007/11/11 (일) 2813 0
2 AVR JTAGICE+AVRISP 사용설명서 leeky 2007/11/10 (토) 2639 0
1 USB-JTAGICE V2.0 사용 설명서 leeky 2007/11/10 (토) 2274 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0