- Các thành phần bắt buộc:
- Cảm biến con quay hồi chuyển MPU6050:
- Sự miêu tả:
- Sơ đồ mạch và giải thích:
- Cấu hình Raspberry Pi cho cảm biến con quay hồi chuyển MPU6050:
- Giải thích lập trình:
Cảm biến MPU6050 có nhiều chức năng trên chip đơn. Nó bao gồm một gia tốc kế MEMS, một con quay hồi chuyển MEMS và cảm biến nhiệt độ. Mô-đun này rất chính xác trong khi chuyển đổi các giá trị tương tự sang kỹ thuật số vì nó có phần cứng chuyển đổi tín hiệu tương tự sang kỹ thuật số 16 bit cho mỗi kênh. Mô-đun này có khả năng bắt kênh x, y và z cùng một lúc. Nó có giao diện I2C để giao tiếp với bộ điều khiển máy chủ. Đây Module MPU6050 là một con chip nhỏ gọn có cả gia tốc kế và con quay hồi chuyển. Đây là một thiết bị rất hữu ích cho nhiều ứng dụng như máy bay không người lái, robot, cảm biến chuyển động. Nó còn được gọi là Con quay hồi chuyển hoặc Gia tốc kế ba trục.
Hôm nay, trong bài viết này chúng ta sẽ giao diện MPU6050 này với Raspberry Pi và hiển thị các giá trị trên màn hình LCD 16x2.
Các thành phần bắt buộc:
- Raspberry Pi
- MPU-6050
- LẨU 10K
- Dây nhảy
- Breadboard
- Nguồn cấp
Cảm biến con quay hồi chuyển MPU6050:
MPU-6050 là một con quay hồi chuyển và gia tốc kế 8 chân 6 trục trong một chip duy nhất. Mô-đun này hoạt động trên giao tiếp nối tiếp I2C theo mặc định nhưng nó có thể được cấu hình cho giao diện SPI bằng cách cấu hình thanh ghi của nó. Đối với I2C điều này có các đường SDA và SCL. Hầu như tất cả các chân đều đa chức năng nhưng ở đây chúng tôi chỉ tiến hành với các chân chế độ I2C.
Cấu hình Pin:
Vcc: - chân này được sử dụng để cấp nguồn cho mô-đun MPU6050 liên quan đến nối đất
GND: - đây là chốt nối đất
SDA: - Chân SDA được sử dụng cho dữ liệu giữa bộ điều khiển và mô-đun mpu6050
SCL: - Chân SCL được sử dụng cho đầu vào đồng hồ
XDA: - Đây là dòng Dữ liệu I2C SDA của cảm biến để cấu hình và đọc từ các cảm biến bên ngoài ((tùy chọn) không được sử dụng trong trường hợp của chúng tôi)
XCL: - Đây là dòng đồng hồ I2C SCL của cảm biến để cấu hình và đọc từ các cảm biến bên ngoài ((tùy chọn) không được sử dụng trong trường hợp của chúng tôi)
ADO: - I2C Slave Address LSB (không áp dụng trong trường hợp của chúng tôi)
INT: - Chân ngắt cho biết dữ liệu đã sẵn sàng.
Trước đây chúng tôi đã giao tiếp MPU6050 với Arduino.
Sự miêu tả:
Trong bài viết này, chúng tôi đang hiển thị các chỉ số nhiệt độ, con quay hồi chuyển và gia tốc kế trên màn hình LCD sử dụng MPU6050 với Raspberry Pi. Nếu bạn chưa quen với Raspberry Pi thì hãy xem qua phần hướng dẫn về Raspberry Pi của chúng tôi và tìm hiểu cách bắt đầu với Raspberry Pi.
Trong dự án này, lần đầu tiên chúng tôi hiển thị giá trị nhiệt độ trên màn hình LCD và sau một thời gian, chúng tôi hiển thị giá trị con quay hồi chuyển và sau đó một thời gian, chúng tôi có các kết quả đọc gia tốc kế như thể hiện trong hình ảnh bên dưới:
Sơ đồ mạch và giải thích:
Sơ đồ mạch, để giao tiếp MPU6050 với Raspberry Pi, rất đơn giản ở đây chúng tôi đã sử dụng màn hình LCD và MPU6050. Một nồi 10k được sử dụng để kiểm soát độ sáng của màn hình LCD. Về kết nối với MPU6050, chúng tôi đã thực hiện 4 kết nối, trong đó chúng tôi đã kết nối nguồn điện 3.3v và mặt đất của MPU6050 với 3.3v và mặt đất của Raspberry Pi. Chân SCL và SDA của MPU6050 được kết nối với chân vật lý 3 (GPIO2) và chân 5 (GPIO3) của Raspberry. RS, RW và EN của LCD được kết nối trực tiếp với GPIO18 và 23 của raspberry pi. Chân dữ liệu được kết nối trực tiếp với chân số GPIO24, GPIO25, GPIO8 và GPIO7. Tìm hiểu thêm về giao diện LCD với Raspberry Pi tại đây.
Cấu hình Raspberry Pi cho cảm biến con quay hồi chuyển MPU6050:
Trước khi bắt đầu lập trình, chúng ta cần kích hoạt i2c của Raspberry Pi bằng cách sử dụng phương pháp đã cho:
Bước 1: Bật giao tiếp I2C
Trước khi cài đặt thư viện Adafruit SSD1306, chúng ta cần kích hoạt giao tiếp I2C trong Raspberry Pi.
Để thực hiện loại này trong bảng điều khiển Raspberry Pi:
sudo raspi -config
Và sau đó một màn hình màu xanh lam sẽ xuất hiện. Bây giờ chọn tùy chọn giao diện
Sau đó, chúng ta cần chọn I2C
Các bác sĩ cho biết thêm:
Sau đó, chúng ta cần chọn yes và nhấn enter rồi ok
Sau đó, chúng ta cần khởi động lại raspberry pi bằng lệnh dưới đây:
khởi động lại sodo
Bước 2: Cài đặt python-pip và Thư viện GPIO
sudo apt-get install build-essential python-dev python-pip
Sau đó, chúng ta cần cài đặt thư viện GPIO raspberry pi
sudo pip cài đặt RPi.GPIO
Bước 3: Cài đặt thư viện smbus
Cuối cùng, chúng ta cần cài đặt thư viện smbus trong Raspberry Pi bằng cách sử dụng lệnh đã cho:
sudo apt-get install python-smbus
Bước 4: Cài đặt thư viện MPU6050
Sau đó, chúng ta cần cài đặt thư viện MPU6050 bằng cách sử dụng lệnh đã cho
sudo pip cài đặt mpu6050
Bây giờ chúng ta có thể tìm thấy mã ví dụ trong các ví dụ. Người dùng có thể kiểm tra mã đó bằng cách tải trực tiếp lên Raspberry Pi hoặc tùy chỉnh nó theo yêu cầu. Ở đây chúng tôi đã hiển thị các giá trị trục X, Y và Z của MPU6050 trên màn hình LCD 16x2. Bạn có thể tìm thấy Mã Python đầy đủ ở cuối Hướng dẫn.
Giải thích lập trình:
Mã Python hoàn chỉnh được đưa ra ở cuối ở đây, chúng tôi đang giải thích một số phần quan trọng của mã.
Trong Chương trình Python, chúng tôi đã nhập một số thư viện bắt buộc như time, smbus và GPIO.
nhập thời gian nhập smbus nhập RPi.GPIO dưới dạng gpio
Sau đó, chúng ta cần lấy một số địa chỉ đăng ký để cấu hình MPU6050 và để nhận các giá trị từ cùng một. Chúng tôi cũng đã sử dụng một số biến để hiệu chỉnh và khởi tạo bus cho 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_MBus = 0x45 địa chỉ GYRO_MB AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Sau đó, chúng tôi đã viết một số chức năng cho Driving 16x2LCD như def bắt đầu (), def cmd (ch), ghi def (ch), def In (str), def clear () vv . Bạn có thể kiểm tra thêm Giao diện của màn hình LCD với Raspberry Pi.
Sau đó, chúng ta cần khởi chạy Mô-đun 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_data, GIG., INT_EN, 1) time.sleep (1)
Sau đó, chúng ta cần viết một số hàm để đọc các giá trị từ MPU6050 và hiển thị chúng ra LCD. Hàm đã cho được sử dụng để đọc dữ liệu từ 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 - Giá trị trả về 65536
Chức năng đã cho được sử dụng để đọc dữ liệu máy đo gia tốc và con quay hồi chuyển
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 (): global GxCal global GyCal global 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)
Sau đó, chúng tôi đã viết một chức năng đọc nhiệt độ
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)
Hàm def calibrate () được sử dụng để hiệu chỉnh MPU6050 và hàm def display () được sử dụng để hiển thị các giá trị trên màn hình LCD. Kiểm tra các chức năng này trong mã đầy đủ được cung cấp bên dưới.
Sau này, chúng tôi đã bắt đầu màn hình LCD, khởi tạo và hiệu chỉnh MPU6050 và sau đó trong khi vòng lặp chúng tôi đã kêu gọi tất cả các tất cả ba bộ giá trị từ MPU- nhiệt độ, gia tốc kế và con quay hồi chuyển và cho họ thấy trên màn hình LCD.
bắt đầu (); Print ("MPU6050 Interface") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () hiệu chỉnh () trong khi 1: InitMPU () clear () cho tôi trong phạm vi (20): nhiệt độ () clear () Print ("Accel") time.sleep (1) cho tôi trong phạm vi (30): accel () clear () Print ("Gyro") time.sleep (1) cho tôi trong phạm vi (30): gyro ()
Con quay hồi chuyển và gia tốc kế MPU6050 đều được sử dụng để phát hiện vị trí và hướng của bất kỳ thiết bị nào. Con quay hồi chuyển sử dụng lực hấp dẫn của trái đất để xác định vị trí trục x, y và z và gia tốc kế phát hiện dựa trên tốc độ thay đổi của chuyển động. Chúng tôi đã sử dụng gia tốc kế với Arduino trong nhiều dự án của mình như:
- Robot điều khiển bằng cử chỉ bằng tay dựa trên gia tốc kế
- Hệ thống cảnh báo tai nạn xe dựa trên Arduino
- Báo động máy dò động đất sử dụng Arduino