기타/Raspberry Pi

Raspberry pi 4에서 MPU6050 사용하기

busy맨 2024. 4. 4. 22:40

1. I2C 활성화 설정

1) 라즈베리파이 터미널에서 'sudo raspi-config' 명령을 실행하여 설정 메뉴에 들어감

2) Interface Options > I2C를 선택하고 활성

3) 'sudo reboot -n' 명령으로 재부팅

4) 설정 확인하기

  • 아래와 같이 명령어 입력 후 i2c 모듈과 i2c 디바이스 드라이버 확인

2. smbus 라이브러리 설치

1) 아래 명령어 순서대로 입력

sudo apt-get update
sudo apt-get install python3-smbus
sudo apt-get install i2c-tools

 

3. MPU6050 연결

1) 라즈베리파이4 핀맵을 보고 센서와 연결

  • Ex)
    • 1번 - VCC
    • 3번 - SDA
    • 5번 - SCL
    • 14번 - GND

 

2) MPU6050 주소 확인

sudo i2cdetect -y 1

  • 위와 같이 '0x68' 주소에 연결되거나 '0x69' 주소에 연결되어 있어야함

4. Python으로 가속도 그래프 그리기

  • 10초 동안 3축 가속도를 읽고, 그래프를 이미지로 저장하는 코드
import smbus
import time
import matplotlib.pyplot as plt

# MPU6050 레지스터 주소
power_mgmt_1 = 0x6b
accel_x_out = 0x3b
accel_y_out = 0x3d
accel_z_out = 0x3f

# I2C 버스 생성
bus = smbus.SMBus(1)

# 센서 초기화
def init_sensor():
    bus.write_byte_data(0x68, power_mgmt_1, 0)

# 가속도 값 읽기
def read_accel():
    def read_word(reg):
        high = bus.read_byte_data(0x68, reg)
        low = bus.read_byte_data(0x68, reg+1)
        val = (high << 8) + low
        return val if val < 0x8000 else val - 65536

    accel_x = read_word(accel_x_out)
    accel_y = read_word(accel_y_out)
    accel_z = read_word(accel_z_out)

    return accel_x, accel_y, accel_z

def main():
    init_sensor()

    x_data = []
    y_data = []
    z_data = []

    start_time = time.time()

    try:
        while time.time() - start_time < 10:  # 10초 동안 데이터 읽기
            accel_x, accel_y, accel_z = read_accel()
            print(f"Accelerometer: X={accel_x}, Y={accel_y}, Z={accel_z}")

            # 데이터 저장
            x_data.append(accel_x)
            y_data.append(accel_y)
            z_data.append(accel_z)

            time.sleep(0.1)  # 0.1초마다 데이터 샘플링

    except KeyboardInterrupt:
        pass  # 키보드인터럽트

    # 그래프 그리기
    plt.plot(x_data, label='X-Axis')
    plt.plot(y_data, label='Y-Axis')
    plt.plot(z_data, label='Z-Axis')
    plt.xlabel('Time')
    plt.ylabel('Acceleration')
    plt.legend()
    plt.savefig('acceleration_graph.png')  # 이미지 파일로 저장

if __name__ == "__main__":
    main()

VSCode 터미널 출력창
acceleration_graph.png

 

'기타 > Raspberry Pi' 카테고리의 다른 글

22.07.24~22.08.01) 라즈베리파이 설정 및 기초  (0) 2023.01.15