3-осен сензор за ускорение и позиция с Arduino

Става въпрос за сензорния чип MPU-6050, инсталиран на модула GY-521. Използвайки този 3-осов жироскоп и 3-осен сензор за ускорение, 6 степени на свобода (DOF = "Degrees Of Freedom") могат да бъдат разпознати едновременно. Сензорът може също да измерва околната температура.

ускорение
Фиг.: Модул GY-521

Основни характеристики на GY-521 (според производителя)

  • Чип: MPU-6050 (от производителя InvenSense)
  • 16-битов AD конвертор
  • Обхват на акселерометъра: ± 2, ± 4, ± 8, ± 16g
  • Обхват на жироскопа: ± 250 °, 500 °, 1000 °, 2000 °/s
  • Обхват на напрежението: 3.3V - 5V (регулатор на напрежението = LDO с ниско отпадане на модула)

Вътрешна структура на GY-521

Модулът има I²C шина, чрез която микроконтролер - като Arduino - може лесно да бъде свързан. Възможно е 3.3V да не са достатъчни за правилната работа на I²C шината, така че - ако е възможно - 5V винаги трябва да се използва като захранване.
Модулът има издърпващи резистори за I²C шина, които понякога могат да бъдат 10kΩ, а понякога 2.2KΩ. Последната стойност е доста ниска, което може да доведе до проблеми, ако се използват други сензорни модули. Тук трябва да помогне допълнителен външен издърпващ резистор.
Някои от модулите GY-521 имат грешен (или лош) кондензатор, което може да доведе до висок шум при измерванията.

Фиг.: 2.2KΩ издърпващи резистори на модула GY-521

Сензорът разполага и с DMP устройство ("Цифров процесор на движение"), което може да бъде програмирано с фърмуер и позволява по-сложни изчисления да се извършват директно върху сензорния чип. Очевидно обаче InvenSense не публикува достатъчно спецификации за това, така че тези възможности да могат да бъдат отворени чрез обратен инженеринг.

Фиг.: Вътрешна електрическа схема на модула GY-521

Връзки на GY-521

Функция Pin Pin Pin Arduino Uno
VCC Захранване (3.3V до 5V) (вътрешен регулатор на напрежението) 3.3V или 5V
GND Маса/Земя GND
SCL Сериен часовник (I²C) A5
SDA Серийни данни (I²C) A4
XDA Спомагателни данни (= I²C главни серийни данни, за свързване на модула към външни модули) (не се използва тук)
XCL Спомагателен часовник (= I²C главен сериен часовник, за свързване на модула към външни модули) (не се използва тук)
AD0 Промяна на I²C адреса:
НИСКО: 0x68
ВИСОКО: 0x69
GND
INT Прекъсване на цифровия изход (опционална връзка за последователно свързване на няколко модула) (не се използва тук)

Използвани компоненти

  • Основни инструменти и ресурси
  • Arduino UNO (или съвместима платка)
  • Модул GY-521
  • Вграден кабел ("джъмпер кабел")
  • Макет

Незадължителна софтуерна библиотека: I2Cdevlib и MPU6050 код

строителство

Пример 1: Извеждане на суровите данни в серийната конзола

Следващата скица контролира модула GY-521, чете всички налични данни за фиксиран интервал от време (тук: 1s) и след това ги извежда в серийната конзола. Тези необработени данни се четат лесно. Трябва да се деактивира само "режим на заспиване" и сега могат да се четат стойностите на сензора на жироскопа, сензора за ускорение и температурата. В точката Wire.requestFrom (MPU6050_ADRESS, 7 * 2, true) се четат 14 байта от регистъра. Това е така, защото всички 7 налични измерени стойности на сензора имат 2 байта (= 16 бита).

скица

Резултат

В IDE на Arduino от версия 1.6.6 в допълнение към серийната конзола се предлага така нареченият сериен плотер. За да може да се използва това, стойностите се разделят с интервали (или раздели) със Serial.print () и се отпечатват с прекъсване на ред, напр. Serial.println () завършен. Ето как графичните стойности на изходните стойности могат да бъдат проследени:

Фиг.: Извеждане на суровите данни в серийния плотер

Пример 3: Измерете ъгли с MPU-6050

След прочитане на данните на сензора, следващата скица изчислява правилния ъгъл на сензора и го извежда на свой ред към серийната конзола.

скица

Резултат

Пример 2: Графичен изход в „Обработка“

За да се представи по-добре функционалността на сензора, определените стойности сега се прехвърлят в Обработка и се визуализират там в реално време. Скиците са от уебсайта "Geek Mom Projects"

Фиг.: Извеждане на данните в серийната конзола Видео: Демонстрация на живо в обработка

Библиотека "Adafruit_MPU6050"

Ако използвате библиотеката Adafruit_MPU6050, можете да получите по-ясен достъп до стойностите на MPU6050 и много лесно да използвате и режима на заспиване на модула. Това може да бъде от особен интерес за проекти, работещи с батерии, където трябва да се пести електричество. Както е показано в следващия пример, стойностите на MPU6050 първоначално се отчитат нормално като справка и се изпращат на серийния плотер. Вторият режим е циклов режим, който измерва на определени интервали и по този начин води до малко по-груба разделителна способност на данните. Третият режим поставя модула в режим на заспиване, т.е. не се правят повече измервания. Въпреки това, последните данни за измерване все още могат да бъдат прочетени от регистрите на модула.

Фиг.: Извеждане на суровите данни в серийния плотер

Библиотека "MPU6050_light"

Друга полезна библиотека е MPU6050_light, с която можете напр. може да разчита много лесно съседните ъгли:

Фиг.: Извеждане на данните за ъгъла в серийната конзола