2012년 6월 24일 일요일

RC(radio control) + 아두이노 2


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();
    }
}
----------------------------------------------------------------------------------------

작동 영상

댓글 없음:

댓글 쓰기