본문 바로가기
아두이노_프로세싱/아두이노

RC(radio control) + 아두이노 2

by 돌돌쌤 2012. 6. 26.

RC(radio control) + 아두이노 2
 

 

프로그램 버전 : Arduino - 1.0
 

 

사용된 물품
 
스펙트럼 송신기, 스펙트럼호환 오렌지수신기
 

 

이전글에서 아두이노와 RC송수신기를 연결하여
 
신호를 받는 것에 대해 언급하였고
 
이번에는 그 신호를 받아 모터를 구동시켜 보자
 

 

1번 채널에 의해서는 DC모터를 제어하고(모터 드라이브 회로가 필요)
 
2번 채널에 의해서는 서보모터를 제어하도록
 
회로를 구성하고
 
소스를 스케치하면
 
---------------------------------------------------
 
/* rc 송수신기를 통해 신호를 받아 모터와 서보모터 작동 */
 
int rm1,rm2;
int motorPin = 6;   // 모터 연결( 모터드라이버 필요)
int servoPin = 7;   // 서보모터 연결
int ch1 = 11;   //rc 수신기와 연결
int ch2 = 10;
int refresh = 20;  // 서보모터에 신호를 20ms주기로 보내기위함.
unsigned long lastTime = 0;
 
void setup(){
  pinMode(servoPin, OUTPUT);
  pinMode(ch1,INPUT);
  pinMode(ch2,INPUT);
}
 
void loop(){
    rm1 = pulseIn(ch1,HIGH);
    rm1 = map(rm1,1100,2000,0,250);
 
        //1번 채널에서 보낸 신호를 모터를 pwm으로 출력하기 위해 0~250으로 범위 제한.
    rm2 = pulseIn(ch2,HIGH);
    rm2 = map(rm2,1100,2000,600,2400);
 
        //2번 채널의 신호는 서보모터를 제어하므로 서보모터의 회전값 600~2400으로 제한.(서보모터작동글 확인)
 
 
    if(millis()-lastTime>=refresh){   //서보모터에 20ms주기로 신호를 주기 위함.
 
      analogWrite(motorPin,rm1);
      digitalWrite(servoPin,1);
      delayMicroseconds(rm2);    // 서보모터에 HIGH신호를 600~2400마이크로초 폭으로 보냄
      digitalWrite(servoPin,0);
      lastTime = millis();
    }
}
 
----------------------------------------------------------------------------------------
 

 

작동 영상