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