Гироскоп-акселерометр GY-521 | 2 Схемы

Данный модуль представляет собой комбинированный датчик, объединяющий гироскоп, акселерометр и термометр. Акселерометр – это прибор, который измеряет ускорение тела. В состоянии покоя, либо равномерного прямолинейного движения на поверхности Земли акселерометр покажет только наличие ускорения, обусловленного действием поля силы тяжести Земли. Гироскоп способен реагировать на изменение ориентации тела в пространстве. И гироскоп, и акселерометр работают вдоль 3-х координатных осей. Для передачи информации устройство использует интерфейс I2C, это последовательный интерфейс позволяющий организовать обмен сообщениями по двухпроводной линии между 128 устройствами, одно из которых является главным, а остальные ведомыми [1-2]. Модуль гироскоп-акселерометр приобретен на Aliexpress.com

Модуль гироскоп-акселерометр на Aliexpress

Конструктивно модуль представляет собой печатную плату размером 20 х 15 мм, масса 1,5 г с припаянной гребенкой контактов.

Модуль гироскоп-акселерометр

Устройство поставляется в антистатическом пакете в комплекте с парой не припаянных контактных гребенок.

Непосредственно на печатной плате имеется маркировка контактных площадок, а также обозначены две геометрических оси X и Y, третья ось Z перпендикулярно плоскости платы, от наблюдателя, если смотреть со стороны радиокомпонентов.

Естественно данное устройство относится к весьма сложным датчикам. Досконально разобраться в работе подобных устройств сложно, да и не всегда нужно, можно просто воспринимать устройство как «черный ящик», когда мы знаем только какие сигналы надо в этот черный ящик отправит, и какие сигналы в ответ из него мы можем получить. Хотя разумеется чем больше знаний, тем лучше.

Подключение гироскопа к Arduino

Аппаратная платформа Arduino тем и хороша, что для большого количества стандартных датчиков можно найти готовые программные решения. Не является исключением и данное устройство [3-5].

Хотя в общей сложности GY-521 имеет 8 контактов для демонстрации совместной работы с Arduino UNO достаточно всего четырех проводов, остальные контакты нужны для более сложных вариантов взаимодействия [6]. В данном простейшем случае в качестве ведущего устройства выступает плата Arduino UNO. Выводы SDA и SLC гироскопа подключаются соответственно к контактам A4 и A5 платы Arduino [7]. Именно через эти выводы на Arduino UNO реализован данный интерфейс.

Вообще-то линии интерфейса I2C должны быть соединены с шиной питания через резисторы сопротивлением 4,7 кОм [1-2], но в случае одного датчика на макетной плате, все работало и так. Два варианта программы для Arduino, которые опрашивают гироскоп-акселерометр GY-521 можно скачать здесь [8].

Гироскоп-акселерометр питается напряжением 3,3 В от Arduino, ток потребления составляет около 5 мА.

На плате гироскопа-акселерометра располагается индикатор питания.

Испытания гироскопа

В мониторе последовательного порта Arduino IDE. Видно, что если прикоснуться к микросхеме на плате датчика рукой, то датчик покажет рост температуры.

Гироскоп-акселерометр GY-521

При изменении ориентации модуля в пространстве изменяется показания акселерометра, отображающие, вдоль какой оси (X,Y,Z соответственно) прибора действует ускорение свободного падения.

Влияние резкого поворота вдоль каждой из осей на показания гироскопа.

Помимо самого очевидного применения в летательных аппаратах гироскоп-акселерометр может оказаться полезным в умной одежде, всевозможных устройствах управления, балансирующих роботах [9], системах сигнализации и т.п. Одним словом интересное и недорогое устройство с широкими возможностями. Автор обзора — Denev.

  1. Блум Д. Изучаем Arduino: инструменты и методы технического волшебства: Пер. с англ. — СПб.: БХВ-Петербург, 2015. — 336 с.
  2. http://robocraft.ru/blog/communication/780.html
  3. http://forumdvrobot.ru/forum/3-41-1
  4. https://ngin.pro/index.php?newsid=188
  5. http://arduinoprojects.ru/2014/10/подключение-гироскопа-gy-521-mpu-6050-к-arduio/
  6. https://arduino-kit.ru/catalog/id/modul-3-h-osevogo-giroskopa-i-akselerometra-gy-521-mpu-6050
  7. https://mysku.ru/blog/china-stores/40178.html
  8. http://playground.arduino.cc/Main/MPU-6050#sketch
  9. http://robocraft.ru/blog/projects/570.html

Загрузка…

2shemi.ru

Модуль 3-х осевого гироскопа и акселерометра GY-521 MPU-6050

Напряжение питания 2,3 – 3,6 В. Номинальное 3,3 В. Микросхема MPU-6050 содержит запатентованный компанией InvenSense процессор обработки сигналов, вызванных движением Digital Motion Processor (DMP), способный обрабатывать алгоритмы MotionFusion. DMP может быть использован для сложных расчетов. Собственный процессор может делать расчеты, не отвлекая микроконтроллер и даже способен обрабатывать информацию от другого датчика, подключенного ко второй шине I2C. Специальная программа на языке команд DMP записывается в память каждый раз после подачи питания. Это занимает около секунды. Программа фильтрует показания акселерометра и гироскопа. Данные передаются в буфер FIFO. Некоторые рассуждения об этом здесь.
Для точного отслеживания движений предусмотрена возможность записи в память MPU-6050 актуальных пределов измерений. Данные можно считывать из регистров хранения или буфера FIFO размером 1024 байт. Микросхема MPU-6050 может работать в режиме мастер на шине I2C для контактов XDA и XCL. Содержит АЦП 16 бит. Есть регистр под названием Who am I (как меня зовут) хранящий адрес модуля GY-521 на шине I2C. Значение в регистре 104 десятичное или 68 шестнадцатеричное. Есть выход для прерываний МК, который настраивается под интересующее событие. Микросхема MPU-6050 содержит более 100 регистров.
Адрес микросхемы может быть двух значений (без бита чтения / записи) в зависимости от состояния вывода AD0 модуля 3-х осевого гироскопа и акселерометра GY-521 MPU-6050.
 
68 (шестнадцатиричное), если AD0 соединен с общим проводом.
69 (шестнадцатиричное), если AD0 соединен с потенциалом лог. 1.
 
Акселерометр микросхемы MPU-6050 использует пьезоэлектрический эффект. Представьте кубический ящик, имеющий внутри маленький шарик. Стенки этой коробки выполнены из пьезоэлектрических кристаллов. Когда вы наклоните коробку, шар будет двигаться в направлении наклона. Стена, с которой шар сталкивается, создает крошечные пьезоэлектрические токи. В зависимости от тока, получаемого от стен, определяется направление наклона и его величина.
Гироскоп представляет собой колеблющуюся пьезоэлектрическую пластину. При повороте пластина искривляется и ее электрические параметры меняются. Это регистрирует микросхема. Подробнее на видео.
 


 
Разработчики микросхемы MPU-6050 предоставляют инструменты, необходимые для создания приложений.
 
Схема модуля GY-521
 

 
Питание модуля GY-521 поступает на вход стабилизатора напряжения Q2 микросхема MIC5205-3.3BM5 с выходным напряжением 3,3 В. На стабилизаторе происходит небольшое падение напряжения 0,3 – 0,4 В, поэтому напряжение питания модуля должно быть выше 3,3 В. Индикатор питания модуля 3-х осевого гироскопа и акселерометра GY-521 MPU-6050 – светодиод D1. Величина резисторов R4 и R5 может отличаться от указанных на схеме.
 
Назначение контактов
 
VCC – напряжение питания
GND – общий провод
SCL – тактовый сигнал I2C
SDA – данные I2C
XDA – данные шины I2C при работе в режиме мастера
XCL – тактовый сигнал шины I2C при работе в режиме мастера
AD0 – бит 0 адреса I2C
INT – выход сигнала о готовности данных для использования как внешнего прерывания МК
  Подключение модуля 3-х осевого гироскопа и акселерометра GY-521 MPU-6050 к Arduino UNO.
 
5 V Arduino – VCC
 
GND Arduino – GND
 
A4 Arduino – SDA
 
A5 Arduino – SCL
 
GND Arduino – AD0
 
В зависимости от программы – INT
 
Подводные камни, рифы и турбулентность
 
При изучении работы микросхемы MPU-6050 гироскопа следует помнить, что механические гироскопы стабилизируются в пространстве за счет своих физических свойств. Электронный гироскоп так работать не может. Он лишь измеряет скорость вращения.
Каждый модуль GY-521 требует калибровки. Показания датчиков имеют некоторое смещение относительно нуля, что вносит погрешность в измерения. Нужно учесть это смещение для каждой оси гироскопа и каждой оси акселерометра, внести корректировку в программу. При производстве микросхем невозможно получить абсолютную точность угла между осями датчиков, поэтому угол между ними содержит погрешность. Также нельзя забывать о том, что данные от трех осей могут иметь разную пропорциональность.
Наибольшая точность результатов математических преобразований для получения параметров движения будет получена при синхронном считывании данных акселерометра и гироскопа.
При построении управляемой машины следует избегать в механизмах источников колебаний и их гармоник с частотой резонанса указанной в характеристиках.
При первом ознакомлении с модулем проверяют его работу на шине данных I2C. Для этого используют программу I2C сканер.
Внутреннее АЦП микросхемы очень чувствительно, его разрядность 16 бит. При такой чувствительности предъявляются повышенные требования к питанию модуля, несмотря на собственный стабилизатор. Здесь не подходит источник питания класса ”какой есть” на 5 В. Прежде всего надо разобраться с параметром используемого блока питания величина пульсаций или уровень шумов с помощью осциллографа. Величина шума в линии питания не должна превышать 50 мВ. Применение батарей в этих условия уместно, но это дорого. Установка конденсаторов не снизит шумы некачественного блока питания. Если блок питания шумит от него надо отказаться, заменить или собрать другой. В тоже время установка конденсаторов на линиях питания возле модуля GY-521 снизит влияние мощных электромагнитных помех. Рекомендуется провода питания перевить в витую пару. Нельзя использовать блок питания один и тот же для модуля и для питания двигателей. При калибровке модуль 3-х осевого гироскопа и акселерометра GY-521 MPU-6050 должен иметь собственный источник, отдельный от модуля МК и других потребителей. Если на этапе первого запуска еще можно смириться с повышенным шумом в питании, то на этапе калибровки это приведет к ошибкам, а о высокой точности измерений без качественного питания говорить не приходится.
 
Программирование на ардуино и математика
 
Один из способов использования модуля GY-521 – применение микроконтроллерного модуля Arduino. Программное обеспечение Arduino позволяет установить библиотеки для GY-521. Есть сложная библиотека I2Cdevlib для доступа к MPU-6050 и другим устройствам на шине I2C.
 

 
 Она устанавливается в папку MPU6050. Использует аппаратный буфер микросхемы и возможности цифровой обработки параметров движения MPU-6050 для выполнения преобразования данных между различными системами координат и объединяет данные от нескольких датчиков. Еще одна полезная библиотека FreeIMU, ориентированная на инерциальный измерительный блок из нескольких датчиков и может выполнять сложную обработку данных. FreeIMU использует I2Cdevlib, но последняя версия I2Cdevlib в комплекте с FreeIMU вызывает конфликт версий. Перед использованием следует убедиться в правильном выборе версии I2Cdevlib.
В конце этого раздела приведены ссылки на адаптированные программы. При работе программ будут получены примерно следующие числа, но их нужно преобразовать в значимые данные.
 
MPU-6050 
Read accel, temp and gyro, error = 0 
accel x,y,z: -123, -180, 14547 
temperature: 27.235 degrees Celsius 
gyro x,y,z : -6, -20, 52,
 
MPU-6050 
Read accel, temp and gyro, error = 0 
accel x,y,z: -195, -203, 14510 
temperature: 27.128 degrees Celsius 
gyro x,y,z : -15, 14, 72,
 
MPU-6050 
Read accel, temp and gyro, error = 0 
accel x,y,z: -232, -268, 14490 
temperature: 27.190 degrees Celsius 
gyro x,y,z : -4, -7, 45,
 
MPU-6050 
Read accel, temp and gyro, error = 0 
accel x,y,z: -189, -170, 14632
temperature: 27.199 degrees Celsius 
gyro x,y,z : -4, -7, 50,

 
В начале программы должна происходить калибровка по первым 10 данным для получения постоянных погрешностей (смещений) от датчиков. Смещения вычитаем из необработанных значений датчика до преобразования данных в углы.
Для вычисления ориентации акселерометром, мы опираемся на тот факт, что происходит постоянное гравитационное притяжение 1 g. Если нет дополнительных сил, действующих на акселерометр, то обнаруженная величина ускорения будет 1 g.
Согласно описанию MPU-6050 с. 13 (Sensitivity Scale Factor), сырые данные акселерометра программой преобразуются в ускорение свободного падения g=9,8 м/с^2 путем деления на коэффициент 16384. При перемещении и вращении датчика, данные акселерометра сильно колеблются. Если они могут быть очищены от шумов, то акселерометр обеспечит точные результаты.
Для вычисления ориентации, мы должны сначала инициализировать гироскоп с известным значением (возможно, от акселерометра), затем измерять угловую скорость ω через интервалы времени Δt. Тогда ω × Δt = изменение угла. Проблема с этим подходом заключается в том, что мы интегрируем. Многократное суммирование приращения ω × Δt приведет к увеличивающейся со временем ошибке. Это является причиной гироскопического дрейфа.
Деление сырых данных гироскопа на 131 дает угловую скорость в градусах в секунду. 131 — коэффициент чувствительности гироскопа в заданном режиме 250 град/с. Поскольку у него АЦП 16 бит, то модуль максимального необработанного значения равен 32767. Теперь 32767 / 250 = 131 условных единиц на градус в секунду. То есть, если необработанное значение равно 131, то угловая скорость равна 1 градус в секунду.
 С помощью этих данных можно получить положение объекта. Для этого мгновенное значение угловой скорости умножим на промежуток времени между опросами датчика гироскопа. Например, разрешение 2000 градусов в секунду, время между опросами 0,1 с, значение мгновенной скорости 210, значит 210*0,1=21 – за это время произошел поворот на 21 градус. Далее каждое полученное значение нужно сложить с предыдущим.
Как объяснено выше данные акселерометра и гироскопа склонны к систематическим ошибкам. Акселерометр обеспечивает получение точных данных в долгосрочной перспективе, но дает сильный шум при рассмотрении за короткий промежуток времени. Гироскоп обеспечивает получение точных данных о изменении ориентации за короткий промежуток времени, но при интеграции данных происходит дрейф.
Решение этих проблем заключается в использовании данных акселерометра и гироскопа вместе таким образом, чтобы ошибки взаимно уничтожались. Стандартный способ объединения – применение фильтра Калмана, который является довольно сложной методикой. Есть более простая аппроксимация для объединения этих двух типов данных – комплементарный фильтр. Хорошо объяснено здесь и здесь. Вот формула комбинирования данных обоих датчиков:
 
Угол фильтра = α × (Угол от гироскопа) + (1 − α) × (Угол от акселерометра)
α=τ/(τ + Δt)
Угол от гироскопа = (Последний угол измеренный фильтром) + ω×Δt
Δt = время выборки
 τ = постоянная времени превышающая интервалы между шумами
Угол фильтра – отфильтрованный, результирующий угол наклона
Рекомендуется время выборки около 0,04 с и постоянная времени около 1 с, что дает α≈0,96.
 
Величина угла наклона представляет собой сумму интегрированного значения гироскопа и мгновенного значения акселерометра. Главная задача комплементарного фильтра в том, чтобы ликвидировать дрейф нуля гироскопа и ошибки дискретного интегрирования. На каждом шаге интегрирования (шаге цикла управления машиной) корректируется интеграл угла наклона с помощью показаний акселерометра. Сила этой коррекции определяется коэффициентом фильтра α. Выбор коэффициента α зависит от величины дрейфа нуля гироскопа, от скорости накопления ошибок вычисления и от условий использования машины. Так, слишком малое значение α приведет к тому, что на результат работы фильтра будет влиять вибрация корпуса. Как правило, коэффициент комплементарного фильтра подбирается вручную для каждого случая.
 
Программное обеспечение модуля 3-х осевого гироскопа и акселерометра GY-521 MPU-6050 для ардуино:
GY_521_send_serial
ShowGY521Data
 
Англоязычная версия этого раздела, а продолжение разговора здесь.
 
Современное применение акселерометра и гироскопа:
 

 
 
Микросхема MPU-6050
            Описание

            Страница производителя 1

            Страница производителя 2

            О регистрах
            описание

            on-line

Домашняя страница MPU-6050 Accelerometer + Gyro
            объемная

            короткая

Вики

Программа Krodal

 

arduino-kit.ru

MPU-6050 – гироскоп – акселерометр

Трехосевой гироскоп с трехосевым акселерометром MPU-6050 очень доступен по цене, чем и приобрел себе популярность. Этот датчик применяется для определения положения в пространстве, в системах стабилизации положения, стабилизации прямолинейного движения и движения по заданной кривой. Например, в балансирных роботах, в игровых приставках, применяется в робототехнике, для измерения углов наклона, скорости вращения, в авиамоделизме его применяют в автопилотах. Датчик может применяться для измерения перегрузок и тому подобное.

Схема подключения

Для подключения к контроллеру или микрокомпьютеру, у датчика имеется шина I2C.

Документация по датчику скачать здесь: MPU-6000 and MPU-6050 Product Specification Revision 3.2
Описание регистров здесь: MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.0

Скачать примеры на Python

Для Raspberry Pi (OS: Raspbian) примеры скриптов можно скачать и развернуть так:

git clone https://github.com/avislab/sensorstest.git

Калибровка

Если считать данные с датчика можно заметить некоторую погрешность. Например, при абсолютном покое датчика показания гироскопа будут отличаться от нуля.
А показания акселерометра по модулю могут превышать 1. См. работу скрипта mpu6050_get_raw_no_calibr.py. Дело в том, что каждый экземпляр датчика требует калибровки. У некоторых цифровых датчиков можно встретить корректировочные коэффициенты, которые для каждого экземпляра прошивают в память датчика на этапе производства. К сожалению, в этом датчике такого нет, и мы сами должны позаботиться о калибровке. Показания датчиков имеют некоторое смещение относительно нуля, что и вносит погрешность в измерения. Нам нужно учесть это смещение для каждой оси гироскопа и каждой оси акселерометра и вносить корректировку при расчетах.

На самом деле присутствуют и другие погрешности. Например, трехосевые датчики должны располагаться взаимно перпендикулярно. Но при производстве трудно добиться абсолютной точности, поэтому этот угол также имеет определенные допуски и влияет на погрешность. Кроме того показания датчиков с трех осей могут иметь разную пропорциональность. В данном случае наибольшая погрешность из-за смещения относительно нуля.


В примере я предусмотрел процедуру калибровки. Скрипт калибровки: mpu6050_calibr.py. Калибровка выполняется в два этапа. Сначала датчик должен быть неподвижен. Подразумевается, что угловые скорости равны нулю. Калибруется гироскоп. Затем калибруется акселерометр. Нужно его не спеша поворачивать во всех направлениях. Эта процедура занимает около минуты. После чего функция калибровки выдает вычисленные значения, которые нужно прописать в скрипте. На этом калибровка закончена. После калибровки погрешность значительно снизится. См. Скрипт: mpu6050_get_raw.py. В этом скрипте в следующих строках указываются калибровочные данные:

mpu.gyro_offs = {'x': -178, 'y': 259, 'z': -104}
mpu.accel_offs =  {'y': -354, 'x': 389, 'z': -1482}

Гироскоп

Гироскоп измеряет угловые скорости по трем осям с разными пределами измерений: 250, 500, 1000, и 2000 градусов в секунду. Пределы измерения могут быть выставлены в соответствии с Вашими задачами. Не стоит устанавливать без необходимости максимальные пределы, если у вас достаточно медленная система. Правильно выбранные пределы повысят точность измерений.

Для тех, кто ранее был знаком с механическими гироскопами, могут возникнуть некоторые неопределенности. Дело в том, что механические гироскопы стабилизируются в пространстве за счет своих физических свойств. Электронные гироскопы этого делать не могут, они лишь измеряют скорость вращения вокруг осей и ничего не могут сообщить о текущем положении системы.

С помощью электронного гироскопа можно определить положение системы следующим образом. При включении принять начальное положение за нулевую позицию. Затем опрашивать гироскоп с заданным интервалом, зная интервал и скорость вращения, вычислять смещение и добавлять к текущему положению. При этом мы предполагаем, что между двумя опросами датчика система поворачивалась с постоянной скоростью. Такой подход ведет к неизбежному накоплению ошибки. Что видно на примере. Смотри работу скрипта: mpu5060_gyro.py  или скрипта, графически отображающего положение гироскопа pyplay_gyro.py.

Акселерометр

Для определения положения системы можно использовать трехосевой акселерометр. Акселерометр также имеет настраиваемые пределы измерений ±2g, ±4g, ±8g і ±16g. Эти пределы устанавливаются в зависимости от динамичности Вашей системы. Напомню, что на любое тело действует сила притяжения. В состоянии покоя g=1. В состоянии свободного падения, когда тело движется к земле с ускорением 9,81 м/с2 – g=0. При разных ускорениях g будет разным. Чем выше ускорение, тем больше g. Поэтому если у Вас достаточно медленная, задемпфированная система, которая физически не способна быстро ускоряться, не стоит устанавливать максимальные пределы измерений. Правильно выбранный диапазон измерений упростит в будущем фильтрацию показаний датчика.

Когда мы поворачиваем датчик в пространстве, показания акселерометра на каждой из трех осей будет изменяться в зависимости от положения. Так, с помощью трехосевого акселерометра под воздействием силы тяжести можно определить положение системы. См. работу скрипта mpu6050_accel_no_filter.py.

Мы видим, что значения достаточно зашумлены. Попробуем их фильтровать. Я применил очень упрощенный фильтр Калмана. См. работу скрипта mpu6050_accel_kf.py. Показания стали более стабильными, однако в нашем случае фильтр малополезен. Если датчик потрясти, мы увидим, что показания углов изменяются и иногда очень сильно, хотя мы его не поворачиваем, а перемещаем с ускорением вдоль осей. Это логично, поскольку на акселерометр теперь кроме силы тяжести действует дополнительная сила, и результирующий вектор изменяет направление. Наглядно это видно на примере скрипта pyplay_accel.py (в этом скрипте фильтрация не используется). Здесь простая фильтрация только частично улучшает ситуацию. В решении этой проблемы нам поможет гироскоп. Именно он может нам сказать, что система-то не вращалась, и поэтому мы можем эти колебания отфильтровать.

Совместное использование гироскопа и акселерометра

Использование отдельно акселерометра или отдельно гироскопа не даст желаемого результата, только их совместное использование с применением фильтрации с учетом показаний двух датчиков дает приемлемый результат. В примере реализован один из способов комплементарного фильтра. Он достаточно прост и работает следующим образом.
За первоначальное положение принимается положение, вычисленное на основании данных акселерометра. Затем с заданным интервалом вычисляются положение на основе данных гироскопа и положение на основе данных акселерометра. Затем вычисленные показания сводятся в общий финальный результат. При этом акселерометр корректирует “дрейф” гироскопа, а гироскоп сглаживает скачки акселерометра при вибрациях и ускорениях. Математически это представляется следующей формулой.

См. работу скрипта mpu6050_final.py или скрипта pyplay_final.py, который графически изображает процесс работы MPU-6050

MotionApps

Если Вам не хочется усложнять себе жизнь с реализацией собственного фильтра, или вычислительных мощностей не достаточно для его работы, можно пойти другим путем. Применительно к этому датчику существует понятие MotionApps. Это некий бинарный код, который записывается в память датчика. Код записывается в энергозависимую память, поэтому его нужно записывать каждый раз после подачи питания. Это занимает около секунды. Код собирает и фильтрует показания со всех осей акселерометра и гироскопа. Данные складываются в буфер FIFO. Собственно, Вам остается дождаться готовности данных и считать буфер со всеми показаниями. Пример на Питоне, который я нашел на GiHub: https://github.com/cTn-dev/PyComms/tree/master/MPU6050

Кто использует Arduino, тоже без труда найдут в интернете аналогичные примеры.

В особенности работы MotionApps я не вникал. Думаю, это тема для отдельной статьи. Меня больше интересовала собственная реализация на Python.

Визуализация

Для наглядности я привел несколько простых примеров для графического отображения положения системы. В этих примерах используется pygame. Запуск этих скриптов рекомендуется выполнять из графической оболочки.

Успехов.

Смотри также:

www.avislab.com

поэтапная сборка и настройка своими руками

Здравствуйте, наши уважаемые читатели. В этой статье мы поговорим про то, как собрать квадрокоптер на Ардуино. Это не самая простая, хотя и очень увлекательная задача, результатом решения которой станет появление небольшого беспилотника, спроектированного, собранного, и настроенного собственными руками. Сразу оговоримся, что речь идет о максимально дешевом дроне из наиболее доступных по цене комплектующих.

Необходимые детали и узлы

Прежде чем приступить к сборке квадрокоптера своими руками, необходимо обзавестись всеми необходимыми деталями. Мозгом нашей самоделки станет полетный контроллер Arduino Uno. Его возможностей более чем достаточно для того, чтобы управлять беспилотником.

Помимо микроконтроллера, нам понадобятся:

  • Аккумулятор (лучше несколько) на 3.7В
  • Плата MPU-6050 (на ней установлены гироскоп и акселерометр)
  • Транзистор ULN2003A
  • Коллекторные двигатели с полым ротором 0820
  • Провода

Необходимо сделать несколько замечаний. Так как мы собираем дешевый самодельный дрон, то наш выбор пал на коллекторные движки с полым ротором (так называемые coreless motors). Они далеко не так надежны, как бесколлекторные двигатели, но зато гораздо дешевле стоят. Кроме того, можно обойтись без дополнительных контроллеров скорости.

Зато невозможно обойтись без гироскопа и акселерометра. Гироскоп необходим для того, чтобы квадрокоптер мог удерживать заданное направление движения, тогда как акселерометр используется для измерения ускорения. Без этих устройств управлять коптером было бы гораздо сложнее (если вообще возможно), так как именно они предоставляют данные для сигнала, регулирующего скорость вращения винтов.

Мы не указали в списке необходимых деталей раму. Ее можно приобрести, а можно распечатать на 3D принтере каркас, лучи и крепления для двигателей. Второй вариант нам кажется более предпочтительным, тем более, что в интернете можно без труда найти проекты квадрокоптера.

Распечатанная на принтере рама окажется не только легкой, но и прочной. Но если доступа к 3D принтеру нет, раму можно заказать.

Пошаговая инструкция по сборке

Как напечатать раму и крепеж

3D принтеры можно найти во многих университетах, лабораториях, коворкингах. Зачастую доступ к ним бесплатный. Модели для печати можно создать самостоятельно, используя для этого, например, Solidworks. А можно воспользоваться уже готовыми решениями, при необходимости изменив параметры.

Как настроить акселерометр гироскопа

Для настройки акселерометра-гироскопа (I2C)мы рекомендуем использовать следующую библиотеку. Ни в коем случае не подключайте плату к напряжению 5В, иначе вы моментально ее испортите.

Вкратце расскажем, чем интересна плата I2C с датчиками. Она заметно отличается от обычной платы акселерометра с тремя аналоговыми выходами для осей X, Y, Z. I2C представляет собой интерфейсную шину, обеспечивающую передачу значительных объемов данных через логические цифровые импульсы.

Аналоговых выходов на плате не много, и в этом большой плюс I2C, ведь в противном случае нам бы пришлось использовать все порты на Arduino, чтобы получить данные от гироскопа и акселерометра.

Схема подключения к Arduino

Прежде чем плата I2C сможет обмениваться данными с Arduino, ее необходимо подключить к контроллеру.

Схема следующая:

  • VDD -3.3v
  • GND — GND
  • INT- digital 2
  • SCL — A5
  • SDA — A4
  • VIO – GND

Еще раз обращаем внимание на то, что для питания необходимо использовать необходимо именно 3.3В. Подключение платы к 5В скорее всего приведет к ее поломке (спасти может только регулятор напряжения, но он далеко не всегда присутствует на плате).

Если на плате присутствует контакт AD0, он подключается к земле (GND).

В библиотеке, на которую мы дали ссылку выше, используются перечисленные каналы.

Скетч для Arduino

Преимуществом выбранного для сборки дрона микроконтроллера является относительная простота работы с ним. Вам не придется читать специальные книги, документы и техническую документацию. Достаточно знать основы программирования Arduino, которые, как вы сейчас убедитесь, не так сложны.

Подсоединив плату MPU-6050 к контроллеру, включите его и перейдите по ссылке.

Нас интересует скетч I2C scanner code, вернее, его код.

Скопируйте программный код, вставьте в пустой скетч, после чего запустите его. Убедитесь, что подключение установлено к 9600 (для этого запустите Arduino IDE через Tools-Serial Monitor). Должно появиться устройство I2C с адресом 0×68 либо 0×69. Запишите или запомните адрес. Если же адрес не присвоился, скорее всего проблема в подключении к электронике Arduino.

Затем нам понадобится скетч, умеющий обрабатывать данные гироскопа и акселерометра. В интернете есть множество вариантов, и найти подходящий не проблема. Скорее всего, он будет в заархивированном виде. Разархивируйте скачанный архив, отройте Arduino IDE и добавьте библиотеку (sketch-import library-add library). Нам понадобятся папки MPU6050 и I2Cdev.

Открываем MPU6050_DMP6 и внимательно просматриваем код. Никаких сложных действий производить не придется, но если был присвоен адрес 0×60, то необходимо расскоментировать строку в верхней части (ее можно найти за #includes) и написать верный адрес. Изначально таv указан 0×68.

Загружаем программу, открываем окно монитора через 115200 и просто следуем инструкции. Через несколько мгновений вы получите данные с гироскопа/акселерометра. Затем следует провести калибровку датчиков.

Установите плату на ровную поверхность и запустите скетч MPU6050_calibration.ino (легко ищется в интернете). Просмотрите код, по умолчанию в нем указан адрес 0×68. После запуска программы у вас появится информация по отклонениям (offset). Запишите ее, она нам понадобится в скетче MPU6050_DMP6.

Все, вы получили функционирующие гироскоп и акселерометр.

Программа для Arduino

По ссылке вы сможете скачать программу для Arduino, с помощью которой коптер будет стабилизирован в полете и сможет зависнуть над землей. В дополнение к программе обязательно скачайте библиотеку с Arduino PID по ссылке.

Программа поможет вам управлять дроном. Алгоритм, используемый для стабилизации, основан на двух PID-контроллерах. Один предназначен для крена, другой – для тангажа.

Разница в скоростях вращения пары винтов 1 и 2 равна разнице в скоростях пары винтов 3 и 4. Тоже самое справедливо и для пар 1, 3 и 2, 4. PID-регулятор производит изменение разницы в скорости, после чего крен и тангаж становятся равными нулю.

Обратите внимание на цифровые пины Arduino для моторов и не забудьте изменить скетч.

Подключение к контроллеру

Для того, чтобы управлять коптером, нам необходимо получить контроль над моторами, подключив их к Arduino. Контроллер дает на выходе лишь небольшое напряжение и силу тока, поэтому подключение двигателей напрямую лишено смысла. Вместо этого можно поставить несколько транзисторов, позволяющих увеличить напряжение.

Для составления схемы нам необходимы:

  • Arduino
  • Двигатели
  • Транзисторы

Все это собирается на монтажной плате и соединяется коннекторами.

На первом этапе следует подсоединить 4 ШИМ выхода (обозначены ~) к транзистору. Затем подсоедините коннекторы к движкам, подключенным к питанию. В нашем случае мы используем аккумулятор на 5В, но подойдет и аккумулятор на 3-5В.

Транзисторы должны быть заземлены, а земля на плате Arduino должна быть подключена к земле аккумулятора. Двигатели должны вращаться в правильном направлении, то есть работать на подъем коптера, а не на его крен.

Переключив контакт двигателя с напряжения 5В на транзистор, вы увидите, что ротор изменит направление вращения. Единожды совершив настройку, больше возвращаться к изменению направления вращения ротора не придется. Теперь нас интересует скорость.

Запустив и проверив акселерометр, мы устанавливаем нашу схему на ProtoBoard. За ее неимением, можно использовать и обычную монтажную плату, предварительно напаяв на ней рельсы для контроллера.

Перед тем, как припаивать акселерометр к плате, необходимо выполнить его калибровку на горизонтальной поверхности. Это поможет добиться более точной работы сенсора в будущем.

Как еще можно модернизировать квадрик

Узким местом коптера являются его коллекторные движки. Если поискать, можно найти чуть более крупные и более мощные моторы, чем предложены в нашей статье, но значительного выигрыша в характеристиках не произойдет.

Впрочем, у нас была цель собрать недорогой квадрокоптер своими руками, и именно поэтому использовались дешевые моторы. Бесколлекторные двигатели заметно дороже, но зато они дадут вам заметно большую мощность и надежность. К ним придется докупить еще и контроллеры скорости, но это действительно эффективная модернизация.

Выбор платы Arduino Uno обусловлен тем, что с нее можно довольно легко снять чип и поставить его на ProtoBoard. Это позволяет уменьшить вес дрона на 30 грамм, но придется включить в схему дополнительные конденсаторы. Подойдет и плата Arduino Pro Mini.

Что касается программы Arduino, то ее можно сравнительно легко изменить и дополнить новыми функциями. Главное, что с ее помощью дрон способен в автоматическом режиме стабилизовать свое положение.

На квадрокоптер могут быть установлены дополнительные модули, например, плата приемника, что позволит организовать дистанционное управление дроном.

На этом мы завершаем статью о создании беспилотника на Arduino. Подписывайтесь на наши обзоры и делитесь полезными материалами в социальных сетях. До новых встреч.

Загрузка…

drongeek.ru

Arduino + гироскоп/акселерометр == диспетчер полетов …?

Well,

It sound a little bit limited.

I assume that a flight controller performs dead reckoning by double integrating the measured accelerations. And because this computation is relative and not absolute, errors will sums up and you will have a drift. Thus you have to reduce every sources of errors. One of them is the quantization noise due to the fixed point math. Of course you could use high precision floating point math. But if you think of the amount of required computations and the fact that the ATMega does not have floating point support, it looks difficult. And if you want to add a GPS and implement some Kalman filters for sensor fusion, it will definitely be too demanding for that MCU.

To be more specific:

  • To maintain the balance of a flying vehicle you have to determine the relative angles of your vehicle. This cannot be achieved by a simple reading of an accelerometer output because the accelerometer will measure the gravity vector AND the accelerations of your vehicle. In real systems, high precision gyroscopes are used. But it’s expensive, bulky and not practical. A cheaper way to do this is to use a rate gyro sensor. It’s small, easy to interface and cheap. The output of a rate gyro is a signal which is proportional to the angular speed measured by the chip. If you integrate this signal ( sum ) you have the angular position of the chip. It sounds nice. But the problem is the drift. You have to continuously add measured values. But in real systems measured value is defined by :
    $measuredValue = measuredEffects + errors$ After some times, even if the vehicle is no moving at all, the angles returned by your algorithm will be significantly different from the real position of the vehicle due to the fact that errors sum up too. In order to avoid that, you have to sample your sensor at a high rate, reduce sources of noise (especially in the computation by using high precisions ) and use the fact that your vehicle should be flat most of the time and use that to try to cancel the drifts.

  • And yes, you have to continuously read the rate gyro output and sum the read value. But continuous things do not exist in a discrete world… Thus you have to do it at a high rate. I have values such as 100Hz or 1kHz in mind. This has to be checked.

  • For the control of the vehicle itself: Once you have a m

electronics.stackovernet.com

arduino — Как читать гироскоп/акселерометр

I recently purchased this MPU6050 GY-521 breakout board. I tried it with my Arduino Mega using this Arduino sketch provided by official arduino.cc.
(MPU-6050 Datasheet, InvenSence (producer) Page)

Man, it gives this weird output!!!

InvenSense MPU-6050
June 2012
WHO_AM_I : 68, error = 0
PWR_MGMT_2 : 0, error = 0

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1944, 368, 15608
temperature: 30.576 degrees Celsius
gyro x,y,z : -34, -204, -247, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1952, 364, 15304
temperature: 30.435 degrees Celsius
gyro x,y,z : -38, -216, -274, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1864, 388, 15356
temperature: 30.482 degrees Celsius
gyro x,y,z : -34, -233, -278, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1888, 324, 15260
temperature: 30.576 degrees Celsius
gyro x,y,z : -14, -220, -261, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1904, 392, 15316
temperature: 30.624 degrees Celsius
gyro x,y,z : -34, -241, -238, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1856, 308, 15604
temperature: 30.435 degrees Celsius
gyro x,y,z : -33, -252, -235, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1892, 444, 15528
temperature: 30.624 degrees Celsius
gyro x,y,z : 20, -236, -251, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1924, 356, 15520
temperature: 30.576 degrees Celsius
gyro x,y,z : -19, -224, -251, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1844, 280, 15732
temperature: 30.529 degrees Celsius
gyro x,y,z : -1, -240, -249, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 2004, 372, 15396
temperature: 30.671 degrees Celsius
gyro x,y,z : -20, -252, -255, 

(This is only a part of it, it gives this king of output continuously). I know for sure, only the temperature reading is meaningful. But what are those values given for acceleration and gyro readings??

OK, It says those are raw values. If it is so, then how can I convert them into meaningful values. Hoping it can be helpful (as many suggested), I also like to know how to use so called Jeff Rowberg library.

Hope there will be someone experienced with MPU-6050 module. Just give me a point to start. I have no clue on how to use the module… 🙁

Any help is greatly appreciated. Thanks !

electronics.stackovernet.com

Империя — Поисковый онлайн видео сервис

Tired of missing premieres at the cinema because of the frenzied rhythm of life? Tired of the fact that on television, the films are being broadcasted at an inconvenient time for you? In your family, often your relatives divide the remote from the TV? The child asks to see cartoons for children, when you are busy, and on the channels there are no good cartoons? And, in the end,
Do you just want to relax after a hard day on the sofa in your home clothes for watching an interesting movie or series?

To do this, it is best to always have a favorite site in your bookmarks, which will become your best friend and helper. And how to choose such a site, when there are so many? — you ask.
The best choice for you will be imperiya.by

Why our resource? Because it combines many positive features that make it universal, convenient and simple. Here is a list of the main advantages of the resource.

  1. Free access.
    Many sites ask customers to buy a subscription, than our portal does not deal with, because it believes that people should have free access to the Internet in everything. We do not charge viewers for our viewers!

  2. You do not need any registration and SMS for questionable phone numbers.
    We do not collect confidential information about our users. Everyone has the right to anonymity on the Internet, which we support.

  3. Excellent video quality. We upload content exclusively in HD format, which certainly can please your favorite users.
    It is much more pleasant to watch a good movie with a quality picture than with a picture of poor quality.

  4. A huge choice. Here you will find a video for every taste. Even the most inveterate moviegoer will always find what to see from us. For children there are cartoons in good quality, cognitive programs about animals and nature
    . Men will find interesting channels for themselves about news, sports, cars, as well as about science and technology. And for our beloved women, we picked up a channel about fashion and style, about celebrities, and of course music videos. Having arranged an evening with your family, or with friends, you can pick up a merry family comedy.
    A loving couple to luxuriate in watching a love melodrama. After a day of work, a thrilling series or a detective helps to relax. Movies in HD format of the new time and past years are presented to absolutely any taste and can satisfy the needs of any viewer.

  5. Ability to download video.
    Absolutely any material on the site can be downloaded to your computer or USB flash drive. If suddenly you are going to a dacha with a laptop where there is no internet, or you want to watch a movie on a big screen of the TV, you can always download in advance, and then look at the right time. In this case, you do not have to wait for your turn to download the video,
    as it happens on torrents or other similar sites.

  6. Security. We monitor the cleanliness of the content, every file is checked before uploading. Therefore, there are no viruses and spyware on our site, and we carefully monitor this.

  7. New.
    We regularly update and add new animations, serials, TV shows, music videos, news, reviews, animated series, etc. to the portal. and all this you can see for free, without registration and SMS. We are trying for you, for our favorite visitors.

  8. Online browsing.
    On our site, it is not necessary to first download a movie to view it, simply turn it on and enjoy it. Thanks to the professional setup, there will be no braking, and nothing can stop you from watching an interesting movie.

  9. Bookmark.
    On the site you can click a button with an asterisk to poison the video in the bookmarks and return to it later. Everyone, for certain, happened that he saw on the site an interesting video that you want to see, but right now there is no possibility. This button will help you with this and, having freed yourself, you can easily see what you like.

  10. User-friendly interface. Finding the right video will not take you long, as the site is best adapted to users, and everything is intuitively understandable. Even a child will be able to understand and include for himself a cartoon or some program about animals, nature.

Cinema as art appeared relatively recently, but already managed to closely intertwine with our lives. A lot of people because of the haste of our time for years did not go to the theater, to the gallery or museums. However, it is difficult to imagine a person who did not watch the series or the film for at least a month. Cinema is a synthesis of theater, music,
fine arts and literature. Thus, it gives even the most busy person, who does not have time to go to theaters and galleries, to be closer to art and to improve spiritually.

The cinema also occupied the sphere of public entertainment. Watch comedies, fighters, westerns, etc. perfectly fits into any
some evening with my family. Horrors perfectly tickle the nerves of even the most fearless person. Cartoons adore children, and some can be viewed by the whole family. Cognitive videos help to expand knowledge, look at the world wider and satisfy your own natural curiosity.

A man in the twenty-first century can no longer imagine his life without the technology of the future, it seems that in the future, machines, robots and technics can replace a person, or rather perform many automatic works, so everyone wants to see what technologies will be in the future. On imperiya.by you do not need to postpone the scan,
just add the video to the bookmarks and at any time you can return to it and have a great time watching the quality video.

Do not deny yourself the pleasure, start watching right now! Meet the updates, with new items, choose what you would like to see later.
Pleasure yourself and your family with interesting films in good quality!

imperiya.by

alexxlab

Отправить ответ

avatar
  Подписаться  
Уведомление о