MPU6050 센서는 단일 칩에 대해 많은 기능을 가지고 있습니다. MEMS 가속도계, MEMS 자이로 및 온도 센서로 구성됩니다. 이 모듈은 각 채널에 대해 16 비트 아날로그-디지털 변환기 하드웨어를 가지고 있기 때문에 아날로그 값을 디지털로 변환하는 동안 매우 정확합니다. 이 모듈은 x, y 및 z 채널을 동시에 캡처 할 수 있습니다. 호스트 컨트롤러와 통신하기위한 I2C 인터페이스가 있습니다. 이 MPU6050 모듈은 가속도계와 자이로를 모두 갖춘 소형 칩 입니다. 이것은 드론, 로봇, 모션 센서와 같은 많은 응용 분야에 매우 유용한 장치입니다. 자이로 스코프 또는 삼축 가속도계 라고도 합니다.
오늘이 기사에서는 이 MPU6050을 Raspberry Pi 와 인터페이스 하고 16x2 LCD의 값을 보여줄 것입니다.
필수 구성 요소:
- 라즈베리 파이
- MPU-6050
- 10K POT
- 점퍼 와이어
- 브레드 보드
- 전원 공급
MPU6050 자이로 센서:
MPU-6050 은 단일 칩에있는 8 핀 6 축 자이로 및 가속도계입니다. 이 모듈은 기본적으로 I2C 직렬 통신에서 작동하지만 레지스터를 구성하여 SPI 인터페이스에 대해 구성 할 수 있습니다. I2C의 경우 SDA 및 SCL 라인이 있습니다. 거의 모든 핀이 다기능이지만 여기서는 I2C 모드 핀으로 만 진행합니다.
핀 구성:
Vcc:- 이 핀은 접지와 관련하여 MPU6050 모듈에 전원을 공급하는 데 사용됩니다.
GND:- 이것은 접지 핀입니다.
SDA: -SDA 핀은 컨트롤러와 mpu6050 모듈 간의 데이터에 사용됩니다.
SCL: -SCL 핀은 클럭 입력에 사용됩니다.
XDA:- 외부 센서를 구성하고 읽는 센서 I2C SDA 데이터 라인입니다 ((선택 사항) 우리의 경우에는 사용되지 않습니다)
XCL:- 외부 센서를 구성하고 읽기위한 센서 I2C SCL 클록 라인입니다 ((선택 사항) 우리의 경우에는 사용되지 않음)
ADO: -I2C 슬레이브 주소 LSB (이 경우에는 해당되지 않음)
INT:- 데이터 준비 표시를위한 인터럽트 핀.
이전에 MPU6050을 Arduino와 인터페이스했습니다.
기술:
이 기사에서는 Raspberry Pi와 함께 MPU6050을 사용하여 LCD 를 통한 온도, 자이로 및 가속도계 판독 값을 보여줍니다. Raspberry Pi를 처음 사용하는 경우 Raspberry Pi 자습서 섹션을 살펴보고 Raspberry Pi를 시작하는 방법을 알아보십시오.
이 프로젝트에서는 먼저 LCD에 온도 값 을 표시하고 잠시 후 자이로 값 을 표시 한 다음 잠시 후 아래 이미지와 같이 가속도계 판독 값 을 얻습니다.
회로도 및 설명:
MPU6050과 Raspberry Pi를 연결하기위한 회로도 는 매우 간단합니다. 여기에서는 LCD와 MPU6050을 사용했습니다. 10k 포트는 LCD의 밝기를 제어하는 데 사용됩니다. MPU6050과 관련하여 3.3v 전원 공급 장치와 MPU6050의 접지를 Raspberry Pi의 3.3v 및 접지에 연결하는 4 개의 연결을 수행했습니다. MPU6050의 SCL 및 SDA 핀은 Raspberry의 물리적 핀 3 (GPIO2) 및 핀 5 (GPIO3)와 연결됩니다. LCD의 RS, RW 및 EN은 GPIO18 및 23의 라즈베리 파이에 직접 연결됩니다. 데이터 핀은 디지털 핀 번호 GPIO24, GPIO25, GPIO8 및 GPIO7에 직접 연결됩니다. 여기에서 Raspberry Pi와 LCD 인터페이스에 대해 자세히 알아보십시오.
MPU6050 자이로 센서 용 Raspberry Pi 구성:
프로그래밍을 시작하기 전에 주어진 방법을 사용하여 Raspberry Pi의 i2c 를 활성화 해야합니다.
1 단계: I2C 통신 활성화
Adafruit SSD1306 라이브러리를 설치하기 전에 Raspberry Pi에서 I2C 통신 을 활성화 해야합니다.
Raspberry Pi 콘솔에서이 유형을 수행하려면:
sudo raspi -config
그러면 블루 스크린이 나타납니다. 이제 인터페이스 옵션을 선택하십시오
그런 다음 I2C를 선택해야합니다.
그런 다음 예를 선택하고 Enter 키를 누른 다음 확인을 누릅니다.
그런 다음 아래 명령을 실행하여 raspberry pi 를 재부팅 해야합니다.
소도 재부팅
2 단계: python-pip 및 GPIO 라이브러리 설치
sudo apt-get install build-essential python-dev python-pip
그런 다음 라즈베리 파이 GPIO 라이브러리를 설치해야합니다.
sudo pip는 RPi.GPIO를 설치합니다.
3 단계: smbus 라이브러리 설치
마지막으로 주어진 명령을 사용하여 Raspberry Pi에 smbus 라이브러리 를 설치해야합니다.
sudo apt-get python-smbus 설치
4 단계: 라이브러리 MPU6050 설치
그런 다음 주어진 명령을 사용하여 MPU6050 라이브러리를 설치해야합니다.
sudo pip 설치 mpu6050
이제 예제에서 예제 코드를 찾을 수 있습니다. 사용자는 Raspberry Pi에 직접 업로드하여 해당 코드를 테스트하거나 요구 사항에 따라 사용자 지정할 수 있습니다. 여기에서는 16x2 LCD에 MPU6050의 X, Y 및 Z 축 값을 표시했습니다. 튜토리얼의 끝에서 전체 Python 코드 를 찾을 수 있습니다.
프로그래밍 설명:
완전한 Python 코드 는 여기 끝에 제공되며 코드의 몇 가지 중요한 부분을 설명합니다.
Python 프로그램에서 time, smbus 및 GPIO와 같은 필수 라이브러리를 가져 왔습니다.
smbus 가져 오기 시간 가져 오기 RPi.GPIO를 gpio로 가져 오기
그런 다음 MPU6050을 구성하고 동일한 값을 가져 오기 위해 레지스터 주소를 가져와야합니다. 또한 I2C 용 버스 교정 및 초기화를 위해 몇 가지 변수를 사용했습니다.
PWR_M = 0x6B DIV = 0x19 CONFIG = 0x1A GYRO_CONFIG = 0x1B INT_EN = 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_X = 0x43 GYRO_Y = 0x45 장치 주소 = 0x41 = 0x45 장치 주소 GYRO_Y = 0x45. AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
그런 다음 def begin (), def cmd (ch), def write (ch), def Print (str), def clear () 등과 같은 16x2LCD 구동을위한 몇 가지 함수를 작성했습니다. LCD와 Raspberry Pi의 인터페이스를 추가로 확인할 수 있습니다.
그런 다음 MPU6050 모듈을 초기화해야합니다.
def InitMPU (): bus.write_byte_data (Device_Address, DIV, 7) bus.write_byte_data (Device_Address, PWR_M, 1) bus.write_byte_data (Device_Address, CONFIG, 0) bus.write_byte_data (Device_Address, GYRO_CONFIG, 24) bus.write_byte_data (Device_Address, INT_EN, 1) time.sleep (1)
그런 다음 MPU6050에서 값을 읽어 LCD에 표시하는 몇 가지 함수를 작성해야합니다. 주어진 함수는 MPU6050에서 데이터 를 읽는 데 사용됩니다.
def readMPU (addr): high = bus.read_byte_data (Device_Address, addr) low = bus.read_byte_data (Device_Address, addr + 1) value = ((high << 8)-low) if (value> 32768): value = value -65536 반환 값
가속도계 및 자이로 미터 데이터 를 읽는 데 사용되는 함수
def accel (): x = readMPU (ACCEL_X) y = readMPU (ACCEL_Y) z = readMPU (ACCEL_Z) Ax = (x / 16384.0-AxCal) Ay = (y / 16384.0-AyCal) Az = (z / 16384.0-AzCal) #print "X ="+ str (Ax) display (Ax, Ay, Az) time.sleep (.01) def gyro (): 글로벌 GxCal 글로벌 GyCal 글로벌 GzCal x = readMPU (GYRO_X) y = readMPU (GYRO_Y) z = readMPU (GYRO_Z) Gx = x / 131.0-GxCal Gy = y / 131.0-GyCal Gz = z / 131.0-GzCal #print "X ="+ str (Gx) display (Gx, Gy, Gz) time.sleep (. 01)
그 후 온도 읽기 기능을 작성했습니다.
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340.0) + 36.53 tempC = "%. 2f"% tempC print tempC setCursor (0,0) Print ("Temp:") Print (str (tempC)) time.sleep (.2)
def calibrate () 함수는 MPU6050을 보정하는 데 사용되며 def display () 함수는 LCD에 값을 표시하는 데 사용됩니다. 아래의 전체 코드에서 이러한 기능을 확인하십시오.
그 후 LCD를 시작하고 MPU6050을 초기화 및 보정 한 다음 while 루프 에서 MPU 온도, 가속도계 및 자이로 의 세 가지 값을 모두 호출 하여 LCD에 표시했습니다.
시작 (); Print ("MPU6050 인터페이스") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrate () while 1: InitMPU () clear () for i in range (20): temp () clear () Print ("Accel") time.sleep (1) for i in range (30): accel () clear () Print ("Gyro") time.sleep (1) for i in range (30): 자이로 ()
MPU6050 자이로와 가속도계는 모두 모든 장치의 위치와 방향을 감지하는 데 사용됩니다. 자이로는 지구 중력을 사용하여 x, y 및 z 축 위치를 결정하고 가속도계는 움직임의 변화 속도를 기반으로 감지합니다. 우리는 이미 다음과 같은 많은 프로젝트에서 Arduino와 함께 가속도계를 사용했습니다.
- 가속도계 기반 손 제스처 제어 로봇
- Arduino 기반 차량 사고 경보 시스템
- Arduino를 사용한 지진 감지기 경보