Как написать программу для робота на ардуино

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

Давай с чего-нибудь начнем? Главный вопрос — выбор контроллера. Существует множество ревизий Arduino, а также сторонних клонов, построенных на основе этих версий. Вот, пожалуй, два самых интересных для нас класса:

Arduino Uno — лучший выбор новичка, самая простая, бюджетная и распространенная плата. В основе — чип ATmega328 с тактовой частотой в 16 МГц, 32 Кб флеш-памяти, 2 Кб ОЗУ и 1 Кб EEPROM. В Uno 14 цифровых входов/выходов, которые могут использоваться для управления сенсорами и сервоприводами и другими устройствами;

Микроконтроллерная плата Arduino Uno

Как Сделать Робота на Arduino UNO / How to Make a Robot on Arduino UNO

Arduino Mega 2560 — плата, которая подойдет в случае, когда ты заранее знаешь, что проект будет сложным. Главное отличие — большее количество входов/выходов (48 в Mega, 54 в Mega 2560). Также тут намного больше памяти: 8 Кб ОЗУ, 4 Кб EEPROM, а флеш-памяти 128 и 256 Кб (в Mega и Mega 2560 соответственно). Между собой платы также отличаются чипом, скоростью USB и некоторыми другими характеристиками.

Микроконтроллерная плата Arduino Mega 2560

Разумеется, еще есть Arduino Pro, Arduino LilyPad и многие другие. Но сейчас давай остановимся на первых двух моделях. В нашем случае все довольно просто: Mega нужна для робота с большим количеством ног.

Первый код

Для начала установим Arduino IDE с сайта arduino.cc (статья об установке IDE)— это кросс-платформенная бесплатная среда разработки. Теперь, если мы подключим наш Arduino, то сможем попробовать написать первый код на самом простом примере: программе мигания светодиодом. На большинстве Arduino-контроллеров он есть и подключен к пину 13. Кстати, в мире Arduino программы принято называть скетчами. Вот текст скетча с комментариями:

// Дадим этому пину имя LED:
const int LED = 13 ;
void setup ( ) <
// Инициализация цифрового пина
// для вывода:
pinMode ( LED , OUTPUT ) ;
// Подать уровень логической единицы
// на пин 13 (зажечь светодиод):
digitalWrite ( LED , HIGH ) ;
// Приостановить выполнение скетча
// на секунду:
delay ( 1000 ) ;
// Подать уровень логического нуля
// на пин 13 (потушить светодиод):
digitalWrite ( LED , LOW ) ;
// Снова приостановить выполнение
// скетча на секунду:
delay ( 1000 ) ;

Обрати внимание на функции setup и loop . Они должны присутствовать в любом Arduino-скетче. Setup вызывается единожды при включении или после перезапуска контроллера. Если хочешь, чтобы код выполнялся только один раз, его следует размещать именно здесь. Чаще всего это всевозможные процедуры инициализации чего-либо.

Программирование Ардуино с нуля. Arduino для начинающих.

Наш скетч не исключение: цифровые пины Arduino могут работать и как входы, и как выходы. В функции setup мы говорим, что пин 13 будет работать как цифровой выход контроллера.

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

Загрузка скетча в Arduino IDE

Теперь «заливаем» наш скетч в контроллер. Нет, нам не понадобится программатор. Контроллеры Arduino, кроме наших скетчей, содержат специальную программу — bootloader, которая, в частности, управляет загрузкой кода из компьютера. Так что для заливки скетча нам понадобится только USB-кабель и пункт меню File → Upload (Ctrl + U) в Arduino IDE.

Ключевой вопрос

А сколько, собственно, нам нужно ног? Определимся во множестве конфигураций шагающих роботов. По количеству ног:
biped — двуногий (прототип — человек);
quadruped — четвероногий (прототип — большинство млекопитающих животных);
hexapod — шестиногий (прототип — большинство насекомых);
octopod — восьминогий (прототип — пауки, скорпионы, крабы и другие членистоногие).
Кроме количества ног, важна и конфигурация каждой. Главной характеристикой ноги является количество степеней свободы, или dimensions of freedom (DOF). Степень свободы — это способность поворачиваться или изгибаться вокруг одной оси (реже — поступательно двигаться вдоль нее). Очевидно, что если степень свободы одна, то на такой ноге далеко не уйдешь.

Ноги с двумя степенями свободы (2DOF) уже позволяют двигаться многоногим роботам, хотя 2DOF дает возможность свободно перемещать кончик ноги только в одной плоскости. А 3DOF-нога перемещает «стопу» в 3D-пространстве (если, конечно, не все три оси параллельны). Есть и 4DOF-ноги, которые просто увеличивают гибкость и диапазон перемещения ноги. У насекомых чаще всего 4DOF-лапы.

Что это значит для нас? В дешевых любительских роботах каждую степень свободы реализует один двигатель, точнее, сервопривод, или серв. Конфигурация ног однозначно определяет, сколько таких сервов нужно. Так, 3DOF-гексапод потребует 18 сервов, а 4DOF-паук — уже 32. Не пугайся количества, маленькие сервоприводы, используемые в любительских радиоуправляемых моделях, очень дешевы.

В интернет-магазинах их можно найти по запросу micro servo.

Чтобы программировать сервоприводы, достаточно знать, что в них уже есть контроллер, который делает основную работу. И все, что нужно, — подавать питание и цифровой сигнал, сообщающий контроллеру, в какую позицию мы хотим повернуть вал привода. Об их конструкции легко найти информацию.

Читайте также:
Характеристика темы учебной программы

Протокол у них самый простой из всех цифровых протоколов связи: широтно-импульсная модуляция — ШИМ (PWM на английском). У всех простых сервов есть разъем с тремя контактами: земля, +5 В (вольтаж может отличаться в зависимости от размера и мощности) и сигнальный вход. Arduino-контроллеры могут двумя различными способами генерировать такой сигнал.

Первый — аппаратный PWM, который сам чип умеет выдавать на нескольких из своих цифровых I/O-пинов. Второй — программный. Программный позволяет получить одновременно больше различных PWM-сигналов, чем аппаратный. Для него под Arduino предоставляется удобная обертка — библиотека Servo.

Она позволяет использовать одновременно 12 сервоприводов на большинстве малогабаритных контроллеров (Uno, Due, Nano) и 48 сервоприводов на Arduino Mega и ему подобных. Сигнальный контакт серва подключается к цифровому выводу Arduino. Земля и питание — очевидно, к земле и питанию, они могут быть общими для всех сервов. В трехпроводных шлейфах сервов черный или коричневый — это земля, посередине обычно красный +5 В и, наконец, белый или желтый — сигнальный. С программной точки зрения управление предельно простое:

Источник: arduinka.pro

Робот на Arduino, управляемый по Bluetooth со смартфона

Всем привет! Сегодня я покажу вам как создать робота, управляемого по Bluetooth со смартфона. В этом уроке использованы:

1. Плата Arduino Uno с кабелем для подключения к компьютеру

2. Компьютер с установленной Arduino IDE и драйверами для плат

3. Соединительные провода

4. Драйвер двигателей L298N

5. Bluetooth модуль HC-05 или HC-06

6. Двигатели с колёсами

7. Корпус робота

8. Аккумуляторы 18650 2 штуки и бокс для них

Ссылки на уроки по L298N и Bluetooth модулю

Вот ссылки на мои уроки по Bluetooth модулю и драйверу L298N:

Описание робота

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

Вот как выглядит робот из набора (извиняюсь за качество фото, лучше сделать не могу):

Робот из набора

Робот имеет четыре мотора с четырьмя колёсами. Управляться он будет со смартфона с помощью программы Bluetooth RC Controller, о которой я уже писал в статье про Bluetooth модуль. Давайте же приступим к написанию программы для нашего робота, но сначала нужно его собрать.

Инструкция по сборке робота

Вот инструкция по сборке робота из набора (листайте по стрелочкам):

Источник: dzen.ru

Введение.

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

Эти компоненты вы можете приобрести либо все вместе Двуногий робот Gekko «Ходок» (конструктор без электроники), либо по отдельности в этом разделе сайта. При покупке всего механического комплекта робота вы так же получите:

Эти же компоненты вы так же сможете купить, отдельно перейдя по ссылка указанным в их названии, я же из соображений «наличия других компонентов» брал запчасти отдельно и в моем роботе установлены сервоприводы фирмы HobbyKing (НК151138), которые, к слову сказать, существенно хуже по всем показателям, чем рекомендованные Сервопривод Feetech FS5103B, как по показателям силовым, так и по точности отработки, так и по разбросу параметров среди экземпляров одного типа. Но это не говорит о том, что при повторении проекта, необходимо покупать дешевые китайские сервы, как у меня в проекте. Напротив, если сгодились мои, то более качественные сервоприводы только упростят процесс отладки.

Электронная часть робота, реализованная из следующих компонентов:

· Аккумулятор AA емкость 2500mA/H(китайские взяты в ларьке) — 4 шт

Так же для установки датчика дальности Sharp, использованного в проекте необходимо приобрести еще один элемент механической части конструкции не входящий в состав стандартного комплекта робота «Ходок» фирмы Gekko, но произведенный этим же поставщиком, а именно:

Как видите, все кроме аккумуляторов (которые вполне можно заменить любыми батарейками типа АА), можно приобрести в разделах сайта РОБОТОТЕХНИКА на страницах, которого, вы читаете данную статью, и который, непосредственно обладает правом на её размещение. Так же вы можете использовать любые другие компоненты, которые на ваш взгляд, лучше подходят для целей реализации данного проекта, но в этом случае возможные некоторые расхождения между моим описанием и реальной картиной вашего творческого процесса;)

1) Описание функционала робота «Ходок».

Робот «Ходок» (далее по описанию просто робот) — представляет собой двуного прямоходящего андроида с моделью передвижения имитирующей человеческую походку.

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

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

2) Функционально-исполнительный режим – при этом робот будет устанавливать положение сервоприводов в соответствии с положением управляющих элементов на форме приложения для Windows. В этом режиме будет осуществляться создание всех моделей поведения, которые будут доступны в роботе.

Читайте также:
Программа где можно рисовать в видео

2) Принципы управления роботом.

Возможно, вам может показаться, что мой ход преподнесения информации слишком избыточный и пора бы уже преступить к сборке робота и его запуску в пешее путешествие, но позволю вас огорчить – что бы заставить этого робота ходить придется много поработать и узнать немало новой информации о принципах управления данным кибернетическим объектом. У меня для вас 2 новости (все как в бородатом анекдоте) одна плохая, другая хорошая. Начну с плохой. Для того что бы управлять этим роботом не подучится вызвать стандартную функцию типа:

роботВперед(Пока не устанешь)

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

1) Все сервоприводы даже дорогие и весьма надежные имеют разброс рабочих характеристик. Т.е. один и тот же сигнал для каждого сервопривода установит вал привода не в строго одинаковое положение.

2) Все сервоприводы имеют нелинейности по всей шкале своего возможного запаса хода. Т.е. например изменение длительности импульса с 1800 до 1900 микросекунд может привести к перемещению вала на большей или меньший угол, чем например изменение длительности с 1900 до 2000 микросекунд, причем положение этих нелинейностей может существенно отличаться для любых двух сервоприводов, даже из одной партии.

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

4) Стандартный сервопривод не имеет полностью свободного хода на 360 градусов, а он способен вращаться в определенном секторе, обычно общая его протяженность составляет от 200-270 градусов. При сборке робота вы установите все сервоприводы в совершенно случайные положения, т.к. вам будет необходимо в первую очередь обеспечить наличие возможного хода в конструктивных пределах. Т.е вы поставите сервоприводы так что бы робот имел как можно более широкие пределы поворота частей при этом, постаравшись сделать эти пределы схожими на обеих конечностях. После того как вы это сделаете ваше и без того не простая линейная модель по мимо всех сотен поправочных коэффициентов на нелинейности сервоприводов обзаведется еще и массивом исходных положений сервоприводов и позициями максимальных возможных передвижений.

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

А если же вы захотите выйти за рамки этого проекта и собрать, например робота не на 6 сервоприводах как этот, а например на 18 (например 6-ногий паук с ногами с 3 степенями свободы) или еще большим числом, то ваш проект может запросто разбиться о невероятные трудозатраты. Так же если вы захотите в какой-то день оптимизировать вашего робота или добавить новый функционал, либо просто немного изменить имеющийся, это станет очень непростой задачей. Таким образом, линейный алгоритм слабо применим для моделей с ходовой частью, реализованной на сервоприводах под управлением платформы Arduino и технически реализованный указанными выше средствами. Для того что бы реализовать линейный алгоритм управления роботом необходимы существенно более серьезные вычислительные мощности и более серьезные технические средства, а в конце этой статьи вы сможете найти их описание, но ведь мы хотели реализовать ходящего робота теми средствами, которые у нас есть… Как же быть? Тем более, я обещал, что будет и хорошая новость))

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

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

Читайте также:
Как запустить программу Steam

2) вернуть роботу относительно прямое положение при этом, не потеряв устойчивость левой ноги стопу правой ноги позиционировать параллельно земли

3) Поднять правую ногу вперед сложив её в колене, что бы сохранить положение стопы параллельным земли, левую ногу немного сложить в колене, при этом немного отклонив корпус назад для сохранения у корпуса положения параллельного земле

4) Наклонив опорные сервоприводы перенести центр тяжести равномерно на обе ноги.

Обратите внимание что если пропустить хотя бы одно из указанных действий робот не сможет сохранить устойчивость и он либо будет одновременно двумя ногами «ёрзать» по земле(если пропустить 1 шаг), либо просто упадет назад (если пропустить 3 шаг). Т.о. для того что бы реализовать любую модель движения робота достаточно разбить все большое движение на дискретные устойчивые позиции и заставить робота плавно и одновременно всеми сервоприводами переходить из одной позиции в другую. На практике нам необходимо просто получить координаты сервоприводов в контрольных точках, т.е. узнать какой длительности импульсов соответствует та или иная позиция робота, далее необходимо создать массив, включающий в себя все контрольные точки и передать этот массив функции, которая сможет организовать плавный и синхронизированный по времени процесс перехода из одной точки в другую. Хорошая новость заключается в том, что я уже реализовал все этапы необходимые для того что бы данный метод работал просто и очевидно, вам же осталось только понять что к чему и решительно преступить реализации первого, по настоящему удобного в программировании ходящего робота. Прекрасно понимая ваше желание преступить к сборке позволю себе предостеречь вас от этого шага так как для того что бы вам не пришлось в дальнейшем еще раз разбирать робота придется все таки выполнить указания следующей главы.

3) Предварительная подготовка.

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

1) Управляя градусами мы можем задать положения сервоприводов только в пределах от 0 до 180 градусов, если мы передадим значение более 180 то будет отработано 180 и соответственно если передать меньше 0 то будет отработано 0. На практике же разница между положением которое серва отрабатывает при 0 и 180 далеко не всегда равна 180 градусам, а это может быть как 160 так и 200 градусов, т.е. точность совсем не какая. Так же стоит отметить что конструктивно сервопривод может довернуться дальше как в сторону 0 так и в сторону 180. Т.о. образом может возникнуть ситуация при которой вы установите сервопривод, механически проверите его возможность двигаться в пределах конструктивной свободы. Когда начнете на него подавать сигнал окажется, что при задании позиции с помощью с управления градусами вы не сможете переместить движок серво в крайнее конструктивное положение т.к. 0 или 180 будет находиться раньше чем, то положение, куда бы вы хотели переместить вал.

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

3) Не каких тригонометрических расчетов в процедуре при движении робота осуществляться не будет и по этой причине какой-либо практической необходимости в применении градусов просто нет.

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

1) Нумеруем сервоприводы в нашем случае от 0 до 5 (т.е. их всего 6). До тех пор пока робот не будет запущен, и не будут получены все необходимые сведения, нанесенные на сервоприводы номера должны четко просматриваться. Нумеровать сервоприводы стоит карандашом или тонким маркером.

2) Необходимо залить на вашу отладочную плату исходник (их обычно в данной среде называют скетчами) в начале я указал DFRduino Nano, но может сгодиться любая плата, рассчитанная на программирование в среде разработки Arduino. В этой статье я не буду описывать, что такое Arduino и как с ней бороться т.к. я рассчитываю, что вы хоть немного уже в этом и сами разобрались.

Скетч, который вы будете загружать на плату делает следующее действие: к плате необходимо подключить любой переменный резистор сопротивлением от 10 до 50 килоОм и один сервопривод, которым мы будем управлять с помощью резистора, при этом текущее значение длительности импульса будет возвращаться на монитор порта. В чем заключается смысл этого действия? Нам необходимо получить для каждого из ваших сервоприводов предельные величины длительностей импульса которые переводят сервопривод из одного крайнего положения в другое. Полученные величины для каждого сервопривода необходимо зафиксировать и выбрать максимальное и минимальное значение. Ниже приведу таблицу с примером:

Источник: robototehnika.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru