MPU6050가 된 IC 인 3 축 가속도 센서와 결합 된 3 축 자이로 스코프를 하나 개의 단위로. 또한 복잡한 작업을 수행하기 위해 온도 센서와 DCM이 있습니다. MPU6050은 일반적으로 드론 및 자체 균형 로봇과 같은 기타 원격 로봇을 구축하는 데 사용됩니다. 이 프로젝트에서 우리는 MPU6050을 사용하는 방법에 대해 알아볼 것 입니다. 경사계 또는 수준기입니다. 경사계는 표면이 완벽하게 수평을 이루는 지 확인하는 데 사용된다는 것을 알고 있듯이 스프릿 버블 또는 디지털 미터로 사용할 수 있습니다. 이 프로젝트에서는 Android 애플리케이션을 사용하여 모니터링 할 수 있는 디지털 경사계 를 구축 할 것입니다.. 휴대폰과 같은 원격 디스플레이를 사용하는 이유는 하드웨어를 보지 않고도 MPU6050의 값을 모니터링 할 수 있기 때문입니다. 이는 MPU6050을 드론이나 기타 접근 할 수없는 위치에 배치 할 때 매우 편리합니다.
필요한 재료:
- Arduino Pro-mini (5V)
- MPU6050 자이로 센서
- HC-05 또는 HC-06 블루투스 모듈
- FTDI 보드
- 브레드 보드
- 전선 연결
- 스마트 폰
회로도:
이 Arduino Tilt Sensor 프로젝트 의 전체 회로 다이어그램 은 다음과 같습니다. 세 가지 구성 요소 만 있으며 브레드 보드 위에 쉽게 구축 할 수 있습니다.
I2C의 도움 MPU6050 연통 따라서 SDA 핀은 SDA 핀이며, 핀은 SCL의 Arduino A5의 핀에 접속된다 A4의 Arduino의 핀에 접속된다. HC-06 블루투스 모듈 따라서 블루투스 수신 핀 핀 D11 및 블루투스의 송신 핀 아두 이노의 D10 핀에 연결되어 연결되는 직렬 통신의 도움으로 작동한다. 이 핀 D10 및 D11은 Arduino를 프로그래밍하여 직렬 핀으로 구성됩니다. HC-05 모듈과 MSP6050 모듈은 + 5V에서 작동하므로 위와 같이 Arduino의 Vcc 핀에 의해 전원이 공급됩니다.
나는 브레드 보드 연결 와이어를 사용하고 작은 브레드 보드 위에 셋업을 구축했습니다. 연결이 완료되면 내 보드는 다음과 같이 보입니다.
설정 강화:
내가했던 것처럼 FTDI 프로그래밍 보드를 통해 회로에 전원을 공급하거나 9V 배터리 또는 12V 어댑터를 사용하여 Arduino pro mini의 Raw 핀에 연결할 수 있습니다. Arduino Pro-mini에는이 외부 전압 조정 + 5V를 변환하는 내장 전압 조정기가 있습니다.
Arduino 프로그래밍:
하드웨어가 준비되면 Arduino 프로그래밍을 시작할 수 있습니다. 항상 그렇듯이이 프로젝트 의 전체 코드 는이 페이지 하단에서 찾을 수 있습니다. 그러나 프로젝트를 더 잘 이해하기 위해 코드를 작은 부분으로 나누고 아래 단계로 설명했습니다.
첫 번째 단계는 MPU6050을 Arduino와 인터페이스하는 것입니다. 이 프로젝트에서는 Korneliusz에서 개발 한 라이브러리를 사용하겠습니다. 아래 링크에서 다운로드 할 수 있습니다.
MPU6050 리버티-Korneliusz Jarzebski
ZIP 파일을 다운로드하여 Arduino IDE에 추가하십시오. 그런 다음 File-> Examples-> Arduino_MPU6050_Master-> MPU6050_gyro_pitch_roll_yaw로 이동 합니다. 방금 다운로드 한 라이브러리를 사용하는 예제 프로그램이 열립니다. 따라서 업로드를 클릭하고 프로그램이 Arduino Pro mini에 업로드 될 때까지 기다립니다. 이 작업이 완료되면 직렬 모니터를 열고 전송 속도를 115200으로 설정하고 다음을 받고 있는지 확인하십시오.
처음에는 세 가지 값이 모두 0이되지만 브레드 보드를 이동하면 이러한 값이 변경되는 것을 볼 수 있습니다. 변경되면 연결이 정확함을 의미하고 그렇지 않으면 연결을 확인하십시오. 여기에서 시간을내어 센서를 기울이는 방식에 따라 Pitch Roll 및 Yaw 의 세 가지 값이 어떻게 달라지는 지 확인하십시오. 혼란 스러울 경우 Arduino의 재설정 버튼을 누르면 값이 다시 0으로 초기화됩니다. 그런 다음 센서를 한 방향으로 기울이고 어떤 값이 변하는 지 확인하십시오. 아래 그림은 당신이 더 잘 이해하는 데 도움이 될 것입니다.
이 세 가지 매개 변수 중 우리는 Roll과 Pitch 에만 관심이 있습니다. Roll 값은 X 축의 기울기에 대해 알려주고 Pitch 값은 Y 축의 기울기에 대해 알려줍니다. 이제 기본 사항을 이해 했으므로 실제로 Arduino 프로그래밍을 시작하여 이러한 값을 Bluetooth를 통해 Arduino로 보냅니다. 항상 그렇듯이이 프로젝트에 필요한 모든 라이브러리를 포함하여 시작하겠습니다.
#포함
그런 다음 Bluetooth 모듈에 대한 소프트웨어 직렬을 초기화합니다. 이것은 Arduino의 소프트웨어 직렬 라이브러리로 인해 가능하며 IO 핀은 직렬 핀으로 작동하도록 프로그래밍 할 수 있습니다. 여기에서는 디지털 핀 D10 및 D11을 사용합니다. 여기서 D10 id Rx 및 D11은 Tx입니다.
SoftwareSerial BT (10, 11); // RX, TX
그 다음 프로그램에 필요한 변수와 개체를 초기화하고 직렬 모니터 및 Bluetooth에 대한 전송 속도를 지정하는 setup () 함수로 이동 합니다. HC-05 및 HC-06의 경우 전송 속도는 9600이므로 동일하게 사용해야합니다. 그런 다음 Arduino의 IIC 버스가 MPU6050에 연결되어 있는지 확인합니다. 그렇지 않으면 경고 메시지를 인쇄하고 장치가 연결되어있는 동안 그대로 유지됩니다. 그 후 자이로를 보정하고 아래와 같이 각각의 기능을 사용하여 임계 값을 설정합니다.
void setup () {Serial.begin (115200); BT.begin (9600); // Baudrate 9600에서 Bluetooth 통신 시작 // MPU6050 초기화 while (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("유효한 MPU6050 센서를 찾을 수 없습니다. 배선을 확인하십시오!"); 지연 (500); } mpu.calibrateGyro (); // 시작하는 동안 자이로 스코프 보정 mpu.setThreshold (3); // 민감도 제어}
" mpu.calibrateGyro ();"줄 MPU6050 을 현재 위치에 맞게 보정합니다. 이 라인은 MPU6050을 보정하고 모든 값을 0으로 설정해야 할 때마다 프로그램 내에서 여러 번 호출 될 수 있습니다. “mpu.setThreshold (3);” 이 기능은 센서의 움직임에 따라 값이 변하는 정도를 제어합니다. 값이 너무 낮 으면 노이즈가 증가하므로주의해서 다루어야합니다.
void loop () 내부에서 자이로 스코프와 온도 센서 의 값을 반복해서 읽어 피치, 롤, 요의 값을 계산하여 블루투스 모듈로 보냅니다. 다음 두 줄은 원시 자이로 값과 온도 값을 읽습니다.
벡터 노름 = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
다음으로, 시간 단계를 곱하고 이전 값에 더하여 피치, 롤 및 요 를 계산합니다. 타임 스텝은 아무것도하지만, 연속 측정 사이의 간격입니다.
pitch = pitch + norm. Yxis * timeStep; roll = roll + norm. XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
시간 단계를 더 잘 이해하기 위해 아래 줄을 살펴 보겠습니다. 이 라인은 정확히 10mS 또는 0.01 초 간격으로 MPU6050의 값을 읽기 위해 배치됩니다. 따라서 timeStep의 값을 0.01로 선언합니다. 그리고 남은 시간이 더 있으면 아래 줄을 사용하여 프로그램을 보류하십시오. (millis () – timer ())는 프로그램이 지금까지 실행되는 데 걸린 시간을 제공합니다. 0.01 초로 빼고 남은 시간 동안 지연 기능을 사용하여 프로그램을 유지합니다.
delay ((timeStep * 1000)-(millis ()-타이머));
값을 읽고 계산 한 후에는 Bluetooth를 통해 전화로 보낼 수 있습니다. 그러나 여기에 문제가 있습니다. 우리가 사용하는 블루투스 모듈 은 0에서 255까지의 숫자 만 보낼 수있는 1 바이트 (8 비트) 만 보낼 수 있습니다. 따라서 값을 분할하고이 범위 내에서 매핑해야합니다. 이것은 다음 행에 의해 수행됩니다.
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = map (pitch, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
알 수 있듯이 roll의 값은 0에서 100으로 변수 x에 매핑되고 pitch는 100에서 200으로 변수 y에 매핑되고 temp는 200 이상에서 변수 t에 매핑됩니다. 우리가 보낸 데이터에서 동일한 정보를 사용하여 데이터를 검색 할 수 있습니다. 마지막으로 다음 줄을 사용하여 Bluetooth 를 통해 이러한 값을 씁니다.
BT.write (x); BT.write (y); BT.write (t);
전체 프로그램을 이해했다면 아래로 스크롤하여 프로그램을보고 Arduino 보드에 업로드하십시오.
처리를 사용하여 Android 애플리케이션 준비:
이 Arduino 경사계 용 안드로이드 애플리케이션 은 Processing IDE를 사용하여 개발되었습니다. 이것은 Arduino와 매우 유사하며 시스템 애플리케이션, Android 애플리케이션, 웹 디자인 등을 만드는 데 사용할 수 있습니다. 우리는 이미 처리를 사용하여 아래 나열된 다른 멋진 프로젝트를 개발했습니다.
- Arduino를 사용한 탁구 게임
- 프로세싱을 사용하는 스마트 폰 제어 FM 라디오.
- 프로세싱 및 초음파 센서를 사용한 Arduino 레이더 시스템
그러나이 응용 프로그램을 만드는 방법에 대한 전체 코드를 설명하는 것은 불가능합니다. 그래서 두 가지 방법이 있습니다. 아래 링크에서 APK 파일을 다운로드하여 휴대폰에 직접 Android 애플리케이션을 설치할 수 있습니다. 또는 아래로 스크롤하여 전체 처리 코드를 찾고 작동 방식을 직접 알아보십시오.
ZIP 파일 내에서 Android 애플리케이션에로드 할 모든 이미지와 기타 소스로 구성된 data 라는 폴더를 찾을 수 있습니다. 아래 줄 은 블루투스가 자동으로 연결할 이름을 결정 합니다.
bt.connectToDeviceByName ("HC-06");
내부 무승부 () 함수 것을 반복 여기에 우리가 실행됩니다 , 이미지를 그려 텍스트를 표시하고 막대 애니메이션 값에 기반을 블루투스 모듈을 형성한다. 프로그램을 통해 각 기능 내부에서 일어나는 일을 확인할 수 있습니다.
void draw () // 무한 루프 {background (0); imageMode (CENTER); 이미지 (로고, 너비 / 2, 높이 /1.04, 너비, 높이 / 12); load_images (); textfun (); getval (); }
마지막으로 설명해야 할 중요한 사항이 하나 더 있습니다. pitch, roll 및 temp의 값을 0에서 255로 나눈 것을 기억하십시오. 따라서 여기서 다시 정상 값으로 역 매핑하여 정상 값으로 되돌 립니다.
if (info <100 && info> 0) x = map (info, 0, 100,-(width / 1.5) / 3, + (width / 1.5) / 3); // x = info; else if (info <200 && info> 100) y = map (info, 100, 200,-(width / 4.5) /0.8, + (width / 4.5) /0.8); // y = info; 그렇지 않으면 (info> 200) temp = info -200; println (temp, x, y);
블루투스 모듈에서 전화로 데이터를 가져 오는 훨씬 더 좋은 방법이 있지만, 이것은 우리가 무시한 취미 프로젝트이므로 관심이 있다면 깊이 파고들 수 있습니다.
Arduino 경사계의 작동:
하드웨어 및 응용 프로그램을 준비했으면 이제 우리가 구축 한 것을 재미있게 즐길 시간입니다. Arduino 코드를 보드에 업로드하고 Serial.println 행 의 주석을 제거 하고 직렬 모니터를 사용하여 하드웨어가 예상대로 작동하는지 확인할 수도 있습니다. 어쨌든 그것은 완전히 선택 사항입니다.
코드가 업로드되면 휴대폰에서 Android 애플리케이션을 시작합니다. 응용 프로그램이 HC-06 모듈에 자동으로 연결되고 아래와 같이 응용 프로그램 상단에 "연결 대상: HC-06"이 표시됩니다.
처음에는 온도 값을 제외한 모든 값이 0이됩니다. 이는 Arduino가이 위치에 대한 MPU-6050을 참조로 보정했기 때문입니다. 이제 하드웨어를 기울여 모바일 애플리케이션의 값도 애니메이션과 함께 변경되는지 확인할 수 있습니다. 응용 프로그램의 전체 작업은 아래 비디오 에서 찾을 수 있습니다. 이제 브레드 보드를 아무 곳에 나 놓고 표면이 완벽하게 수평인지 확인할 수 있습니다.
프로젝트를 이해하고 유용한 것을 배우 셨기를 바랍니다. 의심스러운 점이 있으면 아래 댓글 섹션이나 포럼을 사용하여 해결하십시오.