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

Основни характеристики на 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
| 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, с която можете напр. може да разчита много лесно съседните ъгли:
Фиг.: Извеждане на данните за ъгъла в серийната конзола