Как сделать танк на ардуино

Делаем радиоуправляемый танк на Arduino Nano

1440763221 videoplayback 005

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

Начнем с авторского видеоролика

Нам понадобится:
— готовое шасси;
— Arduino Nano;
— 3 сервопривода;
— поворотная система;
— игрушечный пистолет;
— джойстик PS2;
— приемник к джойстику;
— коробка для аккумуляторов;
— аккумуляторные батарейки;
— провода;
— лазер.

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

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

Также снимаем крышку с редуктора.

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

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

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

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

Собираем поворотную систему обратно.

Устанавливаем систему на корпусе танка.

В корпусе нужно проделать 3 дополнительных отверстия. Два из них нужны для проводов двигателя, а широкое отверстие понадобится для шины в управлении драйвера двигателя.

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

Пистолет нужно соединить с сервоприводом. Для этого достаточно проделать по отверстию на сервоприводе и корпусе пистолета и соединить винтом.

Следующим делом нужно соединить курок пистолета к сервоприводу. Для этого просверливаем отверстия на курке и насадке на сервоприводе. Соединяем элементы куском проволоки.

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

Перейдем к программированию платы Arduino Nano.

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

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

Источник

Танк, управляемый через Bluetooth на базе Arduino

1454276187 f6p5fp6ijqodc59.large

1454276179 fgvsjqoijqodc6s.large
1454276233 ftcu23rijqodc8c.large

1454276250 fk3v91aij6cfy50.medium

Процесс разработки робота:

Шаг первый. Собираем коробку передач
Чтобы собрать коробку передач, нужно следовать инструкции. В комплекте Tamiya должно иметься два двигателя, смазка, гаечный ключ, а также редуктор. Для того чтобы машинка работала правильно, нужно использовать передаточное соотношение «58: 1».

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

Как вариант можно применять даже двойной мотор КПП, однако в этом случае придется менять код устройства, поэтому лучше применять два моторчика.

1454276291 fm2u53jij7wp3km.medium
1454276257 fo9kl4pij6cf03o.medium




1454276409 f0gw3ybijsv2vgs.large
1454276426 fcw9nntij6cfy5a.large

1454276409 f80i1ukijsv2t0v.medium
1454276460 ffnb6vjijucqakb.medium

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

Электросхема выглядит следующим образом:

— «ТХ модуль Bluetooth» подключается к «RX в Arduino»;
— «RX модуль Bluetooth»подключается к «ТХ Arduino»;
— «VCC модуля Bluetooth» подключается к «5В из Arduino»;
— «Земля из модуля Bluetooth» подключается к «GND Arduino».

Шаг пятый. Устанавливаем FPV камеру

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

Источник

Tank — твой робот на Arduino

Запрограммируем робота на основе Arduino.
Начну с теории и описания всего того, что нам пригодится.

37f5cd1e43e3

Напомню Arduino – это аппаратная вычислительная платформа, основными компонентам которой являются простая плата ввода/вывода и среда разработки на языке Processing/Wiring. Документация на аппаратную часть и программный код опубликованы под лицензией «copyleft» но разработчики выразили желание, чтобы название «Arduino» было торговой маркой для официального продукта и не использовалось для производных работ без разрешения. В документе об использовании названия Arduino подчеркивается, что проект открыт для всех желающих.

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

Плата Arduino состоит из микроконтроллера Atmel AVR и элементной обвязки для программирования и интеграции с другими схемами. На каждой плате обязательно присутствуют линейный стабилизатор напряжения 5 В и 16 МГц кварцевый генератор. В микроконтроллер предварительно прошит загрузчик, поэтому внешний программатор не нужен.

Проект Arduino постоянно развивается и имеет множество модификаций. На данный момент доступны 10 версий плат, но конкретно в данном проекте использовалась плата Arduino Diecimila. Она представляет собой небольшую электронную плату, ядром которой является микроконтроллер ATmega168. На плате есть: 14 цифровых входов/выходов, 6 из которых могут работать в режиме ШИМ (PWM) (а следовательно управлять аналоговыми устройствами вроде двигателей и передавать двоичные данные), 6 аналоговых входов, тактовый генератор на 16 МГц, разъёмы питания и USB, ICSP-порт (что-то вроде последовательного интерфейса для цифровых устройств), несколько контрольных светодиодов и кнопка сброса. Этого вполне достаточно, чтобы подключить плату к USB-порту компьютера, установить необходимое программное обеспечение (драйвер и среду разработки) и начать программировать.

bdbea59407e0
Внешний вид платы Arduino Diecimila.

Микроконтроллер: ATmega168
Рабочее напряжение: 5 В
Входное напряжение (рекомендуемое): 7-12 В
Входное напряжение (пределы): 6-20 В
Цифровые порты ввода/вывода: 14 портов (из них 6 с ШИМ-сигналом)
Аналоговые порты ввода: 6 портов
Ток для портов: 40 мА
Ток для 3.3В источника: 50 мА
ППЗУ (Flash Memory): 16 KB (из них 2 Кб используются загрузчиком)
ОЗУ (SRAM): 1 Кб
ПЗУ (EEPROM): 512 байт
Тактовая частота: 16 МГц

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

Важным этапом, естественно, служит получение в своё распоряжение одной из плат Arduino. В моём случае это плата Arduino Diecimila. Также для подключения платы к компьютеру необходим USB кабель любой длины стандарта A-B. Через этот кабель будет осуществляться обмен данными между компьютером и микроконтроллером, а также подача питания на плату, т.е. внешний блок питания не обязателен. Еще один компонент, который необходим для управления моторами – это плата расширения MotorShield.

6656125b648dfd32a81db49123491d32
Плата расширения MotorShield и комплект деталей.

a4b8ba7020c7
Что и как подключать к MotorShield.

Далее нужно определиться с целями: мне нужно к имеющемуся игрушечному танку приделать дистанционное управление, но не обычное «куда нажал – туда поехал», а такое, при котором танку передавались бы координаты на воображаемом поле и он самостоятельно бы их достигал. Т.е. нужно представить, что комната (или любой другой участок, по которому будет двигаться танк) разбита на квадраты, представляющие собой систему координат. Тогда танку необходимо будет передавать координаты какого-либо квадрата и он должен будет повернуться к нему и проехать необходимое расстояние, чтобы стать в этот квадрат.

24cd1a456a3a12c926de3f95a88f37ee
Игрушечный танк с материнской платой.

8659d60aa13e
Материнская плата явно больше платы Arduino :).

Есть танк с моторами, есть плата, есть плата расширения. Необходимо средство для передачи координат. Это будет программа на компьютере пользователя, которая будет передавать данный на танк посредством Wi-Fi связи. Должен заметить, что Wi-Fi не понятен плате, поэтому на танке присутствует еще и обычная материнская плата (позже заменена на ноутбук ), которая будет от адаптера Wi-Fi транслировать данные в COM-порт, через который будет связь с платой Arduino. От нее сигналы уже будут поступать на плату расширения, и моторы должны будут закрутиться. Задача сводится к написанию двух программ: одной – для передачи данных от компьютера на Wi-Fi адаптер, другой – для обработки данных внутри микроконтроллера.

7fe52adb910c

Программу, отвечающую за обмен данными между ПК и микроконтроллером через COM-порт, писать можно на чём угодно. Пусть это будет Delphi.

Для краткости приведу исходный код только той функции, которая будет передавать танку команды, отвечающие за поворот и передвижение на нужные угол/расстояние. Функция принимает на вход текущие координаты (x0,y0), новые координаты (x1,y1) и текущий угол поворота танка alpha. Возвращать функция будет новый текущий угол. Текущие координаты и угол хранятся вне функции. Код откомментирован в нужных местах, поэтому описывать не стану.

Следующий этап — написание программы для прошивки её в плату. Всё, что нам нужно, это принять данные с последовательного порта и обработать поступившую команду, включив вращение моторов танка в нужную сторону. Моторы включаются на определенное время и длительностью этого времени достигается движение на требуемое расстояние

В программе для приёма данных используется пин №9 (TxD). Соответственно 2й контакт СОМ порта материнской платы (RxD) необходимо подключить к пину №9 на Arduino. Ещё одно требование: нужно настроить СОМ порт материнской платы на скорость 9600 бод.

Для управления движением танка будем использовать два мотора — для левой и правой гусениц (разъемы M1 и M2 на Motor Shield). Для упрощения работы с моторами используем фреймворк AFMotor, легко подключаемый к нашему проекту одной строкой «#include «AFMotor.h»». Моторы обозначим цифрами 1 для левой и 2 для правой гусениц. В коде, приведенном ниже, видно, что работа с моторами не представляет собой ничего сложного.

Осталось только прошить эту программку в Arduino (а делается это нажатием одной кнопки в интерфейсе Arduino IDE) и можно развлекаться, засылая танк в тыл врага :).

Заключение

Конечно, можно не ограничиваться просто пересылкой координат. Можно добавить интерактивности, используя для управления танком джойстик. А используя веб-камеру, прикрепленную к башне танка, можно наблюдать за движением, сидя за компьютером. Но для этого понадобится дополнительное ПО. Но даже это не делает программирование Arduino чем-то непосильным. Работать с такой платой просто, легко, а главное — доступно! Хотя нет, главное — это получение море удовольствия как от результата, так и от самого процесса!

Источник

Arduino.ru

Радиоуправляемая тележка или танк на arduino nano

picture 22149

Открою новую тему.
Тележка о четырёх колёсах с алиэкспреса, бралась как конструктор, была собрана и ездила по комнате в автоматическом режиме, захотелось, чтобы внучки порулили )))
Аппаратрура радиоуправления FlySky FS-GT3C c приёмником FS-GR3E но возможна любая с числом каналов два и более.

Скетч, буквально набросок выполненный за вечер, будет дальнейшее расширение возможностей, остален ультразвуковой датчик и попытка научить объезжать препятствия подруливая в автоматическом режиме )))

Не проверялся в железе, в мониторе порта всё изумительно (после небольшого триммирования руля), пока реализовано движение только прямо, реверс будет попозжее.

Критика для улучшения приветствуется.

picture 22149

picture 21382

Не было проблем и снова здорово. Если вы собираетесь делать большой проект, то начинайте учится структурировать код а не программировать «росыпью». http://arduino.ru/reference/functiondeclaration

picture 22149

Не было проблем и снова здорово. Если вы собираетесь делать большой проект, то начинайте учится структурировать код а не программировать «росыпью». http://arduino.ru/reference/functiondeclaration

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

picture 22149

поправил скетч, как-то заёрзала тележка, но очень плохо управляется, особенно при движении вперёд )))

picture 12980

А в чём проявляется проблема? Как едет без управления? Ровно?

picture 22149

Едет ровно! Нормальное движение при ШИМ от 75% ручки газа, АРХАТ говорит, что для танкового управления регулировка на ШИМ должна быть квадратичной, а для большей резвости даже кубической, Ваш ТАНК у внука как себя ведёт при поворотах?

picture 12980

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

picture 22149

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

Для квадратичной мысль математика требуется, чтобы смиксировать сигналы должным образом и уложить в граничные значения шим, то-есть, есть скрость выставляем максимальную, ШИМ должен принимать максимальное значение

picture 12980

Для квадратичной мысль математика требуется

Вот тут недавно Ворота пульсметр показывал. У него там совсем снимается сигнал с АЦП, а потом совсем нетривиально программно интегрируется не уходя от целых числе. для этого ему ажно int64_t потребовался. Хотя простенькая интегрирующая цепочка из резистора и конденсатора дала бы этот результат уже готовым с того же АЦП и считать не надо вообще ничего.

picture 22149

вот эти два сигнала и надо смиксировать чудным образом, преобразовав в два канала ШИМ, левого и правого бортов.
Простым способом не получается, да если бы было возможно к танкам давно бы руль приделали, ан нет )))

Доопределите, чего не хватает и подбирайте масштаб рулевого управления в map() так, чтобы скорость могла меняться

Не оптимально, ибо переключалки задействованы при каждом управлении, но тут оно как раз «без разницы» и даже повышает надежность ПО.

picture 22149

Мысль понятна, попробую

if от else отделите. Накидал как идею, надеялся справитесь самостоятельно. Там ещё надо грамотно типизацию целых расставить, дабы лишнее в лонгах не гонять и на расширение до целого не нарваться. 🙂

picture 22149

отрабатывает следующим образом:
ручка газа вперёд, крутится правая сторона, поворачиваем руль вправо, в какой-то момент колёса правой стороны останавливаются и начинают крутиться назад, руль влево, то-же самое, в какой то момент поворота руля колёса правой стороныостанавливаюся и начинают крутится назад ))) левая сторона не дышит

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

picture 12980

Да, зачем Вам руль? Сделайте джойстик, как у нас и проблемы вообще не будет от слова совсем.

picture 22149

Да, зачем Вам руль? Сделайте джойстик, как у нас и проблемы вообще не будет от слова совсем.

picture 12980

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

picture 22149

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

я прикручиваю к стандартному комплекту радиоуправления, а там никакой самодеятельности )))

Где-то, что-то напутано.

Закомментируйте if-else блоки непосредственного управления моторами и раскоментируйте вывод в Сериал, только сделайте подписи параметров, хотя бы так:

Serial.print(«, spA=»); Serial.print(speedA, DEC);

Перевод строки стараюсь ставить 1 раз в начале loop(), так видней что творится на одном проходе loop().

picture 22149

Где-то, что-то напутано.

по левому борту нашёл, строка 131, поправил
направление поиска понятно, вечером поищу

picture 22149

понятно, строки 74 и 75 при умножении на самое себя теряем знак, а он важен

lr*lr*sign(lr) домножить на знак, стало быть.

picture 22149

lr*lr*sign(lr) домножить на знак, стало быть.

так как языками не владею, хотел сделать как во второй строке только через if )))
Поправил, вечером попробую

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

picture 22149

Баловства ради добавлю скетч переделанный под библиотеку PWM.hpp, точность библиотеки конечно ни о чём, зато позволяет обрабатывать до 20 каналов )))

picture 22149

Еще не доделал, сенсор надо сделать и окультурить, чуть попозжее, пока есть возможность и с другими бублиотеками поэкспериментировать

Да, у тележки база коротковата, надо за основу брать пропорции Вазовской НИВА 4х4
Подправил немного константы так как подключил аппаратуту FUTABA и добивался минимальных значений для триммирования (получилось уложиться в 5 единиц)
Всё управление на одном стике

Как вам квадратичное управление поворотом на «ручке управления», особенно на скоростях? Ощущается как верное или нет? Интересно..

picture 22149

Как вам квадратичное управление поворотом на «ручке управления», особенно на скоростях? Ощущается как верное или нет? Интересно..

Хотел даже ролик снять, крутиться можно очень неплохо

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

picture 22149

Хотел даже ролик снять, крутиться можно очень неплохо

у меня дети в кружке сделали на линейной, тут вариант на BT, но есть такой же на FlySky 3- канальной (скорость, угол, свет), если интересно код могу выложить, или можно скачать с hackaday.
https://youtu.be/jDATptM75Ew

picture 22149

Хотел даже ролик снять, крутиться можно очень неплохо

у меня дети в кружке сделали на линейной, тут вариант на BT, но есть такой же на FlySky 3- канальной (скорость, угол, свет), если интересно код могу выложить, или можно скачать с hackaday.
https://youtu.be/jDATptM75Ew

я бы посмотрел, интересно как реализовали обработку приёмника

Источник