본문 바로가기
만들기/아두이노

MPU 6050 센서값 보정하기 ( 90% 이해)

by 훨훨날아 2021. 6. 22.

MPU 6050을 SDA와 SCL을 통해서 ESP8266에 연결한 이후 데이터를 받아보면 가속도, 온도, 그리고 자이로값이 받아진다. 하지만 이 값들은 각 센서의 raw 데이터(가공되지 않은 데이너, (전압의 변화))이기 때문에 우리가 알고있는 중력가속도(g), 섭씨온도, 각속도로 변경시켜줘야한다.

MPU 6050에서 읽어지는 raw 데이터

 

값을 변경시키기 위해서는 센서의 데이터시트를 참고해야한다.

https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf

 

다음 문서의 29페이지부터 31페이지까지 가속도센서, 온도센서, 자이로센서에 대한 레지스터 주소와 설명이 나와있다.

각센서에서 주어지는 값을 변환하는 공식에 대해서 살펴보면 

온도의 경우 340를 나누고 36.53을 더하면 된다.

자이로 센서의 경우에는 Full Scale이 어떻게 설정됐는지에 따라 다르지만 기본적으로 0으로 세팅되어 있으니 131 LBS/각도/s 를 보면된다. 센서값 131은 1초에 1도가 변할때 나오는 값이다. 그래서 출력되는 값에 131을 나눠주고 초당 전송되는 값( controller 의 refresh frequency)를 다시 나눠 줘야한다. ( 자이로데이터를 100ms 의 속도로 받는다면 10을 나눠주면된다) (int가 binary 값으로 읽히는데 convert_int16_to_str 함수가 어디서 왔는지 찾아봐야할 것 같다.)

가속도 센서의 경우에는 full scale range 가 2g 일때 1도 회전하면 16384 의 센서값이 표시되기 때문에 16384를 나눠주면 된다.

 

여기에서는 가속도센서의 full scale range 를 4g 로 바꿔서 8192로 나눠주었다.

 

 

X와 Y의 가속도는 0 으로 나오고 Z 는 1이 나온다. 온도값은 다르게 나타나서 수정이 필요할 것 같다. 자이로값은 평평한 곳에 놓고 회전 시켰을때 z 축값이 변하는 것을 확인할 수 있다.

 

반응형