직관적인느낌

가속도,자이로 센서 동작, 사용하기_Gyro, Acceleration Sensor- 9DOF-IMU(AHRS) EBIMU-9DOFV3 (E2BOX) 본문

공학/센서

가속도,자이로 센서 동작, 사용하기_Gyro, Acceleration Sensor- 9DOF-IMU(AHRS) EBIMU-9DOFV3 (E2BOX)

범슐랭 2023. 3. 4. 09:42

AHRS EBIMU-9DOFV4

출처: E2BOX

기술정보 및 자료/EBIMU-9DOFV4


시리얼 통신 터미널 프로그램 EBTerminal






UART Protocol
DataBit: 8 Data bits
StopBit: 1 Stop bit
Baudrate: 115200 bps (default)

<실제 사용 값, 받아들이기>

 

1. roll  /  2. pitch   / 3.Yaw




























아두이노 예제
////////////////////// EBIMU FUNCTION /////////////////////////////
#define SBUF_SIZE 64 // 센서로 부터 수신된 1packet(1줄)을 저장하는 버퍼의 크기를 지정한다.
// 1packet(1줄)당 수신된는 최대 바이트수 보다 크게 설정해야합니다.
char sbuf[SBUF_SIZE];
signed int sbuf_cnt=0;

int EBimuAsciiParser(float *item, int number_of_item) // item: 수신된 데이터를 저장할 주소를 입력
{ // number_of_item: EBIMU의 1PACEKT 당 수신 항목 수를 입력
  int n,i;
  int rbytes;
  char *addr;
  int result = 0; // return 값: 리턴 값은 0또는 1. 데이터를 수신하여 item내용이 갱신되었을 경우 1을 리턴. 갱신된 내용이 없을 경우 0을 리턴합니다.

  rbytes = Serial.available();
  for(n=0;n<rbytes;n++)
  {
    sbuf[sbuf_cnt] = Serial.read();
    if(sbuf[sbuf_cnt]==0x0a)
       {
           addr = strtok(sbuf,",");
           for(i=0;i<number_of_item;i++)
           {
              item[i] = atof(addr); // atof: 문자열의 앞 부분에 부호와 정수 문자, 소수점 문자, 정수 문자로 구성한 부분을 float 형식의 값으로 계산하여 반환합니다.
만약 계산할 수 없는 문자를 발견하면 현재까지 계산한 값을 반환
              addr = strtok(NULL,","); //strtok: 문자열 자르는 함수 (string.h 헤더 파일에 선언되어 있습니다) / strtok(대상문자열, 기준문자)
           } //NULL: 문자열에는 문자열의 종료를 알리는 특수 문자 Nul이 항상 마지막에 위치한다
* 아스키 코드 십진수 0 = 16진수 0x00 = 이진수 0b00000000 = Nul(null, 널 문자) = '|0'
           result = 1;

         // Serial.print("\n\r");
         // for(i=0;i<number_of_item;i++)  {  Serial.print(item[i]);  Serial.print(" "); }
       }
     else if(sbuf[sbuf_cnt]=='*')
       {   sbuf_cnt=-1;
       }

     sbuf_cnt++;
     if(sbuf_cnt>=SBUF_SIZE) sbuf_cnt=0;
  }

  return result;
}
/////////////////////// EBIMU FUNCTION /////////////////////////////
////////////////////////////////////////////////////////////////////


void setup() {
  Serial.begin(115200);
}

void loop() {
  float euler[3];

  if(EBimuAsciiParser(euler, 3))
  {
     Serial.print("\n\r");
     Serial.print(euler[0]);   Serial.print(" ");
     Serial.print(euler[1]);   Serial.print(" ");
     Serial.print(euler[2]);   Serial.print(" ");
  }
}

728x90
반응형

'공학 > 센서' 카테고리의 다른 글

Complementary Filter for Two wheel System  (0) 2023.03.04