'쿼드콥터'에 해당되는 글 10건

  1. 2011.08.12 첫 가공으로 쿼드프레임을 만들어보다.
  2. 2010.12.10 ArduinoIMU #2. 보드 제작
  3. 2010.12.09 ArduinoIMU #1. 소스 수정..
  4. 2010.08.03 쿼드... 최소 비용으로 시작해보자!
  5. 2010.07.21 Micro quad - wii copter 만들기 #2 schematic & 준비물
  6. 2010.07.21 Micro quad - wii copter 만들기 - 센서 샘플링에 대한 discuss
  7. 2010.07.21 micro qaud - wii copter 를 만들기 시작.#1
  8. 2009.12.30 미크로 콥터 소스 컴파일...
  9. 2009.12.30 PWM TO PPM 소스
  10. 2009.12.30 쿼드 콥터..재료비

첫 가공으로 쿼드프레임을 만들어보다.

첫 가공으로 선택한 것은 쿼드 콥터용 프레임이었다.

일단 마캠을 이용하여 툴패스를 뽑은 후에..


G 코드를 뽑아냈다.

이 G코드를 EMC2 에 사용하기 위해서는 포스트 작업이 몇가지 필요한데..

문서편집기를 이용할 수 있다.

첫번째는 O## 로 시작하는 첫번째 줄 삭제

그리고 공구와 관련된 명령어들 삭제 T###, H### (통째로 라인을 날리면 된다)

마지막으로 우리는 A축을 사용하지 않으므로 해당 구문을 삭제하는 것이다.

이 때에는 라인 전체를 삭제하지 않고  A0. 만 삭제해준다.

전 라인에 걸쳐 단 두번 나오니 어렵지 않다.

이렇게 편집해서 emc2 로 읽어들였을 때에, 저 그림이 그대로 뜨면 성공...아니면 실패..

어쨌든 피드도 무시하고 스핀들의 RPM 도 무시하고 돌려봤다. 재질은 폴리카보네이트3T 짜리 패널이다.




밀링 진행 도중에 패널에서 발생한 칩이 엔드밀에 덕지 덕지 달라붙는다.

피드와 RPM을 조금씩 바꿔보지만 나아지지 않는다. 칩 엔드밀에 안들러붙게 하는 것...이게 노하우겠지..

어쨌든 재질이 부드러운지 손으로 쉽게 떨어지고 엔드밀에도 크게 무리가 안가는 거 같아서 그냥 진행..

그러나, 미래를 생각하려면 개선해야한다. 

현재는 다용도 2날짜리 엔드밀을 썼는데, 아무래도 아크릴 전용 외날로 바꿔주는게 좋을듯 하다.

또한, 절단면도 고르지 않다...

그러나 첫 가공물이니 만족하기로 했다.



저 프레임을 이용하여 멀티 콥터를 만들어봤다. 보드는 전에 인터보드의 주병규님께서 무료로 뿌리신 PCB 이다.

아직 한번도 써본적이 없어 이제 처음으로 써보려 한다...

어쨌든 위 나사를 쪼이는 순간이 가장 보람찬 순간이다.

빈틈없이 짜맞춤되어 딱 들어맞을 때의 그 기분...



뚝딱 뚝딱 완성했다.  세팅이 남아있는데.. 어떻게 하더라??
 

ArduinoIMU #2. 보드 제작

Arduino Pro mini 호환 보드와 ArduinoIMU 보드를 만능 보드에 붙인 모습


좌측부터 수신기, 아두이노 프로 미니 호환 보드, 아두이노IMU 보드가 차례로 붙어 있다.

하단엔 변속기 4채널을 위한 단자가 붙어 있다.

쿼드콥터 본체에는 오링을 가지고 부착할 예정이다 (진동 감소...)

ArduinoIMU #1. 소스 수정..

0. 준비물
FTDI 케이블(Sparkfun 에서 파는 ftdi 쪽보드도 괜찮다 5V )
Arduino 프로그램(arduino.cc 에서 다운받을 수 있다)

1. 체크 리스트


(1) RC 파트를 해당 수신기에 맞게끔 수정한다.
내가 만든 PWM2PPM 보드는 후타바 방식의 출력을 지원한다. 그리고 5채널이다. 
- 해당 부분 찾아서 코드 수정 필요

#define MAX_CHANNELS    5       // Number of radio channels to read (7 is the number if you use the PPM encoder from store.diydrones.com)

#define MIN_THROTTLE 1037       // Throttle pulse width at minimun...
#define CHANN_CENTER 1500

#define SPEKTRUM 0  // Spektrum radio

(2) 지자기 센서 3.3v 로 선택되어 있는지 확인(쪽보드 윗면에 납땜으로 설정한다)
ARDUINOIMU의 경우 3.3V 로 선택되어 있다.

(3) 쓰로틀 최소값을 1100 이상으로 잡아야 한다.
- 내 조종기는 쓰로틀의 최소값이 1130 정도이다. 그러나 원래 소스의 최소값은 1030 정도이다.
- 해당 부분 찾아서 코드 수정 필요.

#define MIN_THROTTLE 1100       // Throttle pulse width at minimun...


(4) 센서 중립값 설정
먼저 adc값을 읽어오기 위하여 해당 부분에 코드 추가
    // Telemetry data...
    
    Serial.print(AN[0]);
    Serial.print(",");
    Serial.print(AN[1]);
    Serial.print(",");
    Serial.print(AN[2]);
    Serial.print(",");
    Serial.print(AN[3]);
    Serial.print(",");
    Serial.print(AN[4]);
    Serial.print(",");
    Serial.print(AN[5]);
    Serial.print(",");
    aux = ToDeg(roll)*10;
    Serial.print(aux);
    Serial.print(",");
    aux = (ToDeg(pitch))*10;
    Serial.print(aux);
    Serial.print(",");
    aux = ToDeg(yaw)*10;
    Serial.print(aux);

시리얼 통신을 통하여 AN[] 값을 모두 실시간으로  보면서 기록,
보드를 X,Y방향으로 90도 세워서 Z방향 가속도도 측정하여 다음과 같은 값을 구하였다 
원래 값이 501 -> 510 으로 바뀐 것으로 매우 큰 차이이다.
보드를 90도로 세우기 전엔 acc-z 값이 대략 618 정도가 출력되어,
센서에서 출력되는 중력 가속도 1G 의 값이 618-510 = 108 정도에 해당함을 알 수 있다.

수정 후엔 디버깅을 위해 첨가했던 코드를 다시 삭제한다.(처리 속도를 향상시키기 위해..)

-> 해당 부분 찾아서 코드 수정 필요

// The IMU should be correctly adjusted : Gyro Gains and also initial IMU offsets:
// We have to take this values with the IMU flat (0º roll, 0ºpitch)
#define acc_offset_x 508.3 
#define acc_offset_y 507
#define acc_offset_z 510       // We need to rotate the IMU exactly 90º to take this value  
#define gyro_offset_roll 380.5  
#define gyro_offset_pitch 372.2
#define gyro_offset_yaw 373.3

로 수정..

(5) ADC.pde 파일 내에 다음 부분 수정
void Read_adc_raw(void)
{
  int i;
//  int temp1;
//  int temp2;
  short temp1;
  short temp2;

2. X-COPTER 를 위한 믹싱 설정

원래의 믹싱은 쿼드 용이므로 X-COPTER 방식을 위해서는 모터 별 믹싱을 다시 한다.
이 때 주석 부분이 쿼드용 소스이며, 빨갛게 된 부분이 믹싱을 구현한 코드이다.
- 해당 부분 찾아서 코드 수정 필요(두 부분이다)

     if (ch3<MIN_THROTTLE)
        ch3 = MIN_THROTTLE;
      comando_rx_roll = 0;     // Stabilize to roll=0, pitch=0, yaw not important here
      comando_rx_pitch = 0;
      Attitude_control();
      // Quadcopter mix
//      Servo_Timer2_set(0,ch3 - control_roll - control_yaw);    // Right motor
//      Servo_Timer2_set(1,ch3 + control_roll - control_yaw);    // Left motor
//      Servo_Timer2_set(2,ch3 + control_pitch + control_yaw);   // Front motor
//      Servo_Timer2_set(3,ch3 - control_pitch + control_yaw);   // Back motor

      Servo_Timer2_set(0,ch3 - control_roll/2 + control_pitch/2 - control_yaw);    // Right FRONT motor
      Servo_Timer2_set(1,ch3 + control_roll/2 + control_pitch/2 - control_yaw);    // Left FRONT motor
      Servo_Timer2_set(2,ch3 - control_roll/2 - control_pitch/2 + control_yaw);   // RIGHT REAR motor
      Servo_Timer2_set(3,ch3 + control_roll/2 - control_pitch/2 + control_yaw);   // LEFT REAR motor

      }  


    // Quadcopter mix
    if (ch3 > (MIN_THROTTLE+40))  // Minimun throttle to start control
      {
//      Servo_Timer2_set(0,ch3 - control_roll - control_yaw);    // Right motor
//      Servo_Timer2_set(1,ch3 + control_roll - control_yaw);    // Left motor
//      Servo_Timer2_set(2,ch3 + control_pitch + control_yaw);   // Front motor
//      Servo_Timer2_set(3,ch3 - control_pitch + control_yaw);   // Back motor

      Servo_Timer2_set(0,ch3 - control_roll/2 + control_pitch/2 - control_yaw);    // Right FRONT motor
      Servo_Timer2_set(1,ch3 + control_roll/2 + control_pitch/2 - control_yaw);    // Left FRONT motor
      Servo_Timer2_set(2,ch3 - control_roll/2 - control_pitch/2 + control_yaw);   // RIGHT REAR motor
      Servo_Timer2_set(3,ch3 + control_roll/2 - control_pitch/2 + control_yaw);   // LEFT REAR motor

3. LED 상태

파란색: GPS on/off
빨간색 ON, 노란색 OFF : automatic flight 상태
빨간색 ON, 노란색 ON : position hold 상태
빨간색 OFF,노란색 ON : normal mode 



쿼드... 최소 비용으로 시작해보자!

쿼드 콥터는 돈이 많이 드는 취미임이 분명합니다.

그럼에도 불구하고 잘 모르고서 이것저것 사다보면 비용이 갑절로 드는 경우가 많습니다.

처음 시작하시는 분에게 중복 투자로 인한 비용적인 손해를 막기 위해서 글을 남겨봅니다.

----------------------------------------------------------------------------------------

메인보드는 diydrone 에서 판매하는 arduinoIMU 가 싸더군요 99달러.
게다가 아두이노IMU는 일반 변속기를 사용합니다. 
6축 센서+atmega328이니 기본은 합니다.

 변속기+모터+배터리 는 하비킹에서 지르세요.
유명한 케찹 모터 11.93달러 x4

하비킹 18~20A 변속기 6.77달러 x4

배터리 2200mA 3셀 25C 9.9달러

프롭은 인터보드에서 파는 정,역피치 2200원 x 4
 (여벌로 몇개 더 사세요. 프롭 금방 해먹습니다 ㅠ.ㅜ)

알루미늄 프레임은, 이곳 카페 돌도르사님에게 구매가능 개당 5천원x4

조종기+수신기는 옵틱6 + 일렉트론6 정도면 충분하며 (PPM 시그널을 뽑을 수 있도록 개조가 용이)

2.4G 조종기를 쓰고 싶다면 비싸지만 쿼드하는 사람은 다 쓴다는 스펙트럼이겠죠?
안테나가 짧아서, 편리합니다. 뭐 아싼도 숏안테나가 있군요.
만약 조종기 + 수신기를 2.4G를 사용하기 위해선 PWM2PPM 보드가 추가로 필요합니다.

다이드론에서 판매하는 스펙트럼 수신기용 보드입니다.(사이즈가 일치해서 컴팩트합니다만 비싸요.) 24.9달러
혹은 인터보드에서 판매하는 것도 있습니다. 29700원

하비킹에서 구매한 배터리용 커넥터가 필요하며 XT60 이라고 합니다. 없으면 아쉬움 5개 한팩 3.49달러

열에 강한 실리콘 와이어도 필요합니다.

아두이노 프로그램 다운로드용 FTDI 케이블 등이 필요합니다.

혹슨 스파크펀에서 파는 FTDI 용 쪽보드도 좋습니다(동일한 기능입니다). 3불 정도 싸지만 배송비가.....

Micro quad - wii copter 만들기 #2 schematic & 준비물

사용자 삽입 이미지

구상한 회로도이다.

필요한 준비물

아두이노 프로 미니 보드  - 19불 -> 23000원
만능 pcb(18 x 18)  - 1000원
모션 위 플러스 - 15000원
리폴 1셀 138mA - 1.3불 - 1600원
기어드 브러쉬 모터(GPS-6) x4 - 18.2불 - 22000원
프롭 GWS4025 x 10 - 2.6불 - 3100원
스펙트럼 위성 수신기 - 36불 - 43200원
기타 코넥터 및 케이블 - 10불 - 12000원

도합 :  12만9백원(수신기를 재활용하면 77,700원)

기타 필요한 기자재
FTDI 케이블 - 15불 : 18000원
스펙트럼 조종기(dx7 이상) - 200불 - 24만원


Micro quad - wii copter 만들기 - 센서 샘플링에 대한 discuss

두 가지 물음을 해보자.

1. 60Hz 의 대역폭을 가지는 센서의 경우에, mcu 에서 60Hz로 읽어주면 충분할 것인가?

2. 100Hz 의 주파수에 해당하는 PWM 으로 구동하는 모터의 경우에 

100Hz 이상의 대역폭을 가진 센서는 무용지물인가?

첫번째 답은 틀렸다..가 확실하다.  최대한 높은 sps(sample per second) 의 adc로 샘플링 해주고 그 데이터를 50Hz LPF 로 변환하여 읽어준 값이 정확한 센서값이 될 것이다. 따라서 비록 자이로의 밴드폭이 60Hz 에 해당한다고 하더라도 sps 는 크면 클 수록 좋다.

두번째 답은, 맞다라고 생각하지만 정확하지는 않다. 센서값중 100hz 이상의 값은 무용지물임은 틀림 없다.  따라서 이때에도 최대한 높은 sps 를 가진 adc로 샘플링을 해주고 100Hz 의 LPF 를 처리해준 값으로 모터를 컨트롤하는게 타당하다고 본다.

micro qaud - wii copter 를 만들기 시작.#1

동기
tri- wii copter 에 자극을 받아, micro quad-wii copter 를 만들기 시작했다.

전체 디자인.
1. ARDUINO PRO MINI 보드를 메인보드로 삼고, 가속도 센서는 사용하지 않으며,
-> WII MOTION PLUS 에 내장된 3축 자이로 센서를 쓰기로 결정(15천원)
비록 DELAY 가 있지만, TWI 인터페이스를 그대로 사용하기로 결정

2. 3개의 브러쉬리스 모터 + 1서보 모터 대신 -> 4개의 브러쉬 모터를 사용 (간단하게 구현
 -> 이를 위하여 4개의 PWM 이 필요하나, ARDUINO 에서 제공하는 내장 함수 analogWrite() 펑션을 사용하기로 하였다.이를 위해서는 제약이 있는데 매뉴얼에 따르면 490Hz 정도 구동이며, 3,5,6,9,10,11 핀 중 하나를 써야한다.

3. 4개의 핀으로 조종기 신호를 받아들이는 대신, 스펙트럼 수신기의 위성 수신기를 사용하기로 함 
-> 장점은 3.3V 구동이 가능하며 직렬 통신(115200bps) 를 사용하므로 빠른 통신이 가능
-> 경량화 가능하며 가지고 있는 수신기 활용할 수 있음
-> 이를 위해 MikroCopter 의 소스를 참조하기로 하였다.

4.전원은 리폴 1셀로 구현.
-> 스위치는 IRMLML2502 mosfet n-ch 으로 결정(Vgs 3.3V로 스위칭 가능한 장점, 3A, 20V)
-> 메인보드의 경우 atmega328P은  1.8~5.5V에서 ~20MHz 까지 지원
-> 위 모션 플러스의 경우에도 3.3V 구동 가능
-> 수신기의 전원 또한 3.3V
-> 이를 위하여 ultra LDO 가 필요하였다. SPX3819 로 결정(340mV dropout at full load)
리폴1셀의 전압을 4.2V ~ 3.7V 까지만 사용하기로 하였을 때에 3.3V 출력 가능

5. 모터는 하비시티에서 판매중인 Micro Power system w/ Gearbox GPS-6 으로 결정
thrust 가 16g 이므로 x4 => 64g. 
조종을 위해 기체의 무게를 32g 이하로 맞춰야 한다.
(모터2g+프롭(-gws4025)1.3g) x4 = 13.2g
메인보드+wii motion plus = 6.8g
base plate + 수신기 = 15.2g
배터리 = 3.5g
기타 잡자재 = 5g

총 38.6g 으로 6.6g 오버하지만, 경량화 등으로 해결 가능해 보임



미크로 콥터 소스 컴파일...



Q. avrstudio 에서 첫 컴파일이 안됩니다.
A.
Project 메뉴 -> configuration Options -> General 탭
Use external Makefile 을 체크한 후에, 같은 폴더 내의 Makefile 을 선택
* 참고로, Makefile 에서 hex 파일의 출력을 소스 폴더 내로 지정하였기에,
더이상 hex가 dep 폴더 밑으로 가지 않는다.(에러처럼 나타나지만 에러아님)

PWM TO PPM 소스

소스입니다. 
단 pwm 출력이 연속적인 방식의 수신기만을 지원합니다.
예를 들어, 옵틱 수신기, 코로나 수신기 등입니다.
스펙트럼은 지원하지 않습니다.

#include <avr/io.h>

#define sbi(PORT,BIT)  PORT|=_BV(BIT)  //set bit
#define cbi(PORT,BIT)  PORT&=~_BV(BIT)  //clear bit

// use 20MHz clock for high resolution..

void send_100us()
{
 register unsigned char i;
 for(i=0;i<11;i++)
 {
  asm volatile("PUSH R0");
  asm volatile("POP R0");
  asm volatile("PUSH R0");
  asm volatile("POP R0");
 }
}

int main()
{
 unsigned char pd;
 unsigned char pb;

 // out port : PB4
 // input port : PB,PD except PD4
 DDRB =0x10;
 DDRD = 0x00;

// asm volatile("cli");
// asm volatile("sei");
 PORTB = 0xef; // for internal pull up
 PORTD = 0Xff;
 pb = PINB;
 pd = PIND;
 while(1) {
  if(pd != PIND) {
   sbi(PORTB,4);
   send_100us();
   cbi(PORTB,4);
   pd = PIND;
  } else if(pb != PINB) {
   sbi(PORTB,4);
   send_100us();
   cbi(PORTB,4);
   pb = PINB;
  }
 }
 return 1;
}

쿼드 콥터..재료비

사용자 삽입 이미지
prev 1 next