пятница, 29 июля 2016 г.

5.5. Тележка

Урок: 5.5. Тележка

Транскрибация урока: Итак, мы умеем управлять коллекторными моторами постоянного тока. Пора приступать к сборке тележки, которая станет нашим мобильным роботом. Мы уже имеем управляющую электронику, у нас есть источник питания, моторы и колеса. Чего не хватает? Моторов и колес у нас по 2 штуки, поэтому нам понадобится еще третья опора. В качестве нее мы возьмем вот такой вот шар, который позволит роботу и ездить, и поворачивать вокруг центра оси, проходящей через колеса. Нам нужна рама, ее мы изготовим из знакомых нам деталей. Воспользуемся еще новыми для крепления шаровой опоры и моторов. Кроме этого, нам нужно организовать питание. В экспериментах с моторами мы давали питание контроллеру от компьютера. Здесь же мы используем тот же батарейный отсек, который питает моторы. У нас 4 аккумулятора по 1,2 вольта, то есть 4,8 вольта будет недостаточно для Arduino. Следовательно, нам понадобится повышающий преобразователь напряжения. Давайте повнимательней посмотрим на то, как у нас будет устроено питание. С батарейного отсека провода приходят в повышающий преобразователь напряжения. В этот же клеммник вставлены провода, которые идут напрямую в Motor Shield. То есть безо всякого преобразования 4,8 вольта идут на моторы. Затем из выхода преобразователя провода идут в контроллер Vin и землю. Туда, с помощью подстроечного резистора, мы подадим от 7 до 9 вольт, приемлемых для контроллера. Давайте выставим нужное для контроллера напряжение. [БЕЗ_ЗВУКА] [БЕЗ_ЗВУКА] Вот у меня получилось напряжение порядка 9 вольт, этого для Iskra будет достаточно. Ну что же, у нас получился вот такой вот симпатяга. Прежде чем мы будем учить его ездить, давайте посмотрим, как наш прежний тестовый скетч с проверкой Motor шилда работает в нем. [БЕЗ_ЗВУКА] Я подключил питание просто проводом, пока что у нас нет отдельного выключателя. [СИГНАЛ] Мы снова слышим, как разгоняется мотор. Напряжения еще недостаточно. [ШУМ] Еще два слова о сборке. Я специально не акцентировал ваше внимание на том, как именно мы собираем робота, потому что вы можете экспериментировать как угодно. Напомню, что наша задача – чтобы робот ехал по линии. Она может превратиться в задачу гонки по линии, когда важна будет скорость перемещения. И здесь уже роль начнут играть вещи, влияющие на динамику робота. Например, ширина колесной базы, высота дорожного просвета, расположение центра тяжести, а именно батарейного отсека, и так далее. Сейчас же все это не так важно, нам нужна просто экспериментальная тележка, которая поедет. И мы, наконец, приступим к программированию езды. Посмотрим, что нового у нас появилось в программе. Во-первых, мы добавили макроопределение для пинов второго мотора, enable input. Ну, естественно, сделали их выходами, а затем запустили оба мотора вперед. Кстати, если вы загрузите этот код и робот не поедет у вас вперед – ничего страшного, это зависит от того, как вы подключили моторы. Вы можете, либо поменять местами провода в клеммниках, либо заменить high на low. И запустили оба мотора с максимальной скоростью. Затем мы делаем 1,5-секундную задержку, чтобы увидеть, что происходит, и меняем направление на «полный назад». Снова задержка, после которой один мотор мы запускаем вперед, а другой назад, чтобы робот вращался. Затем проделываем все наоборот, вращаемся в обратную сторону. Кстати, вы можете поворачивать разными способами, не обязательно крутиться вокруг середины робота. Вы можете ехать по дуге, когда у вас оба колеса крутятся вперед, только одно медленно, а другое быстро. [ШУМ] [ШУМ] Должно быть, вы обратили внимание, что робот не всегда едет прямо, а его повороты кончаются в разных местах, то есть угол поворота, проделанного за одно и то же время, различается. Это естественно, и без обратной связи, то есть без отслеживания того, насколько фактически провернулось колесо, мы никогда не сможем добиться идеально ровной езды. Даже одинаковые моторы одного производителя могут немножко отличаться друг от друга, с чем постоянно мы и сталкиваемся. Давайте на секунду задумаемся, удобно ли нам будет каждый раз, когда нужно изменить какой-то из параметров езды, будь то скорость или направление какого-то из моторов, добавлять несколько строк в код? Я думаю, что нет. Поэтому мы сделаем раз и навсегда функцию для управления моторами. Назовем эту нашу функцию drive. Передавать мы в нее будем 2 параметра: скорость для левого колеса и скорость для правого. Причем мы можем одновременно задавать направление, меняя знак этих параметров. То есть если мы подадим значение –100, например, значит нужно крутиться назад со скоростью 100. Затем мы убедимся, что моторы будут работать с корректными значениями, потому что функция drive может быть вызвана с каким-то параметром, вычисленным автоматически, и нужно убедиться, что он попадает в диапазон допустимых значений от –255 до 255. Иначе аналог right отработает неизвестным нам образом. Затем нам нужно понять, с каким знаком пришел параметр, то есть если он положительный, мы будем крутить мотор вперед. Если отрицательный – назад. То же самое делаем для правого мотора. А затем задаем скорости для обоих, причем параметры left и right берем абсолютные, берем абсолютные их значения. Теперь мы можем просто вызывать эту функцию, задавая скорость для левого и для правого колеса. Проведем небольшой тест, покрутим оба вперед с максимальной скоростью, затем оба назад с разными скоростями. Кстати, не факт, что вот этих 80-ти хватит для того, чтобы сдвинуть мотор с места. Посмотрим. И в разные стороны с разными скоростями. Давайте убедимся, что это работает. [ШУМ] В самом деле, выполняются все три действия. 80-ти, действительно, не хватает для вращения левого колеса назад. Но это не беда. Давайте проведем промежуточный итог. Посмотрим на нашу самую главную схему. На ней у нас появился новый элементарный исполнитель – коллектор и моторчик постоянного тока вместе с редуктором и колесом. Им мы управляем не просто сигналом с Arduino, а используя посредника в виде драйвера двигателя. Мы управляем драйвером двигателя, отправляя элементарные цифровые и аналоговые сигналы, и все это вместе вращает колеса. Затем мы взяли два мотора с колесами и построили тележку, то есть у нас получился более сложный исполнитель. Управляется он все той же одной микросхемой. И мы подготовили специальную функцию drive, с помощью которой мы можем не задумываться о комбинации сигналов, которые идут на оба мотора, а просто задавать скорости для левых и правых колес. Потом мы немного поэкспериментировали с беспорядочной ездой, которая не использует никакую обратную связь. Просто у нас был набор команд для перемещения в разные стороны.

Часть: Видео

Модуль: Мобильный робот

Описание модуля: Сначала крутим одно колесо, затем крутим два колеса и тележка едет, затем тележка едет по линии или под управлением или просто дразнит вашу руку.

Курс: Строим роботов и другие устройства на Arduino. От светофора до 3D-принтера

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

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

Пройдя этот курс, вы сможете создавать устройства, которые считывают данные о внешнем мире с разнообразных датчиков, обрабатывают информацию, получают и отправляют данные на ПК, в Интернет, на мобильные устройства, управляют индикацией и движением. Создание устройств будет включать проектирование, изучение компонентов, сборку схем, написание программ, диагностику. Попутно с созданием самих устройств вы сделаете визуализацию на ПК, создадите веб-страницу, которую будет демонстрировать одно из ваших устройств, а также разберетесь с устройством и работой FDM 3D-принтера.

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

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

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

Программа:
  • Неделя 1 Один старый и много новых знакомых
  • Неделя 2 Контроллер изучает мир
  • Неделя 3 Цель обнаружена
  • Неделя 4 Как полить цветок из другого города
  • Неделя 5 Мобильный робот
  • Неделя 6 Как создать новый предмет за час
Преподаватель: Алексей Перепелкин (1), Дмитрий Савицкий (2)

Описание преподавателя: (1) Алексей Перепёлкин занимается развитием робототехники на базе ЛИОТ МФТИ. В 2012 году открыл для себя новое захватывающее чувство – когда устройство, которое сам построил и запрограммировал, работает. Свернул с финансовой дорожки и создал кружок робототехники для подростков. Готовил их к соревнованиям. Стал посещать конференции, а затем проводил мастер-классы для тех, кто тоже хочет организовать занятия. Совместно с коллегами в 2013 году разработал новые соревнования – Робопрофи – для конкурса Робот для жизни и провел их. В 2014 году впервые провел Arduino-номинацию на фестивале Робофест, а для российского финала Russian Robot Olympiad 2014 сделал творческую категорию. С тех пор эти соревнования стали регулярными. Летом 2014 провел двухнедельную мастерскую в детском лагере Никола-Ленивца, а затем преподавал в выездной школе, посвященной программированию и робототехнике, которую провели ABBYY и Яндекс. В 2015 году стал руководителем направления робототехники в GoTo Camp, выездных школах, где участники создали десятки проектов, от прототипов умных домов и операторских тележек до робота-бубниста и принтера для незрячих. В 2014 году с коллегами начал проект Роболабы: мероприятия для школьников и студентов, где участники параллельно решают усложненные задачи, а затем проводят рефлексию сделанной работы и оценивают чужие в ходе серии мероприятий.

(2) Физик, научный сотрудник, выпускник МФТИ. Запустил кружок робототехники в 2011 году. Рассказал Алексею Перепелкину о том, как здорово вести кружок робототехники. Рассказал об этом еще целому ряду людей. Побеждал со своими командами на соревнованиях. Проводил проектную работу с участниками исследовательской выездной школы МКШ с 2013 года, где руководил реализацией физических и робототехнических проектов, например, «Вслед за солнцем», в котором изучалась эффективность динамической ориентации солнечных батарей на солнце. Вместе с коллегами разрабатывал и был судьей Робопрофи. Участвовал в подготовке проекта Роболабы. Вновь пришел в МФТИ для проведения факультативного курса «Основы создания киберфизических устройств»

Организатор: Лаборатория инновационных образовательных технологий МФТИ (1), Лаборатория инновационных образовательных технологий МФТИ (2)

Описание организатора: (2) Московский физико-технический институт (неофициально известный как МФТИ или Физтех) является одним из самых престижных в мире учебных и научно-исследовательских институтов. Он готовит высококвалифицированных специалистов в области теоретической и прикладной физики, прикладной математики, информатики, биотехнологии и смежных дисциплин. Физтех был основан в 1951 году Нобелевской премии лауреатами Петром Капицей, Николаем Семеновым, Левом Ландау и Сергеем Христиановичем. Основой образования в МФТИ является уникальная «система Физтеха»: кропотливое воспитание и отбор самых талантливых абитуриентов, фундаментальное образование высшего класса и раннее вовлечение студентов в реальную научно-исследовательскую работу. Среди выпускников МФТИ есть Нобелевские лауреаты, основатели всемирно известных компаний, известные космонавты, изобретатели, инженеры.

Категория: Компьютерные науки

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

Тематика: Разработка ПО

Материал:



Практика
Программы
Скетчи, показанные на этой неделе, лежат в архиве w5_sketches.zip https://drive.google.com/open?id=0B6zopUwNtrV0VHFWLS1qRUttaVE
Сборка устройств
Собрать все варианты роботов можно с использованием дополнения Киберфизика.Мобильный робот к набору Киберфизика.Фундамент
В съемке видео этой недели использовались колеса и некоторые прототипы деталей корпуса, которые в дополнении Мобильный робот были заменены детали другого вида но с тем же функционалом.

Ссылки на материалы
Коллекторные моторы: кратко http://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BC%D0%BE%D1%82%D0%BE%D1%80, подробнее http://wiki.amperka.ru/%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0:%D0%BC%D0%BE%D1%82%D0%BE%D1%80%D1%8B
Фильм Электрические двигатели http://www.youtube.com/watch?v=l7lx9-c3Po0
Принцип работы и классификация электродвигателей http://engineering-solutions.ru/motorcontrol/motor/
Редукторы http://cncnc.ru/documentation/detalimashin_lecture/book/book9.htm
Драйвер двигателей L293D http://www.myrobot.ru/stepbystep/el_driver.php datasheet http://www.ti.com/lit/ds/symlink/l293.pdf
Описание Motor Shield http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:motor-shield
Вариант списка необходимого для проверки устройства https://drive.google.com/open?id=0B6zopUwNtrV0NUpmdGVmZWI0RDQ
Макет трассы для робота, показанной в видео https://drive.google.com/open?id=0B6zopUwNtrV0UkQzVFctQklZUFk
ПИД-регулятор http://www.bookasutp.ru/Chapter5_2.aspx
Приложения-"джойстик" ArduinoRC https://play.google.com/store/apps/details?id=eu.jahnestacado.arduinorc
RemoteXY: приложение https://play.google.com/store/search?q=remotexy, сайт http://remotexy.com/
Внешние прерывания http://www.arduino.cc/en/Reference/AttachInterrupt