MPU6050가 된 IC 인 3 축 가속도 센서와 결합 된 3 축 자이로 스코프를 하나 개의 단위로. 또한 복잡한 작업을 수행하기 위해 온도 센서와 DCM이 있습니다. MPU6050은 일반적으로 드론 및 자체 균형 로봇과 같은 기타 원격 로봇 을 구축 하는 데 사용됩니다. 이 프로젝트에서는 MPU6050과 Arduino를 사용하여 Digital Protractor를 구축 할 것 입니다. 여기서 서보 모터는 각도기 이미지에 각도를 표시하는 데 사용됩니다. 서보 모터 샤프트에는 각도기 이미지에서 회전하는 바늘이 부착되어 16xLCD 디스플레이에도 표시되는 각도를 나타냅니다. 자세히 알아보기 전에 자이로 스코프 센서에 대해 알아 보겠습니다.
가속도계 및 자이로 스코프 센서 란 무엇입니까?
가속도계 는 가속도 를 측정하는 데 사용됩니다. 실제로 정적 및 동적 가속을 모두 감지합니다. 예를 들어, 휴대폰은 가속도계 센서를 사용하여 휴대폰이 가로 모드 또는 세로 모드에 있음을 감지합니다. 이전에 Arduino와 함께 Accelerometer를 사용하여 다음과 같은 많은 프로젝트를 빌드했습니다.
자이로 스코프 는 지구의 중력을 사용하여 움직이는 물체의 방향을 결정하는 각속도를 측정하는 데 사용됩니다. 각속도는 회 전체의 각 위치 변화율입니다.
예를 들어, 오늘날의 휴대폰은 자이로 스코프 센서를 사용하여 휴대폰의 방향에 따라 모바일 게임을합니다. 또한 VR 헤드셋은 자이로 스코프 센서를 사용하여 360 방향보기를 제공합니다.
따라서 가속도계는 선형 가속도를 측정 할 수 있지만 자이로 스코프는 회전 가속도를 찾는 데 도움이 될 수 있습니다. 두 센서를 별도의 모듈로 사용하면 방향, 위치 및 속도를 찾기가 어려워집니다. 그러나 두 센서를 결합하면 IMU (관성 측정 장치)로 작동합니다. 따라서 MPU6050 모듈 에서는 방향, 위치 및 속도를 찾기 위해 가속도계와 자이로 스코프가 단일 PCB에 있습니다.
신청:
- 방향 제어를 위해 드론에 사용
- 자가 균형 로봇
- 로봇 팔 제어
- 기울기 센서
- 휴대폰, 비디오 게임 콘솔에 사용
- 휴머노이드 로봇
- 항공기, 자동차 등에 사용됩니다.
MPU6050 가속도계 및 자이로 스코프 센서 모듈
MPU6050은 내부에 3 축 가속도계와 3 축 자이로 스코프로 구성된 MEMS (Micro Electro-Mechanical Systems)입니다. 또한 온도 센서가 있습니다.
다음을 측정 할 수 있습니다.
- 가속
- 속도
- 정위
- 배수량
- 온도
또한이 모듈에는 복잡한 계산을 수행 할 수있을만큼 강력한 (DMP) 디지털 모션 프로세서 가있어 마이크로 컨트롤러를위한 작업을 자유롭게 할 수 있습니다.
또한이 모듈에는 자력계와 같은 외부 IIC 모듈을 인터페이스하는 데 사용할 수있는 2 개의 보조 핀이 있습니다. 모듈의 IIC 주소를 구성 할 수 있으므로 AD0 핀을 사용하여 둘 이상의 MPU6050 센서 를 마이크로 컨트롤러에 인터페이스 할 수 있습니다.
기능 및 사양:
- 전원 공급 장치: 3-5V
- 통신: I2C 프로토콜
- 내장 된 16 비트 ADC는 높은 정확도를 제공합니다.
- 내장 DMP는 높은 계산 능력을 제공합니다.
- 자력계와 같은 다른 IIC 장치와 인터페이스하는 데 사용할 수 있습니다.
- 구성 가능한 IIC 주소
- 내장 온도 센서
MPU6050의 핀아웃:
핀 번호 | 핀 이름 | 사용하다 |
1 | Vcc | 모듈에 전원을 제공하며 + 3V ~ + 5V 일 수 있습니다. 일반적으로 + 5V가 사용됩니다. |
2 | 바닥 | 시스템 접지에 연결 |
삼 | 직렬 클록 (SCL) | I2C 통신을위한 클럭 펄스 제공에 사용 |
4 | 직렬 데이터 (SDA) | I2C 통신을 통한 데이터 전송에 사용 |
5 | 보조 직렬 데이터 (XDA) | 다른 I2C 모듈을 MPU6050과 인터페이스하는 데 사용할 수 있습니다. 선택 사항입니다 |
6 | 보조 직렬 클록 (XCL) | 다른 I2C 모듈을 MPU6050과 인터페이스하는 데 사용할 수 있습니다. 선택 사항입니다 |
7 | AD0 | 하나 이상의 MPU6050이 단일 MCU에 사용되는 경우이 핀을 사용하여 주소를 변경할 수 있습니다. |
8 | 인터럽트 (INT) | 인터럽트 핀은 MCU에서 데이터를 읽을 수 있음을 나타냅니다. |
이전 에 Arduino와 함께 MPU6050을 사용 하여 자체 균형 로봇 및 경사계를 구축했습니다.
필요한 구성 요소
- Arduino UNO
- MPU6050 자이로 스코프 모듈
- 16x2 LCD 디스플레이
- 전위차계 10k
- SG90- 서보 모터
- 각도기 이미지
회로도
이 DIY Arduino 각도기의 회로도 는 다음과 같습니다.
Arduino UNO와 MPU6050 간의 회로 연결:
MPU6050 |
Arduino UNO |
VCC |
+ 5V |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Arduino UNO와 서보 모터 간의 회로 연결:
서보 모터 |
Arduino UNO |
빨간색 (VCC) |
+ 5V |
주황색 (PWM) |
9 |
브라운 (GND) |
GND |
Arduino UNO와 16x2 LCD 간의 회로 연결:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
전위차계 센터 PIN으로 LCD 명암 조절용 |
RS |
2 |
RW |
GND |
이자형 |
삼 |
D4 |
4 |
D5 |
5 |
D6 |
6 |
D7 |
7 |
ㅏ |
+ 5V |
케이 |
GND |
프로그래밍 설명
평소 와 같이 데모 비디오 가 포함 된 전체 프로그램 이이 튜토리얼의 끝에 제공됩니다.
여기서 서보 모터는 Arduino와 연결되어 있으며 그 샤프트는 경사 MPU6050의 각도를 나타내는 각도기 이미지에 투영됩니다. 이 튜토리얼을위한 프로그래밍은 간단합니다. 자세히 살펴 보겠습니다.
먼저 필요한 모든 라이브러리-Servo 사용을위한 Servo Motor 라이브러리, LCD 사용을위한 LCD 라이브러리 및 I2C 통신을 사용하기위한 Wire 라이브러리를 포함합니다.
MPU6050은 I2C 통신을 사용하므로 Arduino의 I2C 핀에만 연결해야합니다. 따라서 Wire.h 라이브러리는 Arduino UNO와 MPU6050 간의 통신을 설정하는 데 사용됩니다. 이전에 MPU6050을 Arduino와 인터페이스하고 16x2 LCD에 x, y, z 좌표 값을 표시했습니다.
#포함
다음으로 Arduino UNO와 연결된 LCD 디스플레이 핀 RS, E, D4, D5, D6, D7을 정의합니다.
LiquidCrystal lcd (2,3,4,5,6,7);
다음으로 MPU6050의 I2C 주소가 정의됩니다.
const int MPU_addr = 0x68;
그런 다음 Servo 클래스와 세 개의 변수를 사용하여 X, Y, Z 축 값을 저장하기 위해 myservo 객체를 초기화 합니다.
서보 myservo; int16_t axis_X, axis_Y, axis_Z;
다음 최소 및 최대 값은 0에서 360까지의 각도를 측정하기 위해 265 및 402로 설정됩니다.
int minVal = 265; int maxVal = 402;
무효 설정 ():
에서는 무효 설정 기능 제 I2C 통신을 개시하고, 전송은 0x68의 주소 MPU6050으로 시작했다.
Wire.begin (); Wire.beginTransmission (MPU_addr);
0x6B를 작성하여 MPU6050을 절전 모드로 전환 한 다음 0을 작성하여 깨 웁니다.
Wire.write (0x6B); Wire.write (0);
MPU6050을 활성화 한 후 전송을 종료합니다.
Wire.endTransmission (true);
여기서 서보 모터의 PWM 핀은 Arduino UNO 핀 9와 연결됩니다.
myservo.attach (9);
회로의 전원을 켜 자마자 LCD에 환영 메시지가 표시되고 3 초 후에 지워집니다.
lcd.begin (16,2); // 16X2 모드로 LCD 설정 lcd.print ("CIRCUIT DIGEST"); 지연 (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("MPU6050"); 지연 (3000); lcd.clear ();
무효 루프 ():
다시 말하지만, I2C 통신은 MPU6050으로 시작됩니다.
Wire.beginTransmission (MPU_addr);
그런 다음 레지스터 0x3B (ACCEL_XOUT_H)로 시작합니다.
Wire.write (0x3B);
이제 프로세스는 종료 전송을 false로 설정하여 다시 시작되지만 연결은 활성 상태입니다.
Wire.endTransmission (false);
이제 14 개의 레지스터에서 데이터를 요청합니다.
Wire.requestFrom (MPU_addr, 14, true);
이제 존중 된 축 레지스터 값 (x, y, z)을 얻어 변수 axis_X, axis_Y, axis_Z에 저장합니다.
axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
그런 다음 265에서 402까지의 값을 -90에서 90으로 매핑합니다. 이것은 세 축 모두에 대해 수행됩니다.
int xAng = map (axis_X, minVal, maxVal, -90,90); int yAng = map (axis_Y, minVal, maxVal, -90,90); int zAng = map (axis_Z, minVal, maxVal, -90,90);
x 값 (0 ~ 360)을 계산하는 공식은 다음과 같습니다. 여기서는 서보 모터 회전이 x 값 이동을 기반으로하기 때문에 x 만 변환합니다.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI);
0에서 360도 사이의 X 각도 값은 0에서 180으로 변환됩니다.
int pos = map (x, 0,180,0,180);
그런 다음 각도 값을 작성하여 각도기 이미지에서 서보를 회전하고 해당 값을 16x2 LCD 디스플레이에 인쇄합니다.
myservo.write (pos); lcd.setCursor (0,0); lcd.print ("각도"); lcd.setCursor (0,1); lcd.print (x); 지연 (500); lcd.clear ();
그래서 이것은 Arduino와 함께 MPU6050을 사용하여 각도를 측정하는 방법입니다. 이 프로젝트의 전체 코드와 비디오는 다음과 같습니다.