- Обязательные компоненты:
- Гироскопический датчик MPU6050:
- Описание:
- Принципиальная схема и пояснения:
- Настройка Raspberry Pi для гироскопического датчика MPU6050:
- Объяснение программирования:
Датчик MPU6050 выполняет множество функций на одном кристалле. Он состоит из акселерометра MEMS, гироскопа MEMS и датчика температуры. Этот модуль очень точен при преобразовании аналоговых значений в цифровые, поскольку он имеет 16-битный аналого-цифровой преобразователь для каждого канала. Этот модуль способен одновременно захватывать каналы x, y и z. Он имеет интерфейс I2C для связи с хост-контроллером. Этот модуль MPU6050 представляет собой компактный чип с акселерометром и гироскопом. Это очень полезное устройство для многих приложений, таких как дроны, роботы, датчики движения. Его также называют гироскопом или трехосным акселерометром.
Сегодня в этой статье мы собираемся связать MPU6050 с Raspberry Pi и показать значения на ЖК-дисплее 16x2.
Обязательные компоненты:
- Raspberry Pi
- 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 Slave Address LSB (в нашем случае не применяется)
INT: - Вывод прерывания для индикации готовности данных.
Ранее мы связали MPU6050 с Arduino.
Описание:
В этой статье мы показываем показания температуры, гироскопа и акселерометра на ЖК-дисплее с использованием MPU6050 с Raspberry Pi. Если вы новичок в Raspberry Pi, просмотрите наш раздел руководств по Raspberry Pi и узнайте, как начать работу с Raspberry Pi.
В этом проекте мы сначала показываем значение температуры на ЖК-дисплее, и через некоторое время мы показываем значения гироскопа, а затем, через некоторое время, у нас есть показания акселерометра, как показано на изображениях ниже:
Принципиальная схема и пояснения:
Принципиальная схема для взаимодействия MPU6050 с Raspberry Pi очень проста, здесь мы использовали ЖК-дисплей и MPU6050. Поток 10k используется для управления яркостью ЖК-дисплея. В связи с MPU6050 мы выполнили 4 соединения, в которых мы соединили источник питания 3,3 В и землю MPU6050 с 3,3 В и землей Raspberry Pi. Контакты SCL и SDA MPU6050 соединены с физическим контактом 3 (GPIO2) и контактом 5 (GPIO3) Raspberry. ЖК-индикаторы RS, RW и EN напрямую подключены к GPIO18 и 23 - к Raspberry Pi. Вывод данных напрямую подключен к цифровому контакту с номерами GPIO24, GPIO25, GPIO8 и GPIO7. Узнайте больше о взаимодействии ЖК-дисплея с Raspberry Pi здесь.
Настройка Raspberry Pi для гироскопического датчика MPU6050:
Перед началом программирования нам необходимо включить i2c Raspberry Pi с помощью данного метода:
Шаг 1. Включите связь I2C
Перед установкой библиотеки Adafruit SSD1306 нам необходимо включить связь I2C в Raspberry Pi.
Для этого введите в консоли Raspberry Pi:
sudo raspi -config
И тогда появится синий экран. Теперь выберите вариант интерфейса
После этого нам нужно выбрать I2C
Взаимодействие с другими людьми
После этого нам нужно выбрать да и нажать ввод, а затем ОК.
После этого нам нужно перезагрузить Raspberry Pi, выполнив следующую команду:
sodo reboot
Шаг 2: установите python-pip и библиотеку GPIO
sudo apt-get install build-essential python-dev python-pip
После этого нам нужно установить GPIO библиотеку raspberry pi
sudo pip устанавливает RPi.GPIO
Шаг 3: Установите библиотеку smbus
Наконец, нам нужно установить библиотеку smbus в Raspberry Pi, используя данную команду:
sudo apt-get install python-smbus
Шаг 4: Установите библиотеку MPU6050
После этого нам нужно установить библиотеку MPU6050 с помощью данной команды
sudo pip установить mpu6050
Теперь мы можем найти примеры кода в примерах. Пользователь может протестировать этот код, напрямую загрузив его в Raspberry Pi или настроив его в соответствии с требованиями. Здесь мы отобразили значения осей X, Y и Z MPU6050 на ЖК-дисплее 16x2. Вы можете найти полный код 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_Y = 0x45 GY47_X = 0x43 GYRO_Y = 0x45 Адрес GY41_EM_Z = 0x45 Устройство Smbus P = 0x45 GY41_EM_Z = устройство smb = 0x45 Адрес устройства GY41_EM_Z = 0x45 Адрес устройства AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Затем мы написали некоторые функции для Driving 16x2LCD, такие как def begin (), def cmd (ch), def write (ch), def Print (str), def clear () и т . Д. Вы можете дополнительно проверить интерфейс ЖК-дисплея с Raspberry Pi.
После этого нам нужно инициализировать модуль MPU6050.
def InitMPU (): bus.write_byte_data (адрес_устройства, DIV, 7) bus.write_byte_data (адрес_устройства, PWR_M, 1) bus.write_byte_data (адрес_устройства, CONFIG, 0) bus.write_byte_data (адрес_устройства), адрес_байта_данных, адрес_байта_данных, адрес_данных_устройства, GY, INT_EN, 1) time.sleep (1)
После этого нам нужно написать некоторые функции для чтения значений из MPU6050 и отображения их на ЖК-дисплее. Данная функция используется для чтения данных из 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 (): 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)
После этого мы написали функцию чтения температуры
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, инициализации и калибровки MPU6050, а затем в то время как цикл мы называем все все три набора значений MPU- температуры, акселерометр и гироскоп и показал их на ЖК - дисплее.
начать(); Print ("Интерфейс MPU6050") setCursor (0,1) Print ("Обзор схемы") time.sleep (2) InitMPU () calibrate () while 1: InitMPU () clear () для i в диапазоне (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