- Необходими компоненти:
- MPU6050 Жиросензор:
- Описание:
- Електрическа схема и обяснение:
- Конфигуриране на Raspberry Pi за жиросензор MPU6050:
- Обяснение на програмирането:
Сензорът MPU6050 има много функции над един чип. Състои се от акселерометър MEMS, жироскоп MEMS и температурен сензор. Този модул е много точен, докато преобразува аналогови стойности в цифрови, тъй като има 16bit аналогов в цифров преобразувател хардуер за всеки канал. Този модул може да улавя едновременно x, y и z канал. Той има I2C интерфейс за комуникация с хост контролера. Този модул MPU6050 е компактен чип с акселерометър и жироскоп. Това е много полезно устройство за много приложения като дронове, роботи, сензори за движение. Нарича се още жироскоп или тройноосен акселерометър.
Днес в тази статия ще се свържем с MPU6050 с Raspberry Pi и ще покажем стойностите над 16x2 LCD.
Необходими компоненти:
- Raspberry Pi
- MPU-6050
- 10K ПОТ
- Тел за джъмпер
- Макет
- Захранване
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.
Описание:
В тази статия показваме показания за температура, жироскоп и акселерометър върху LCD, използвайки MPU6050 с Raspberry Pi. Ако не сте запознати с Raspberry Pi, преминете през раздела за уроци по Raspberry Pi и научете как да започнете с Raspberry Pi.
В този проект първо показахме температурна стойност над LCD и след известно време показваме жироскопични стойности и след това след известно време имаме показания на акселерометъра, както е показано на изображенията по-долу:
Електрическа схема и обяснение:
Схемата за свързване на MPU6050 с Raspberry Pi е много проста, тук използвахме LCD и MPU6050. 10k пот се използва за контрол на яркостта на LCD. Във връзка с MPU6050 сме направили 4 връзки, в които сме свързали 3.3v захранване и земя на MPU6050 към 3.3v и земя на Raspberry Pi. SCL и SDA щифтовете на MPU6050 са свързани с физическия щифт 3 (GPIO2) и Pin 5 (GPIO3) на Raspberry. RS, RW и EN на LCD са директно свързани с GPIO18 и 23 от малинови пи. ПИН за данни са директно свързани с цифров пинов номер GPIO24, GPIO25, GPIO8 и GPIO7. Научете повече за свързването на LCD с 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 инсталирайте компилацията на 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 LCD. Можете да намерите пълния код на 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 GxRO_Z = 0bus = 0bus G0ROxD = 0x45 GxROBZ = 0bus45Gx47ZD = 0bus = G0ROxD = 0x45 GxROBZ = 0x45 GxRO_Z = 0 bus = 0bus G0ROxD = 0x45 GxROBZ = 0x45 GxROBZ = 0x45 GxROBZ = 0x45 GxROBZ = 0x45 GxROBZ = 0x45 GxROBZ AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Тогава сме написали някои функции за шофиране 16x2LCD като дефиниция започне (), деф CMD (СН), деф запис (СН), деф печат (STR), деф ясно () и др . Можете допълнително да проверите взаимодействието на LCD с 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_AddressONFrite_Adrite ADGress, GYRO_Adrite, GYRO_Adrite, GYRO, ADR, INT_EN, 1) time.sleep (1)
След това трябва да напишем някои функции, за да прочетем стойности от MPU6050 и да ги покажем на LCD. Дадена функция се използва за четене на данни от 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) дисплей (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- температура, акселерометър и жироскоп и ги показа над LCD.
начало (); Print ("MPU6050 Interface") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrate (), докато 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