개발자/라즈베리파이4

Raspberry Pi Pico 가속도계, 자이로 MPU-6050

지구빵집 2022. 3. 4. 08:23
반응형

 

 

이번 포스팅에서는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 핀 

 

가속도계/자이로 MPU-6050 및 Raspberry Pi Pico(MicroPython)  이미지 출처 https://electroniqueamateur.blogspot.com/2022/03/accelerometregyro-mpu-6050-et-raspberry.html

 

 

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) 

 

 

 

반응형