СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

«Самобалансирующийй робот на Ардуино»

Категория: Прочее

Нажмите, чтобы узнать подробности

Данная методическая разработка предназначена для ознакомления учащихся с основным принципам балансировки на гироскопе-акселерометре MPU6050. Содержание методической разработки содержит описание принципа работы модуля и создания простой модели самобалансируемого робота.

Просмотр содержимого документа
««Самобалансирующийй робот на Ардуино»»

Муниципальное бюджетное учреждение

дополнительного образования «Станция юных техников»

города Каменск-Шахтинский









  1. Самобалансирующийй робот

  2. на Ардуино

Методическая разработка

(Для учащихся робототехнических объединений учреждений дополнительного образования)







Автор: Барышев Е. В.

педагог дополнительного образования.







Пояснительная записка.



Данная методическая разработка предназначена для ознакомления учащихся с основным принципам балансировки на гироскопе-акселерометре MPU6050. Содержание методической разработки содержит описание принципа работы модуля и создания простой модели самобалансируемого робота.

Методическая разработка является приложением к образовательной программе «Робототехника» и направлена на достижение следующих целей и задач:

Образовательные:

  • научить основным принципам построения композиции при создании графических изображений;

  • способствовать формированию знаний и умений в области робототехнике.

Развивающие:

  • способствовать развитию креативности, нестандартного мышления и пространственного воображения;

  • способствовать развитию творческих способностей, фантазии и эстетического вкуса.

Воспитывающие:

  • способствовать формированию потребности к осознанному использованию компьютерных технологий при обучении в школе и в повседневной жизни;

  • воспитание чувства взаимоуважения между кружковцами.

Давайте поговорим о том, как можно использовать Ардуино для создания робота, который балансирует как Сигвей.



Сигвей от англ. Segway – двухколесное средство передвижения, стоя, оснащенное электроприводом. Еще их называют гироскутерами или электрическими самокатами.

Вы когда-нибудь задумывались, как работает Сигвей? В этом уроке мы постараемся показать вам, как сделать робота Ардуино, который уравновешивает себя точно так же, как Segway.

• Как работает балансировка?

• Схема робота

• Создание робота

• Теория

• Код Ардуино самобалансирующего робота

Как работает балансировка?

Чтобы сбалансировать робота, двигатели должны противодействовать падению робота. Это действие требует обратной связи и корректирующих элементов. Элемент обратной связи - гироскоп-акселерометр MPU6050, который обеспечивает как ускорение, так и вращение во всех трех осях (основы MP26050 I2C). Ардуино использует это, чтобы знать текущую ориентацию робота. Корректирующим элементом является комбинация двигателя и колеса.



Схема робота

Сначала подключите MPU6050 к Ардуино и проверьте соединение, используя коды в этом учебном руководстве по интерфейсу IMU. Если данные теперь отображаются на последовательном мониторе, вы молодец!

Testing device connections...

MPU6050 connection successful

Initializing DMP...

Enabling DMP...

Enabling interrupt detection (Arduino external interrupt 0)...

DMP ready! Waiting for first interrupt...



Тестирование подключений устройств...

Подключение MPU6050 успешно

Инициализация DMP...

Включение DMP...

Включение обнаружения прерываний (внешнее прерывание Arduino 0)...

DMP готов! Ожидание первого прерывания...

Распиновка подключения контактов гироскопа MPU6050 представлена в следующей таблице.

MPU6050

контакт Arduino

Vcc

+5V

Ground

Gnd

SCL

A5

SDA

A4

INT

D2



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

Обратите внимание, что если вы планируете использовать напряжение питания более 12 В для модуля L298N, вам необходимо удалить перемычку чуть выше входа +12 В.

Создание робота

Корпус робота изготовлен в основном из пластика, распечатанный на 3D принтере с двумя редукторными двигателями постоянного тока. Файлы для печати находятся на диске по ссылке: https://disk.yandex.ru/d/PnULC2aDIibFWg

Основная печатная плата, состоящая из Arduino Nano и MPU6050:



Модуль драйвера двигателя LD293N:

Мотор редуктора постоянного тока с колесом:

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

Завершенный вариант самостоятельно балансирующего робота можно посмотреть на рисунке выше. В верхней части находятся шесть Ni-Cd-батарей для питания печатной платы. В промежутках между моторами используется 9-вольтовая батарея для драйвера двигателя.

Теория

В теории управления, удерживая некоторую переменную (в данном случае позицию робота), требуется специальный контроллер, называемый ПИД (пропорциональная интегральная производная). Каждый из этих параметров имеет «прирост», обычно называемый Kp, Ki и Kd. PID обеспечивает коррекцию между желаемым значением (или входом) и фактическим значением (или выходом). Разница между входом и выходом называется «ошибкой».

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

PID требует, чтобы значения Kp, Ki и Kd были настроены на оптимальные значения. Инженеры используют программное обеспечение, такое как MATLAB, для автоматического вычисления этих значений. К сожалению, мы не можем использовать MATLAB в нашем случае, потому что это еще больше усложнит проект. Вместо этого мы будем настраивать значения PID. Вот как это сделать:

1. Сделайте Kp, Ki и Kd равными нулю.

2. Отрегулируйте Kp. Слишком маленький Kp заставит робота упасть, потому что исправления недостаточно. Слишком много Kp заставляет робота идти дико вперед и назад. Хороший Kp сделает так, что робот будет совсем немного отклоняться назад и вперед (или немного осциллирует).

3. Как только Kp установлен, отрегулируйте Kd. Хорошее значение Kd уменьшит колебания, пока робот не станет почти устойчивым. Кроме того, правильное Kd будет удерживать робота, даже если его толкать.

4. Наконец, установите Ki. При включении робот будет колебаться, даже если Kp и Kd установлены, но будет стабилизироваться во времени. Правильное значение Ki сократит время, необходимое для стабилизации робота.

Поведение робота можно посмотреть на видео:

Код Ардуино самобалансирующего робота

Архив с исходным кодом: Balancer.

Робот собирается на трёх макетных платах, расположенных на расстоянии 25мм друг от друга с использованием нейлоновых стоек. На нижнем слое расположено два мотора и модуль двухканального драйвера моторов DRV8833. На среднем уровне размещается Arduino, модуль MPU6050 и два модуля 5В повышающих преобразователя. На верхнем уровне расположен выключатель, аккумулятор и ультразвуковой дальномер (будет установлен позже).

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

Возможно, Вы заметили, что использовано два модуля повышающих преобразователей напряжения (один для Arduino, второй подключен к драйверу моторов), хотя для них обоих требуется напряжение 5В. В первой конструкции использовался один 5В повышающий регулятор для питания контроллера и двигателей, но программа периодически зависала. Это было связано с помехами от мотора, действующими на контроллер и MPU6050. Решением проблемы стало разделение питания и добавление конденсатора 10 мкФ.

Шаг 3: измерение угла наклона с использованием акселерометра

MPU6050 содержит трёх-осевой акселерометр и трёх-осевой гироскоп. Акселерометр измеряет ускорение по трем осям, а гироскоп измеряет угловую скорость по трем осям. Чтобы измерить угол наклона робота, нам нужны значения ускорения по осям y и z. Функция atan2(y, z) возвращает угол в радианах между положительной осью z плоскости и точкой, заданной координатами (z, y) на этой плоскости. Функция возвращает положительное число, когда y 0 и отрицательное, когда y

https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050.

Загрузите скетч Sketch1.ino и посмотрите, как меняется угол наклона.

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

Шаг 4: измерение угла наклона с помощью гироскопа

Гироскоп в MPU6050 измеряет угловую скорость (скорость вращения) вдоль трех осей. Для нашего самобалансирующегося робота угловая скорость вдоль оси x достаточна для измерения скорости падения робота.

Загрузите скетч Sketch2.ino. В нём считываются данные гироскопа по оси x, преобразуются в градусы в секунду, а затем умножаются на время цикла, чтобы получить изменение угла. Мы добавляем этот полученный угол к предыдущему углу, чтобы получить текущий угол.

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

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

В приведенном выше коде время цикла вычисляется с помощью функции millis(), встроенной в Arduino IDE. Для более точных интервалов между считыванием данных, позже будет использоваться прерывание таймера. Этот интервал времени между считыванием данных также будет использоваться при в ПИД-регуляторе.

Шаг 5: комбинирование и фильтрация данных

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

currentAngle = 0.9934 * (previousAngle + gyroAngle) + 0.0066 * (accAngle)

0.9934 и 0.0066 являются коэффициентами фильтра для интервала времени 0.75с. Фильтр нижних частот пропускает через него любой сигнал, длительность которого превышает эту длительность, а фильтр верхних частот пропускает любой сигнал, длина которого меньше этой длительности. Отклик фильтра можно настроить, выбрав правильную постоянную времени. Понижение постоянной времени позволит увеличить горизонтальное ускорение.

Устранение ошибок смещения акселерометра и гироскопа

Загрузите в Arduino скетч MPU6050_calibration.ino для калибровки смещений MPU6050. В скетче FullCode.ino в функции setup() есть следующие строчки:

mpu.setYAccelOffset(1593);

mpu.setZAccelOffset(963);

mpu.setXGyroOffset(40);

В этих строчках замените числа на полученные при калибровке.

Шаг 6: ПИД-регулятор

Пропорционально-интегрально-дифференцирующий (ПИД) регулятор формирует управляющий сигнал, являющийся суммой трёх слагаемых: пропорционального, интегрального и дифференциального.

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

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

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

Умножая каждое из этих составляющих на соответствующие им константы (Kp, Ki и Kd) и суммируя результат, мы генерируем выходной сигнал, который затем отправляется в качестве команды для управления двигателем.

Шаг 7: настройка ПИД

  1. Установите Ki и Kd равными нулю и постепенно увеличивайте Kp, чтобы робот начал колебаться около нулевой позиции;

  2. Увеличьте Ki, чтобы робот быстрее реагировал, когда он выходит из равновесия. Ki должен быть достаточно большим, чтобы угол наклона не увеличивался. Робот должен вернуться в нулевое положение, если он наклонен;

  3. Увеличьте Kd, чтобы уменьшить колебания;

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

Шаг 8: дальномер

Ультразвуковой дальномер, который я использовал, это US-020. Это аналог HC-SR05. Если у Вас нет US-020, используйте HC-SR05 или другой подобный дальномер.

Дальномер имеет четыре контакта: Vcc, Trig, Echo и Gnd. Напряжение питания 5В. Контакты триггера и эхо подключены к цифровым выводам Arduino 9 и 8 соответственно. Для получения данных о расстоянии используется библиотека NewPing. Расстояние будет считываться один раз каждые 100 миллисекунд. Если значение будет в диапазоне от 0 до 20 см, на моторы поступит команда вращения.

Заключение


Потратив немного больше времени на настройку ПИД, можно получить результат ещё лучше. Небольшой размер робота также ограничивает уровень стабильности. Тем не менее, я полагаю, робот неплохо справляется с задачей балансировки на различных поверхностях.


Заключение

Данная методическая разработка была апробирована в робототехническом объединении учащимися 3 года обучения.



13