달력

1

« 2025/1 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2016. 2. 8. 01:20

부품 테스트 - 센서 작품/쿼드콥터2016. 2. 8. 01:20


센서는 다음 모델을 썼습니다. 

EBIMU-9DOFV2


간단하게 출력 테스트를 해봤는데요. EBIMU-9DOFV2는 roll, pitch, yaw 데이터를 문자열로 줍니다.

센서를 아두이노와 연결하여 데이터가 나오는지 확인해 보았습니다.


    


위 영상의 코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "SoftwareSerial.h"
 
#define SIZEOFSIGN 4
#define DATANUMBER 22
#define ROLL 0
#define PITCH 1
#define YAW 2
#define STARTBITNUM 2
 
SoftwareSerial mySerial(2,3);//Rx Tx
 
int s = 0, d = 0, data_ok = 0;
int start_bits[STARTBITNUM], data_bits[DATANUMBER*2];
char data;
int i = 0;
 
void setup() {
  Serial.begin(115200);
  mySerial.begin(57600);
}
 
void loop() {
  if(mySerial.available()){
    data= mySerial.read();
    Serial.print(data);
  }
 
}
cs

 



다음으로 제대로된 값이 나오는 지 확인하기 위해서 

센서의 출력을 "SerialChart"라는 프로그램을 이용하여 그래프로 나타내어 보았습니다.

그러기 위해서는 문자열로 된 데이터를 roll, pitch, yaw 별로 숫자로 변환해 주어야 했습니다.

    


위 코드의 영상은 아래와 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "SoftwareSerial.h"
 
SoftwareSerial mySerial(2,4);//Rx Tx
 
char data[40];
int i = 0;
double  roll, pitch, yaw;
 
void printAll(char* ch)
{
  int n;
  
  for(n=0; n<i; n++){
    Serial.print(ch[n]);
  }
    Serial.println("");
}
 
void trans_ascii_to_num(char * SBuf, double * DegRoll, double * DegPitch, double * DegYaw)
{  
  int value, value2;
  
  value=FindComma(SBuf);
  //Serial.print(value);
  SBuf[value]='\0';
  *DegRoll=atof(SBuf);
        
  value++;
  value2=FindComma(&SBuf[value]);
  SBuf[value+value2]='\0';
  *DegPitch=atof(&SBuf[value]);
    
  value=value+value2+1;
  value2=FindComma(&SBuf[value]);
  SBuf[value+value2]='\0';
  *DegYaw=atof(&SBuf[value]);
 
 Serial.print(*DegRoll); Serial.print(", ");Serial.print(*DegPitch); Serial.print(", ");Serial.println(*DegYaw); 
}
 
int FindComma(char * buf)
{
   int n;
   for(n=0;n<40;n++)
    {
     if(buf[n]==','break;
    }
 
   return n;
}
 
void setup() {
  Serial.begin(115200);
  mySerial.begin(57600);
}
 
void loop() {
  
  if(mySerial.available()){
    data[i]= mySerial.read();
    i++;
   
    if(data[i-1== 0x0A)
      data[i-1= ',';
    
    if(data[i-1== '*'){
     // printAll(data);
      trans_ascii_to_num(data, &roll, &pitch, &yaw);
      i=0;
    }
  }
 
}
cs

'작품 > 쿼드콥터' 카테고리의 다른 글

조립 후 테스트  (0) 2016.02.08
하드웨어 조립  (0) 2016.02.08
부품 테스트 - 배터리  (0) 2016.02.08
부품테스트 ESC 및 BEC  (0) 2016.02.08
부품 주문  (0) 2016.02.08
:
Posted by youjin.A