이번 포스팅에서는MPU-6050은 가속도계와 자이로미터를 결합한 관성 장치입니다. 가속도, 기울기 및 각속도를 측정하는 데 사용할 수 있습니다. 이 기사에서는 MicroPython으로 프로그래밍된 Raspberry Pi Pico와 함께 MPU-6050을 사용하는 방법을 살펴봅니다.
가속도계/자이로 MPU-6050 및 Raspberry Pi Pico(MicroPython)
가속도계를 사용하면 x, y 및 z의 3축에 따라 가속도 및/또는 중력장을 알 수 있습니다. x 및 y 축은 모듈에 표시되고 z 축은 모듈 평면에 수직입니다. 모듈이 고정되어 있고 테이블 위에 평평할 때 아래쪽으로 작용하는 중력으로 인해 z축을 따라 1g의 가속도가 측정됩니다. 측정된 가속도가 3축을 따라 0이면 MPU-6050 모듈이 자유 낙하합니다!
자이로미터는 3축을 따라 각속도를 측정합니다. 모듈이 움직이지 않을 때 각속도의 3가지 성분은 원칙적으로 0입니다(그러나 정확한 결과를 위해서는 보정이 필요합니다).
연결
MPU-6050 모듈에는 8개의 커넥터가 있지만 그 중 4개만 작동에 필요합니다(2개는 전원 공급, 2개는 I2C를 통한 데이터 전송).
- MPU-6050 VCC 핀: Raspberry Pi Pico 3.3V 출력
- MPU-6050 GND 핀: Raspberry Pi Pico GND 핀
- MPU-6050 SCL 핀: Raspberry Pi Pico GP9 핀
- MPA-6050 SDA 핀: Raspberry Pi Pico GP8 핀
imu.py 및 vector3d.py 드라이버 설치
필요한 라이브러리는 Github 저장소 micropython-mpu9x50 에서 찾을 수 있습니다 . "imu.py" 및 "vector3d.py" 파일을 Raspberry Pi Pico의 플래시 메모리에 복사해야 합니다.
스크립트 #1
이 첫 번째 스크립트는 가속도계와 자이로미터의 측정값을 표시합니다. 가속도계의 데이터에서 스크립트는 3개의 축(x, y 또는 z) 중 하나가 수직에 접근하는지 확인하려고 시도합니다. 스크립트는 자이로미터의 데이터를 기반으로 MPU-6050 모듈이 회전하는지 여부를 나타냅니다.
이 스크립트를 실행하고 MPU-6050 모듈의 방향을 다르게 지정하여 표시된 값이 어떻게 달라지는지 확인합니다.
'''
Utilisation d'une centrale inertielle MPU6050
(accéléromètre + gyrometre) avec un Raspberry Pi Pico.
Pour plus d'infos:
https://electroniqueamateur.blogspot.com/2022/03/accelerometregyro-mpu-6050-et-raspberry.html
'''
from imu import MPU6050 # https://github.com/micropython-IMU/micropython-mpu9x50
import time
from machine import Pin, I2C
i2c = I2C(0, sda=Pin(8), scl=Pin(9), freq=400000)
imu = MPU6050(i2c)
# Affichage de la température
print("Temperature: ", round(imu.temperature,2), "°C")
while True:
# lecture des valeurs
acceleration = imu.accel
gyrometre = imu.gyro
print ("Acceleration x: ", round(acceleration.x,2), " y:", round(acceleration.y,2),
"z: ", round(acceleration.z,2))
print ("gyrometre x: ", round(gyrometre.x,2), " y:", round(gyrometre.y,2),
"z: ", round(gyrometre.z,2))
# interprétation des données (accéléromètre)
if abs(acceleration.x) > 0.8:
if (acceleration.x > 0):
print("L'axe x pointe vers le haut")
else:
print("L'axe x pointe vers le bas")
if abs(acceleration.y) > 0.8:
if (acceleration.y > 0):
print("L'axe y pointe vers le haut")
else:
print("L'axe y pointe vers le bas")
if abs(acceleration.z) > 0.8:
if (acceleration.z > 0):
print("L'axe z pointe vers le haut")
else:
print("L'axe z pointe vers le bas")
# interprétation des données (gyrometre)
if abs(gyrometre.x) > 20:
print("Rotation autour de l'axe x")
if abs(gyrometre.y) > 20:
print("Rotation autour de l'axe y")
if abs(gyrometre.z) > 20:
print("Rotation autour de l'axe z")
time.sleep(0.2)
스크립트 #2
이 두 번째 예에서는 MPU-6050 모듈을 흔들면 Raspberry Pi Pico의 내장 LED가 켜집니다.
'''
Utilisation d'une centrale inertielle MPU6050
(accéléromètre + gyrometre) avec un Raspberry Pi Pico.
La LED du Pico s'allume lorsqu'on secoue le MPU6050.
Pour plus d'infos:
https://electroniqueamateur.blogspot.com/2022/03/accelerometregyro-mpu-6050-et-raspberry.html
'''
from imu import MPU6050 # https://github.com/micropython-IMU/micropython-mpu9x50
import time
from machine import Pin, I2C
i2c = I2C(0, sda=Pin(8), scl=Pin(9), freq=400000)
imu = MPU6050(i2c)
# LED initialement éteinte
Pin(25, Pin.OUT).value(0)
while True:
# lecture de l'accélération
acceleration = imu.accel.magnitude
print (acceleration)
# la valeur au repos est 1
if abs(acceleration - 1) > 0.1:
print("Ca bouge!")
Pin(25, Pin.OUT).value(1) # on allume la LED
else:
Pin(25, Pin.OUT).value(0) # on éteind la LED
time.sleep(0.2)
참고 자료
가속도계/자이로 MPU-6050 및 Raspberry Pi Pico(MicroPython)
'개발자 > 라즈베리파이4' 카테고리의 다른 글
libmysqlclient-dev 패키지를 사용할 수 없습니다. mariadb (0) | 2022.04.27 |
---|---|
mysql.h: 그런 파일이나 디렉터리가 없습니다. 에러 해결 mariadb (0) | 2022.04.27 |
라즈베리파이4 mjpg 동영상 스트리밍 서버 구현 (0) | 2022.04.24 |
Raspberry Pi Zero 2W 소개 (0) | 2022.03.04 |
MAX31855 Thermocouple Sensor with Raspberry Pi (0) | 2022.01.14 |
OpenCV error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow' 에러 (0) | 2021.12.29 |
Raspberry Pi 4B GPS 모듈 사용법 (0) | 2021.12.27 |
라즈베리파이 4 기반 IoT(사물인터넷) 설계 7강 스마트 농장 실습 (0) | 2021.12.09 |
더욱 좋은 정보를 제공하겠습니다.~ ^^