MPU6050 6축센서는 물체의 자세와 움직임을 계측하기 위한 센서로서 X,Y,Z 세방향 가속도측정을 위한 3축 가속도센서와 X,Y,Z세방향 3축 자이로센서 그리고 온도센서 총 7개의 센서로 구성된 센서이다. 자세와 회전을 측정하기 위한 센서에 온도센서가 포함되어 있는 것은 센서의 측정값이 온도에 영항을 받기 떄문에 이를 보정하기 위한 용도인데 일반적인 온도에서는 편차가 거의 없기 때문에 통상 온도값은 사용하지 않는다. 비슷한 용도의 9축센서도 있는데 이것은 6축센서에 지자기센서(나침반과 같은 지구자기센서) 3축을 더한 센서이다. 이 MPU6050센서칩을 기반으로 보드형태로 모듈화 해 놓은 것이 GY-521 모듈이다.
2. MPU6050 PIN배열 및 아두이노와의 연결
MPU6050의 핀배열은 위와 같고 외부기기와의 접속은 I2C방식 이다. 즉 아두이노 나노일 경우 I2C 통신용 핀이 A4,A5이므로 다음과 같이 연결해 주면 된다.
아두이노 기종들 중 나노 이외의 다른 기종의 I2C 통신용 핀은 다음과 같으므로 해당 핀에 연결해 주면 된다.
3. 라이브러리 설치
별도의 라이브러리 없이도 I2C 방식으로 전송되는 RAW데이터 값을 받을 수는 있다. 그러나 의미있는 측정값으로 사용하려면 라이브러리를 설치하여 RAW데이터를 변환해서 받아야 한다. MPU6050용 라이브러리는 종류가 많이 있으나 간편하게 아두이노IDE내의 라이브러리매니저를 이용해서 설치하는 방법을 설명한다.
스케치->라이브러리 설치하기 -> 라이브러리관리를 선택해서 라이브러리 매니저화면을 호출한 후 MPU6050를 입력해서 검색하면 여러가지 MPU6050관련 라이브러리들이 나오는데 그 중 두번째 것을 선택하여 설치하면 된다.
4. 샘플프로그램
라이브러리를 설치하고 파일 -> 예제 메뉴에서 MPU6050 관련 샘플에서 MPU6050_DMP6 샘플프로그램을 로드한다.
샘플프로그램을 UPLOAD하 Serial Monitor로 확인해 보면 다음과 같이 "시작하려면 임의의 키를 누르라"고 표시되는데 시리얼 모니터 입력창에 임의의 문자를 입력하고 엔터키를 누르면 센서작동이 시작된다.
잠시후 작업이 시작되고 다음과 같이 Calibration을 위한 Offset 측정치가 표시된다.
위 숫자를 다음과 같이 샘플프로그램 205 ~209 Line 부분을 찾아
다음과 같이 수정하여 넣어 주고 다시 upload한다.
센서모듈을 움직여 보면 다음과 같이 변화되어 측정되는 것을 시리얼모니터로 확인해 볼 수 있다.
여기에서 ypr은 Yaw, Pitch, Roll의 의미로서 물체가 어느 축을 중심으로 어느 만큼 회전되었는를 의미한다.
센서에서 측정되는 값은 x,y,z축 가속도와 자이로 센서값이지만 위와 같이 Yaw,Pitch,Roll값으로 변환하여 볼 수 있다. 만약 다른 형태로 측정값을 변환하여 보고 싶다면 샘플 프로그램 87 ~ 120 번째 Line사이의 주석처리를 조정하면 된다. 즉 샘플프로그램 초기 상태는 103번째줄 #define OUTPUT_READABLE_YAWPITCHROLL 이 선택되어 있는데 가속도값을 직접 보고 싶다면 이 103번째줄을 //로 주석처리하고 116번째 줄 //#define OUTPUT_READABLE_WORLDACCEL 문장의 //부분을 지워 선택하면 된다.
ESP32-CAM 모듈은 ESPressif Systems라는 회사에서 개발하여 인기를 얻고 있는 ESP32 기본 모듈에 아예 카메라까지 내장하여 싸고 편리하게 활용할 수 있도록 판매되는 제품이다. 즉 아두이노보다 몇 배 빠른 프로세서 + WIFI와 블루투스 + Camera를 하나의 보드에 통합하고 여기에 SD카드슬롯까지 부착된 모듈이 기존 아두이노 모듈 하나의 가격과 비슷한 가격으로 판매되는 것이다. 이를 이용하면 아주 저렴하고 간단하게 CCTV녹화기, 동영상스트리밍장치, Remote CAR 동영상 송출장치 등을 개발할 수 있게 된다.
2. ESP32-CAM 사양과 PIN맵
위와 같은 구조로 주요 사양은 다음과 같다.
The smallest 802.11b/g/n Wi-Fi BT SoC module
Low power 32-bit CPU,can also serve the application processor
Up to 160MHz clock speed, summary computing power up to 600 DMIPS
Built-in 520 KB SRAM, external 4MPSRAM
Supports UART/SPI/I2C/PWM/ADC/DAC
Support OV2640 and OV7670 cameras, built-in flash lamp
Support image WiFI upload
Support TF card
Supports multiple sleep modes
Embedded Lwip and FreeRTOS
Supports STA/AP/STA+AP operation mode
Support Smart Config/AirKiss technology
Support for serial port local and remote firmware upgrades (FOTA)
핀별 기능의 배치는 다음과 같다.
-GPIO 1번과 3번은 Serial 통신을 위해 사용한다.
-GPIO 0번은 프로그램을 업로드할 때와 작동되는 상태를 구분하여 제어하기 위해 사용한다.
-다음 핀들은 내부적으로 SD카드리더기에 연결되어 있으므로 카드리더기를 사용할 때에는 다른 용도로 사용하지 않는다.
-GPIO 2, GPIO 4, GPIO12 ~ GPIO15
3. 프로그램 업로드를 위한 준비작업
ESP32-CAM모듈에는 다양한 기능들이 구현되어 있는데 한가지 불편한 점은 USB연결 포트가 별도로 없고 시리얼통신기능으로 프로그램을 업로드 해 주어야 한다는 것이다. 이를 위해 통상 FTDI프로그래머라고 부르는 USB to Serial 컨버터를 중간에 연결하여 작업하는 방법과 USB연결이 되는 아두이노를 통해 연결하는 방법이 있다.
1) FTDI 컨버터를 이용해서 연결하는 방법
- ESP32-CAM모듈의 GPIO 0번과 GND를 연결해 준다. ( 프로그램 업로드를 끝내고 작동모드로 실행시킬때에는 연결 해제)
- ESP32-CAM GND -> FTDI GND
- ESP32-CAM UnR(RX) -> FTDI TX
- ESP32-CAM UoT(TX) -> FTDI RX
- ESP32-CAM UnR(5V) -> FTDI 5V
여기에서 주의해야 할점은 양측 5V단자 끼리 또는 양측 3.3V끼리 같은 Volt를 사용해아 한다는 것과 사용하는 FTDI 컨버터 모듈에 따라 별도의 드라이버를 설치해 주어야 하는 경우도 있다는 것이다.
2) 아두이노를 이용해서 연결하는 방법
- ESP32-CAM모듈의 GPIO 0번과 GND를 연결해 준다. ( 프로그램 업로드를 끝내고 작동모드로 실행시킬때에는 연결 해제)
- ESP32-CAM GND -> 아두이노I GND
- ESP32-CAM UnR(RX) -> 아두이노 RX
- ESP32-CAM UoT(TX) -> 아두이노 TX
- ESP32-CAM UnR(5V) -> 아두이노 5V
- 아두이노 측의 RESET핀과 GND핀을 연결해 준다.
4. 개발환경 준비와 프로그래밍
1) ESP32개발환경이 설치되어 있지 않은 경우 본 블로그 아래글을 참조하여 ESP32 개발환경을 먼저 설치한다