본문 바로가기

Arduino/응용 프로젝트(1학기)

자이로 가속도 지자계 기압 10DOF 통합 센서 다루기

이번에 작업할내용은 MPU6050 + HMC5883L + MS5611  이 세개의 센서가 같이 이루어져있는 10개의 자유도를 갖는 통합 센서를 다루어볼 예정이다. 그전에 먼저 각각의 칩이 어떠한 기능을 하는지 부터 알아보자

먼저 MPU6050의 경우에는 두가지 종류가 있는데 이 통합 센서에는 두종류가 하나의 칩으로 합쳐져 들어있다. 이칩은 가속도와 각속도를 측정하는 칩으로 x,y,z축 각 3방향의 각속도와 가속도를 측정할수있어 총 6개의 자유도를 가지고 있다.

HMC5883L같은 경우에는 지자계 센서인데  3개의 방향으로 지자계의 영향을 알아차릴수 있다.

MS5611은 기압 센서로써 섭씨-45도부터 80도 사이의 범위에서 기압을 측정할수있는 센서이다.




<3방향의 가속도+각속도 측정>                      <3방향의 지자계측정>                 <특정온도범위내에서 기압측정>


지금까지 통합센서를 이루고 있는 기본적인 칩에대하여 살펴보았다. 구성하고있는 칩들을 한군데에 모아놓은 것이 이 통합센서인데 이 통합센서는 지금껏 우리가 아두이노에서 많이 사용해오던 통신방식과는 다른 특별한 통신방식을 사용한다.바로 I2C 방식으로써 5vGnd를 통하여 센서에 전력을 공급하며 scl포트와 sda포트를 사용하여 데이터를 주고 받는 방식이다. 2개의 포트 밖에 사용안하지만 여러 데이터를 주고 받을 수 있는 것은 주파수를 바꾸면서 정보를 보내는 I2C통신의 장점이자 특징이다.이런 통신방식의 차이점에 유의하여 회로구성과 코드 작성을 해야할것이다.


기본적인 배경지식은 이쯤에서 충분하다고 생각하고 이제 본격적으로 이센서를 사용해볼 시간이다.

이센서의 회로구성은 I2C 통신방식을 사용하는 센서들의 기본적인 연결방식과 동일하다.

센서의vcc 포트를 아두이노의 5v와 연결하고 센서의 GND를 아두이노의 GND와 연결시킨다.

여기까지는 일반적인 센서와의 차이점이 없는 부분이다.

I2C통신에서는 SCL과 SDA라는 포트가 등장하는 데 바로 이부분이 I2C통신의 핵심이다.

이부분을 아두이노에 연결할때에는 주의할점이있다.

arduino mega의 경우에는 SCL포트와 SDA 포트가 따로 존재하지만 ardoino uno의 경우에는 포트가 부족하여 SCL과 SDA포트가 따로 존재하지 않기때문에 다른 포트로 대체하여 사용하게 된다. 그래서  ardoino uno를 사용할때에는 SDA는 A4 포트와 연결하고 SCL의 경우에는 A5포트와 연결해 주어야하는 주의점이 있다.



이렇게 회로를 구성하고 나면 실질적인 데이터를 센서로 부터 받아야 한다. 먼저이센서에서 가속도 값과 각속도값을 먼저 받아올 것이다. 왜냐면 하나의 칩에서 나오는 데이터를 받아올수있으면 통신에 이상이없다고 생각할수있기때문에 MPU6050의 정보를 먼저 받아보기 위해서이다. 

이 코드를 아두이노 프로그램을 바로사용하면 작동하지 않을수도 있다. 왜냐하면 새로운 해더 파일이 필요하기때문이다. 따라서 이 코드를 사용하고 싶으면 다음 사이트에 들어가서 파일을 다운받아 사용해보기를 권장한다.

http://www.uctronics.com/10dof-imu-ms5611-hmc5883l-mpu6050-sensor-module-p-857.html

이 코드를 아두이노로 작동시킨다음에 정상적으로 작동한다면 이 통합센서와 아두이노의 통신이 잘이루어진다고 볼수있다. 나머지 칩에서 나오는 데이터가 잘받아지는지 확인해보고 싶다면 위 사이트에서 다운받은 파일에서 다른 칩들에 대한 코드를 작동시켜보면 된다.


이제 이 통합센서에 대한 기본적인 작동을 해보았으므로 응용을 시켜볼 때가 왔다.

이 센서는 각속도 가속도 지자계 기압 을 측정할수있는 센서이다. 따라서 이 센서가 적용될수있는 것을 생각해보면 어떠한 물체의 운동상태를 나타내볼수있다는 생각을 해볼수있다. 그러므로 이센서를 비행체에 장착했다는 가정을 해볼수있다. 쿼드콥터같은 비행체에 적용해보고 싶지만 경제적인 측면에서 조금 무리일수있으므로 쿼드콥터를 Processing 이라는 언어를 사용하여 시뮬레이션을 해볼생각이다.

이 통합센서에서 나오는 값을 아두이노를 통해 받은 다음 Processing을 통해 시뮬레이션으로 화면에 센서값에 따라 가상의 비행체가  어떠한 운동상태를 갖는지 표현해볼생각이다.

비행체를 시뮬레이션할때 사용한 프로그램은 Multiwii라는 Processing을 통해 짜여진 프로그램을 사용할것이다.

(Multiwii코드를 여기에 올리기에는 길이가 너무길고 복잡하므로 그냥 생략하고 사이트를 통해 다운로드 하는것을 추천합니다.

이에따른 아두이노 코드도 같이 제공 되어있으므로 아두이노코드를 따로 코딩할 필요도 없습니다.)

https://code.google.com/p/multiwii/downloads/detail?name=MultiWii_2_1.zip&ca


프로그램을 다운받아 작동시켜 보면 다음과 같은 결과를 화면을 통해 볼수있을것이다.

비록 직접짠 코드로 이루어진 프로그램이 아니라 제공된 프로그램을 이용하여 만들어낸 결과이지만 이통합센서를 통해 쿼드콥터를 제어할때 필요한 정보를 얻을 수있다는 사실을 알수있었다.





이번작업을 통해서 통합센서의 기본적인 구성과 새로운 통신방식에 대하여 알수있어 의미가 있었다고 생각되며 미리짜놓은 프로그램을 사용하였지만 응용분야를 찾을 수 있어 다음번에 새로운 작업을 할때 이 통합센서를 사용할수있다는 생각을 할수있어서 이 센서에 대한 새로운 가능성을 볼수있었다.