어릴때부터 해보고 싶던
그러나 워낙 고가이고
지금은 주변에서 하는 사람을 찾을 수가 없어
배우기가 쉽지 않은 취미인 모형비행기를
드디어 제작하고 날려 봤다
이번에 제작한 비행기는
보라매모형에서 판매하는 콘돌 전공글라이더다
부품은 
5030프롭, CD룸모터 (3680KV) 브러시리스
10A브러시리스용변속기, 서보모터 2개, 
7.4V 800mAh 리튬폴리머 배터리

epp소재의 날개와 본체

동봉된 설명서로 순간접착제와 경화제를 이용하여
조립한다

 

서보모터, 서보혼, 링케이지,튜브, 링케이지 어저스트를
이용하여 뒷날개 러더와 엘리베이터 방향을 연결

 

수신기를 연결한다
변속기에서 나온 케이블에는 스로틀체널에
러더는 에일러론체널에 연결한다(에일러론이 없는 러더 비행기)
엘리베이터 서보는 엘리베이터체널에 연결

 

변속기에 입력되는 배터리는 비행기 윗부분에 넣는다

 

앞날개를 고무줄로 고정한다
착륙시 충돌에 의해 파손이 잘되므로 탄성이 있는 고무줄로 
고정하면 날개 충돌에 의한 본체로의 파손이 줄어든다

 

완성된 모습(몇번 비행하다 충돌해서 앞부분이 많이 보수됨)
겉모습은 참 허접해보인다(디자인과 색상이 정말이지...T.T)
그러나 겉모습이 전부가 아니다
나같은 초보가 운행하기에 아주좋은 비행성을 갖추고 있다
매우 안정적인 비행이 가능하다

'RC 비행기' 카테고리의 다른 글

잘나라 epp비행기  (0) 2012.12.05
쿼드 콥터  (0) 2012.07.06
Foam Walkalong Gliders  (0) 2012.07.06
핸드런치 글라이더  (0) 2012.07.06
rc 무스탕 비행기 모터 교체  (0) 2012.07.06

RC(radio control) + 아두이노 3 

프로그램 버전 : Arduino - 1.0

저번글에서 RC의 신호를 아두이노에서 받아 보고
신호를 처리해서 모터를 작동시켰다.
이번에는 간단한 자동차를 만들어
실제로  RC 송수신기로 조정하도록 하겠다.


사실 RC카를 어렵게 아두이로로 연결하고 스케치하여 제어할 필요는 없다.
수신기에 모터와 변속기, 각각의 서보 모터를 연결하면
아주 간단하게 RC자동차를 제작 할수 있다.
따라서 RC자동차를 만드는 것이라면 이글을 패스하고
RC사이트를 검색하는 것이....


조립한 자동차는 모터2개와 모터 드라이버를 이용하였고
무게와 크기를 줄이기 위해 아두이노 프로미니와
RC수신기를 이용하여 조립하였다.
차체는 매우 간단하다.






서보모터를 이용하지 않고 좌우 모터의 속도 차이로 방향 조정토록 하고
RC송신기(조정기)의 2개의 채널(스로틀과 에일러론) 신호로 전후좌우를 조정할 수 있도록 스케치 하였다.

스케치 소스
------------------------------------------------------------------
/*rc송신기(조정기)의 신호를 받아 자동차 제어*/
int th,al;       //송신기로 부터 오는 신호를 저장할 변수
int ch1 = 6;    //수신기와 연결된 핀
int ch2 = 7;    //수신기와 연결된 핀
void setup(){
  pinMode(ch1,INPUT);   //송신기에서 신호를 보내면 수신기에서 신호를 받고 수신기에서 아두이노로 신호 입력
  pinMode(ch2,INPUT);   //ch1을 수신기의 스로틀 신호, ch2를 에일러론 신호로 연결함.
}

void loop(){
  th = pulseIn(ch1,HIGH);  //ch1의 펄스폭 저장
  th = constrain(map(th,1100,1900,-255,255),-255,255);   //ch1의 펄스폭1100~1900을 -255~255로 매핑,
                                        //ch1이 스로틀스틱이 중앙일때는 0 위로는 255, 아래로 -255값을 갖도록 함.
  al = pulseIn(ch2,HIGH);
  al = constrain(map(al,1100,1900,-255,255),-255,255);  //ch2의 펄스폭1100~1900을 -255~255로 매핑,
                                        //ch2이 에일러론스틱이 중앙일때는 0 좌로는 255, 우로는 -255값을 갖도록 함.


//모터 드라이브에 연결된 아두이노 핀은 전진시 좌모터 8번, 우모터10번핀
//후진시 좌모터 9번, 우모터 11번

  if(th>0){                      //스로틀 스틱이 위로 움직임 -> 전진
    if(al>0){analogWrite(8,th-al);analogWrite(10,th);} 
                                   //스로틀 스틱이 위로 동시에 에일러론이 좌로 ->좌회전
    if(al<0){al=abs(al);analogWrite(8,th);analogWrite(10,th-al);}     //abs()는 절대값을 취함.
                                   //스로틀 스틱이 위로 동시에 에일러론이 우로 ->우회전
  }
  if(th<0){th=abs(th);               //스로틀 스틱이 아래로 움직임 -> 후진
    if(al>0){analogWrite(9,th-al);analogWrite(11,th);}
                                          //스로틀 스틱이 아래로 동시에 에일러론이 좌로 ->좌후진
    if(al<0){al=abs(al);analogWrite(9,th);analogWrite(11,th-al);}
                                          //스로틀 스틱이 아래로 동시에 에일러론이 우로 ->우후진
  }
}
-------------------------------------------------------------------------------

참고로 RC조정기의 우측 스틱을
위아래 조정을 스로틀
좌우 조정을 에일러론이라 한다.

작동 영상

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

 

작동 영상

 

+ Recent posts