개발자인가,디자이너인가,다능인인가

Arduino 101(Genuino 101) 제누이노 기울기 활용하기 본문

- 프로그래밍/Arduino

Arduino 101(Genuino 101) 제누이노 기울기 활용하기

PRO HYEON 2016. 9. 8. 05:14

2016 09 08


이번 공모전을 준비하면서, 아두이노 쪽을 다루게 됬는데, 아두이노 우노(Uno)에 센서를 부착하는 것 보다

인텔에서 개발한 제누이노(Genuino - Arduino 101) 제품에는 블루투스, 기울기, 가속도가 포함이 되어 있습니다.

말로만 설명하는 것 보다는 두개를 비교해서 보는게 확실하겠죠!



아두이노의 본 보드와 설계방식이 거의 똑같습니다. 그런데 기능은 다르죠!


가속도계

자이로스코프

블루투스


위 3가지 기능이 내장되어 있습니다.


아두이노와 똑같은 설계로 만들어졌기 때문에 본래의 아두이노 코드도 동작합니다.

그래서 저희 팀은 프로토타입을 만들기 위해 Intel 의 Genuino 101 을 사용했습니다.


이 중에서 기울기를 이용해서 블루투스로 신호를 보내는 과정을 개발했는데, 자료가 많이 없어서 힘들더군요.

그래서 기울기를 이용하는 것 부터 시작해서 나중에 블루투스로 신호를 어떻게 보내고 받는지 까지의 과정이 한 3~4개 글에 담길 예정입니다.


한번에 다 작성하고 싶은 마음이 크지만, 힘드네요. 그래도 꼭 글은 완성짓겠습니다.


일단 말씀드리면, Intel 의 Curie 칩이 탑재되었기 때문에, 기본 아두이노의 코드는 전부 지원하지만

Intel 의 블루투스나 기울기 가속도계를 사용하려면 Intel 에서 직접 작성한 예제코드를 사용해야 합니다.

기존의 아두이노 코드는 센서가 연결되어 있을 경우 사용할 수 있구요.


일단 제누이노가 준비되었다면, 

https://www.youtube.com/watch?v=mT2l2Y3wJhc


이쪽의 동영상에서 2:40~4:08을 참고하셔서 아두이노 프로그램의 설정을 바꿔주셔야 합니다.



일단, 시연 영상입니다.

보시면서 값이 어떻게 바뀌는지 참고하시면 좋을 듯 합니다.


아두이노 코드는 접어서 올려놓겠습니다.



몇가지 코드부분을 집고 넘어가겠습니다.

아무래도, 코드를 이해하면 응용하는데 더욱 쉬우니깐요.


일단 setup 부분입니다.


  CurieIMU.setAccelerometerRange(2);


이 부분은 가속도계의 데이터 범위를 지정하는 코드입니다.

CurielMU는 "CurieIMU.h" 헤더파일 안에 있는 데이터입니다.


안의 숫자로 범위를 지정하는데, 기본값으로 사용하셔서 데이터가 어떻게 뜨는지 살펴보시면 됩니다.

안의 숫자를 크게하면 크게할수록 범위가 점점 줄어듭니다.


그리고 loop 부분으로 넘어와보겠습니다.


  int axRaw, ayRaw, azRaw;

  float ax, ay, az;


이 부분은 가속도계에서 추출되는 데이터들을 저장할 X,Y,Z 좌표입니다.

Raw 가 붙은 변수는 원본의 데이터인데 이 정보들은 수치가 너무커서

float 형식으로 소수점을 만들어 가공하기 쉽게 바꿀겁니다.


  CurieIMU.readAccelerometer(axRaw, ayRaw, azRaw);



이 부분이 가속도계의 데이터를 읽습니다.

그래서 아까 선언해놨던 int 형 변수에 넣죠.


  ax = convertRawAcceleration(axRaw);

  ay = convertRawAcceleration(ayRaw);

  az = convertRawAcceleration(azRaw);


그래서 이제 활용할 수 있도록 데이터들을 변환시킵니다.


float a = (aRaw * 2.0) / 32768.0;


convertRawAcceleration 함수는 간단합니다.

범위만큼 곱해주고, 32768로 나눠줘서 데이터들을 소수점단위로 만들어버립니다.


이렇게 변환이 되고 나면,


  Serial.print("a:\t");

  Serial.print(ax);

  Serial.print("\t");

  Serial.print(ay);

  Serial.print("\t");

  Serial.print(az);

  Serial.println();


사용자가 보기쉽게 Serial창에 데이터들을 나란히 찍어줍니다.




이런식으로 말이죠


이제 제누이노 보드를 직접 움직여보면서 사용할 데이터들을 추출해내


if문으로 범위값을 지정해서 특정 Event 를 날려주시면 됩니다.


이번 강의는 여기까지 입니다.



제가 추후에 작성할 글들의 주제를 설명해드리자면,


다음 주제는 '특정 조건(90도이상 기울어졌을 때)이 됬을 경우 부저를 울리기'


이 주제를 응용해 '블루투스 통신을 통해 스마트폰으로 데이터(1) 날리기'


이런식으로 응용해볼 생각입니다.


안드로이드 앱 부분이 만만치가 않아서 일단은 블루투스 부분은 시간이 조금 걸릴 듯 합니다.


그래도 많은 분들이 제누이노를 사용하셨으면 좋겠네요.


우노보다는 확실히 좋거든요 :)


그럼 글을 이만 마치도록 하겠습니다.

Comments