- Необхідні компоненти:
- Гіроскопічний датчик 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. Для управління яскравістю РК-дисплея використовується 10-канальний горщик. У зв'язку з MPU6050 ми виконали 4 підключення, в яких підключили джерело живлення 3,3 в і землю MPU6050 до 3,3 в і землю Raspberry Pi. Виводи SCL та SDA MPU6050 підключені до фізичного виводу Raspberry 3 (GPIO2) та виводу 5 (GPIO3). RS, RW та EN рідкокристалічного екрану безпосередньо підключені до GPIO18 та 23 малини pi. Контакт для передачі даних безпосередньо підключений до цифрового номера PIN-коду 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
U
Після цього нам потрібно вибрати так і натиснути клавішу Enter, а потім добре
Після цього нам потрібно перезавантажити Raspberry Pi, виконавши команду нижче:
перезавантаження sodo
Крок 2: Встановіть python-pip та бібліотеку GPIO
sudo apt-get install build-vital python-dev python-pip
Після цього нам потрібно встановити бібліотеку Raspberry pi GPIO
sudo pip встановлює RPi.GPIO
Крок 3: Встановіть бібліотеку smbus
Нарешті, нам потрібно встановити бібліотеку smbus в Raspberry Pi за допомогою заданої команди:
sudo apt-get встановити 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 GYRO_Z = 0 автобус = 0 шина = G0ROXD = 0x45 GYRO_Z = 0 шина G0ROXP = 0x45 GxRO_Z = 0 шина = G0ROXD = 0x45 GxRO_Z = 0 шина = G0ROXP = 0x45 GxRO_Z = 0 шина = G0ROxP = 0x45 GxROBZ AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Потім ми написали деякі функції для керування 16x2LCD, такі як def begin (), def cmd (ch), def write (ch), def Print (str), def clear () тощо . Ви можете додатково перевірити взаємодію РК з Raspberry Pi.
Після цього нам потрібно ініціалізувати модуль 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_AddressONGYRO_Adrite, GYRO_Adrite, GYRO, 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- температури, акселерометр і гіроскоп і показав їх на ЖК - дисплеї.
begin (); Print ("MPU6050 Interface") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrate () while 1: InitMPU () clear () for i in range (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