만들어보고 싶은 물건이(?) 있어서 자이로 센서를 구매했다. MPU6050(GY-521)을 구매! 이건 뭐 구글에 검색하면 판매처 많이 나오니까 가장 저렴한 것을 구매하면 된다. MPU6050은 자이로 + 가속도 센서로 사람들이 아두이노로 많이 제어하는 것 같은데 난 개인적으로 아두이노를 별로 좋아하지 않아서(이유는 여러 가지가 있지만... 패스) 현재 사용 중인 ESP로 제어해보도록 하겠다!
이론적인 내용이 궁금하다면 아래 위키백과를 참조하세요~~
https://ko.wikipedia.org/wiki/%EC%9E%90%EC%9D%B4%EB%A1%9C%EC%8A%A4%EC%BD%94%ED%94%84
우선 MPU6050의 데이터 시트 먼저 볼까? 아래 링크를 클릭하면 다운로드할 수 있다.
https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf
아래 링크는 센서의 register에 관한 내용이 정리된 register map 문서
https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf
블록 다이어 그램으로 센서 전체를 파악해보자.
블록 다이어그램 왼쪽을 보면 MPU6050은 총 3가지 센서 기능을 하는 것을 알 수 있다. 첫 번째로 Accelometer, 두 번째로 Gyroscope, 마지막 세 번째로 Temperature를 측정한다. 측정된 3가지 센서 값을 I2C 또는 SPI 통신으로 외부 디바이스(MCU, MPU 등)에 전달하며, 외부 디바이스에서 센서의 레지스터를 설정해 제어할 수 있다.
Temperture에 대한 센서 스펙은 아래와 같다.
온도 측정 범위는 -40~+85 ℃, 온도센서의 값을 degree C로 변경하는 공식은 아래와 같다. 레지스터 Map에서 확인할 수 있다.
자이로 센서에 온도 측정 기능이 있는 이유는 온도 변화에 따라 Accel, Gyro 센서 값에 영향을 주기 때문에 온도 보정이 필요하다고 하는데 엄청나게 정밀한 제어를 위한 것이 아니라면 반드시 필요한 기능은 아닌 것 같지만, 자이로 센서와 온도센서를 같이 써야 하는 경우라면 비용절감과 시스템 간소화 측면에서 좋은 것 같다!
다음으로 Accelometer에 대한 센서 스펙을 살펴보도록 하겠다. 살펴보기 전 가속도에 대한 이해와 단위에 대한 이해가 필요하다. 따로 포스팅하겠음!
단위 환산에 대해서만 간단히 알아보면 가속도의 단위는 ㎨이고, 여기서 나오는 g는 중력가속도를 말한다. 1g는 9.80665㎨이고, 1㎨은 0.101972g이다.
위 데이터 시트를 보고 센서가 출력하는 값을 어떻게 활용해야 할지 알 수 있다. 우선 Full-scale에 대해 설명을 하면서 이어나가도록 하겠다.
센서 정밀도는 ADC resolution / Full-scale이다. MPU6050의 ADC resolution은 16bit로 10진수로 환산하면 65,536이다. Full-scale은 ±2로 설정한 경우를 예를 들어 설명하도록 하겠다.
Sensitivity = ADC resolution / Full-scale = 65,536 / 4 = 16,384이다. 즉 센서가 측정한 중력가속도가 1g 이면 출력되는 센서 값은 16,384 bit(LSB)라는 뜻이다.
반대로 계산해보면, Full-scale / ADC resolution = 4 / 65,536 = 0.00006103515625이다. 즉 센서가 출력하는 값의 LSB 1은 0.061mg라는 뜻이다.
여기서 Full-scale이 왜 4인가라는 의문?을 가질 수도 있겠지..? 흠.. 왜 4냐면 -2부터 +2까지의 범위가 4니까...
이 정도만 알면 센서의 가속도 값을 활용하는데 문제가 없을 것 같다!
다음으로 자이로 센서 값에 대해 알아보도록 하자. Gyro 센서의 데이터 시트를 살펴보자. 자이로 센서의 단위는 ˚/s이다. 초당 각도 변화량을 출력한다. 그럼 위 가속도 센서 값처럼 계산을 한번 해볼까?
Gyro센서의 Full-scale은 FS_SEL 레지스터에서 설정한다. FS_SEL=0인 경우를 예를 들어 계산해보자.
ADC resolution은 동일하게 16bit이다. Full-scale은 -250~+250이기 때문에 16bit를 500으로 나눈다.
Sensitivity = ADC resolution / Full-scale = 65,536 / 500 = 131.072이다. 즉 1˚/sec는 131.072가 된다는 의미다.
예를 들어 센서의 출력 값이 12525이라면 각속도는 아래와 같이 구할 수 있다.
12525/131.072 = 95.56˚/sec, 1초 동안 약 95.56˚ 움직이는 각 속도를 가졌다는 의미고, 센서 출력 값을 각도로 변환하는 공식은 센서 출력 값 / Sensitivity.
지금까지 MPU6050 센서의 데이터 시트를 살펴보면서 MPU6050에 어떤 기능이 있는지 살펴봤고 센서의 출력 값을 어떻게 활용해야 하는지 알아보았다. 그럼 이제 ESP를 이용해서 직접 제어해보도록 하겠다!
'Hardware&Firmware > Sensor(센서)' 카테고리의 다른 글
이미지 센서, OV5640 데이터 시트 리딩 -2 (0) | 2021.10.27 |
---|---|
이미지 센서, OV5640 데이터 시트 리딩 -1 (0) | 2021.10.25 |