Всем Доброго Времени Суток! Данная статья будет посвящена любителям электроники, робототехники, а также людям с нестандартным взглядом на окружающие вещи!
Итак сейчас я постараюсь максимально наглядно описать процесс создания, сборки робота с электронной начинкой, а именно, на Ардуино! Поехали!
Что нам понадобится:
Трёхпроводной шлейф
(3 штуки). Желательно взять подлиннее.
Из инструментов понадобится:
Набор отверток, ключей и т.п.
Ну теперь начнем!
Шаг№1. Изготовление основного каркаса
Для начала соберем "две буквы Н" Выглядит это вот так:
Получается что-то следующее:
Шаг№2 Изготовление каркаса для будущих ушей робота
Для этого нам необходимо собрать две подобные конструкции и закрепить на них сервоприводы, как показано на рисунке:
Вот что получилось!
Более подробно!
Как установить кнопку:
Как установить потенциометр:
Красный провод - питание, Желтый - земля, Белый - аналоговый вход микроконтроллера №0 (другой потенциометр присоединяем точно также, только аналоговый вход контроллера №1)
На плате устанавливаем также резисторы для светодиодов
:
#include #include Multiservo myservo1; Multiservo myservo2; Multiservo myservo3; int b,k1,p1,p2; int A = 0; int i = 0; unsigned long m2=0; unsigned long m1=0; int r1=70; int r2=110; int r3=70; int h1=0; int h=0; void setup() { myservo1.attach(9); // левое ухо myservo2.attach(10); // правое ухо myservo3.attach(11); // глаза pinMode(6,INPUT); // кнопка pinMode(3,OUTPUT); //глаза огни PWM pinMode(5,OUTPUT); } void loop() { while(A==0) // цикл ручного управления роботом { b = digitalRead(6); if (!b) k1 = 1; if (b==1 && k1 == 1) { delay(10); b = digitalRead(6); if(b==1 && k1 == 1) { A=1; k1=0; } } p1=int(analogRead(A0)/6); p2=int(analogRead(A1)/6); myservo1.write(p1); myservo2.write(p1); myservo3.write(p2); analogWrite(3,i); analogWrite(5,i); if(millis() >= m1+70 && h1==0) { i=i+4; m1=millis(); if(i>250) h1=1; } if(millis() >= m1+70 && h1==1) { i=i-4; m1=millis(); if(i==0) h1=0; } } while(A==1) // цикл автономной работы робота { digitalWrite(13,0); b = digitalRead(6); if (!b) k1 = 1; if (b==1 && k1 == 1) { delay(10); b = digitalRead(6); if(b==1 && k1 == 1) { A=0; k1=0; } } analogWrite(3,i); analogWrite(5,i); if(millis() >= m1+70 && h1==0) { i=i+4; m1=millis(); if(i>250) h1=1; } if(millis() >= m1+70 && h1==1) { i=i-4; m1=millis(); if(i==0) h1=0; } if(millis() >= m2+15 && h==0) { myservo1.write(r1); myservo2.write(r2); myservo3.write(r3); r1=r1+1; r2=r2-1; r3=r3+1; if(r1==110) h=1; m2=millis(); } if(millis() >= m2+15 && h==1) { myservo1.write(r1); // 110 myservo2.write(r2); // 70 myservo3.write(r3); // 110 r1=r1-1; r2=r2+1; r3=r3-1; if(r1==70) h=0; m2=millis(); } } }
Код немаленький, но поверьте это того стоит!
Кратко, что выполняет данная программа:
У нас есть кнопка, которая отвечает за 2 состояния системы: либо мы управляем роботом вручную, либо он осуществляет уже прописанные заранее движения. При нажатии на кнопку для нас меняются состояния, а в коде - меняются 2 цикла между собой, в которых прописаны соответствующие команды. Глаза нашего робота постепенно загораются, становятся все ярче и ярче, а затем затухают. именно поэтому мы подкличили светодиоды к пинам, поддерживающим PWM - широтно-импульсную модуляцию.
Фотки робота:
Заключительная часть статьи о маленьком роботе, которого мы собираем на шасси - крышке от пластикового контейнера для еды. Мозгом нашего робота является плата Arduino UNO, двигателями и сервоприводом управляет плата Driver Motor Shield, датчик препятствий - Ультразвуковой сонар - глазки как у Валли (из мультика) - «HC-SR04 Ultrasonic Sensor». , . Как создать робота на Arduino?
При подключении батареи нужно быть абсолютно уверенным в правильности соблюдения полярности, как говорится 7 раз отмерь, один раз подключи. Старайтесь соблюдать такое правило - красны провод всегда к + питания, черный провод - земля, он же минус, он же GND. Производители стараются соблюдать такие же правила. Поэтому провода идущие от аккумуляторного отсека подсоединяем к колодке +M и GND, на плате управления двигателями. Провода от ходовых двигателей подключаем к колодкам M1, M2 платы управления двигателями. Левая сторона, по ходу движения подсоединяется к колодке M1, правая сторона к колодке M2. По поводу полярности двигателей пока волноваться не стоит, её можно будет поменять, если во время теста пойдёт что то не так.
Очень важный и ответственный момент сборки микроробота - проверка правильности монтажа, соединений, модулей согласно блок схеме, смотрим маркировку на платах, проверяем с помощью тестера, полярность питания, у кого есть тестер.
Программа в микроконтроллер Arduino заливается из компьютера, посредством USB кабеля и специальной программы - среды программирования и редактирования скетчей (программ) - Arduino IDE. Взять программу можно с сайта arduino.cc, раздел Download, там всегда можно скачать последнюю, самую свежую версию программы. После того как среда программирования установлена остаётся только выбрать из меню программы драйвера для какой платы вы хотите использовать, - в нашем случае Arduino UNO, и COM порт через который посредством эмуляции USB подключена Arduino. На этот счёт очень много всяческих мануалов, поэтому этот этап мы пропускаем (на всякий случай - меню Tools > Serial Port) .
Программу для микро робота можно с нашего сайта, правда только после регистрации, шутка Мини робот на Arduino. Для того чтобы программа заработала необходимы дополнительные библиотеки - AFMotor.h, Sevo.h, NewPing.h, все они есть в архиве, вам необходимо распаковать архив в папку установленной программы Arduino IDE. У меня -это директория c:Program Files (x86)Arduino, библиотеки нужно положить в папку c:Program Files (x86)Arduinolibraries. Затем войти в директорию c:Program Files (x86)ArduinolibrariesAPC_4_ROBOT и два раза щёлкнуть мышкой по APC_4_ROBOT.ino это и есть сам скетч, затем запустится среда программирования. Подсоединяем голую плату Arduino Uno (это значит без подключенных модулей) через шнур USB к компьютеру, жмём кнопку со стрелочкой в право, программа начнёт заливаться в контроллер. Весь процесс занимает несколько секунд, и если всё правильно подсоединено, то не должно загораться никаких красных надписей, а индикатор в нижнем правом углу закончит свое движение на 100%. Программа для Arduino установлена в контроллер Atmega328.
Мини робот на Arduino — готов к движению. Robot Wally
Можно осуществить первый, пока ещё пробный запуск нашего робота. У нас робот поехал не правильно, одно колесо крутилось правильно, а другое в противоположную сторону. Пришлось менять полярность проводов двигателя на колодке M2. Зато потом наш маленький робот с честью справлялся со всеми углами и препятствиями комнаты.
Эту статью я посвящаю всем новичкам, которые решили изучать Arduino. Дальнейшее изучение можно продолжать начиная с первого урока, - мигание светодиодом. Материал с роботом, это очень интересно, и чтобы заинтересовать вас, я решил начать именно с того как построить робота объезжающего препятствия. Дальнейшее будет намного проще, и пойдет как по маслу. Этот робот действительно работает. Всем удачи!
P.S. Это был достаточно вольный перевод статьи найденной, когда-то давно, на бескрайних просторах интернет, больше конечно отсебятины, т.к всё делалось по новой, рисунки доработаны, ссылок на источник нет, потому как документ был вордовский.
Вы понимаете, - втолковывал редактор, - это должно быть занимательно, свежо, полно интересных приключений… Так, чтобы читатель не мог оторваться.
И.Ильф, Е.Петров "Как создавался Робинзон"
.
Начинать работу с Arduino, как и с любой другой платформой программной или аппаратной, всегда интереснее с какого-нибудь реального проекта. Программисты при этом пишут код выводящий «Hello, world», ардуинисты моргают светодиодом. И все радуются как дети.
Я же решил начать с продвинутого проекта, в том числе с тайной надеждой оторвать молодое поколение от Counter-Strike (не получилось).
Как можно догадаться из названия RoboCar4W, первым проектом стал робот-машина о четырех колесах. Начиная работу я уже имел опыт программирования, умел когда-то давно паять, но совершенно не знал даже распиновки Arduino и документацию совершенно не читал. Все премудрости изучал по ходу пьесы и Гугл в помощь.
Поскольку сам проект принципиально не нов, подобных описаний в сети достаточно, все компоненты известны, то никаких неожиданностей не предполагалось. Поэтому задумка была сформулирована в самых общих чертах и главной целью являлось погружение в «мир вещей» с помощью Arduino, как платформы для быстрого прототипирования. В этом опусе возможно кто-то узнает себя в самом начале пути.
Всё "железо" приобреталось на ebay, и по своему опыту хочу сказать, что проще приобрести сразу стартер кит (ищите по словам Arduino Starter Kit), а не собирать подетально. Да и приедет все сразу вместе. Решено было не мелочиться, купить нормальное шасси, нормальные колеса, нормальные моторы, чтоб было "дорохобохато".
Главный секрет успешных покупок на eBay - покупать у продавцов с высоким рейтингом и при этом внимательно читать описание товара. Об этом есть много статей в интернете.
Какую плату семейства Arduino выбрать?
Я взял Arduino UNO, под нее много проектов с описаниями. Но сейчас бы взял Arduino Mega 2560, у нее больше цифровых и аналогов выводов и полная совместимость по проектам с UNO.
В мире разработки программного обеспечения это называют еще «требования к системе».
Задумка проекта была следующей. Первый вариант машины-робота под названием RoboCar4W должен выполнять незамысловатые действия:
Второй вариант машины должен управляться вручную по bluetooth с Android телефона.
Чтобы вам лучше работалось вот весь финальный проект RoboCar4W в сборе (тут без блютуза).
Вот видео ходовых испытаний.
На первом видео RoboCar4W ездит в автоматическом режиме с объездом препятствий на двух разных версиях «прошивки», т.е. скетча, поэтому, если кто самый зоркий и заметил, что поведение робота в разных эпизодах немного отличается.
На втором видео RoboCar4W передвигается при помощи команд, передаваемых «водителем» по Bluetooth с мобильного телефона под Android. На телефоне установлена программа «Bluetooth RC Car». Причем, если близко впереди оказывается препятствие, то робот останавливается, т.е. протаранить что-нибудь не получится (однако есть «секретная» кнопка, которая отключает безопасный режим).
На третьем видео RoboCar4W показывает заранее запрограммированную демо-программу движения с поворотами. Демо-программа активируется по команде с того же мобильного телефона под Android. Робот просто едет некоторое время и делает повороты.
Ошибочно называть наш способ «алгоритм объезда препятствий» или «поиском пути». Это отдельные математические дисциплины, чистая математика. Если вам очень-очень сильно нравится математика, то погуглите указанные словосочетания, чтивом на полгода будете обеспечены.
Пока же нас интересуют вещи гораздо проще. Поэтому мы назовем это просто - алгоритм управления движением 4-х колёсного робота. Разумеется речь идет об автоматическом управлении без участия человека.
Вот этот простой алгоритм записанный словами, для более сложных алгоритмов придется (хочется или нет) составлять блок-схемы.
Чем хорошо, что у нас 4 колеса и все ведущие? Мы можем выполнить (запрограммировать) несколько типов поворотов:
Во втором варианте программы, при управлении с Android-телефона безопасный режим, когда робот старается не допускать лобовых столкновений, может быть отключен, если в программе два раза нажать кнопку
и включен обратно однократным её нажатием.
Важное примечание . Вся логика находится под управлением Arduino. Android здесь выступает просто как игровой пульт (без мозгов) от консоли, его задача - тупо передавать нажатия кнопок (т.е. команды) посредством Bluetooth в Arduino RoboCar4W.
Первоначально в состав машины входил сервопривод, который поворачивал ультразвуковой измеритель расстояния на определенный угол для измерений по трем направлениям. Но в ходе испытаний из-за неосторожного обращения сервопривод сгорел, поэтому теперь датчик расстояния просто жестко закреплен впереди корпуса.
Нет худа без добра, зато скетч стал немного проще.
На будущее, сервопривод покупайте самый простой и дешевый, особая мощность, скорость и точность поворота на заданный угол не нужны, а вывести серво из строя довольно легко, как оказалось. Вполне подойдет SG90 стоимостью $2.
Итак составные части проекта RoboCar4W, описание на английском дается для облегчения поиска на ebay и ему подобных:
Шасси, DC моторы и колеса приобретались сразу в комплекте и даже с инструкцией по сборке.
Аналоговые входы могут использоваться как цифровые выводы портов ввода/вывода. Выводы Arduino, соответствующие аналоговым входам, имеют номера от 14 до 19. Это относится только к выводам Arduino, а не к физическим номерам выводов микроконтроллера Atmega.
Рисовать не обязательно, можно просто свести все в таблицу. У меня получилось так.
Пины D4, D7, D8, D12 будут заняты, если используются любые DC моторы или шаговые.
Пины D9 (Servo #1 control), D10 (Servo #2 control) будут заняты, только если используются сервомоторы.
Сама по себе плата для управления моторами Motor Drive Shield L293D пины Arduino не занимает.
Пины питания 3.3 В, 5 В и «земля» дублируются на Motor Drive Shield в достаточном количестве. Поэтому об их нехватке не стоит беспокоиться.
Если все-таки хотите красиво нарисовать, то бесплатная программа Fritzing вам в помощь.
Это второй очень важный момент. От питания зависит очень многое. Например, серво-мотор при повороте вала на заданный угол начинает потреблять большой ток. При этом если серво подключен по питанию на 5 В Arduino, то происходит «просадка» по напряжению и вся остальная схема начинает глючить, а Arduino даже может перезагружаться при этом.
В любом случае, если в поделке используете моторы, то Motor Drive Shield необходим (или подобная ему схема).
Итак, имеем 4 мотора постоянного тока (DC), сервопривод, саму плату Arduino и несколько датчиков. Моторы самые прожорливые, а вот датчики могут успешно запитываться с разъемов самой платы Arduino, поэтому с ними все просто. Для удобства я свел всё хозяйство в одну таблицу.
Напряжение рекомендованное или типовое. Потребляемый ток | Максимальное напряжение | Чем планируется питать | Примечания | |
---|---|---|---|---|
Плата Arduino UNO R3 | 7 - 12V, 200mA (среднее) | 6 - 20 | «Крона 9V» Li-ion 650mAh, 8.4V | Разъем с плюсом в центре |
Сервомотор MG-995 | 5-6 V, 0.1 - 0.3A (пиковое) | 4.8 - 7.2 | Аккумуляторы (5) шт. Ni-Mh 1.2V = 6V | Питание только от отдельного источника. Если запитать вместе с Arduino, то будет глючить всё. Напряжения Ni-Mh аккумуляторов 4шт. * 1.2В = 4.8V не хватает. Некоторые утверждают, что данную серву не стоит использовать на 6 вольтах только 4,8 |
DC двигатели (4 шт.) | 6 - 8V, ток от 70mA до 250mA | 3 - 12 | аккумуляторы (5+3) шт. Ni-Mh 1.2V = 9.6V | Вы не сможете нормально запустить двигатели от 9В батареи, так что даже не тратьте время (и батареи)! |
Motor Drive Shield L293D | не требуется | 4.5 - 36 | не требуется | |
Модуль Bluetooth HC-0506 | 3.3 V, 50 mA | 1.8-3.6 | С пина 3.3V платы Arduino | |
Ультразвуковой измеритель расстояния HC-SR04 | 5 V, 2 mA | 5 | С пина 5V платы Arduino |
DC/DC преобразователя напряжения у меня не было в наличии. Крона 9V оказался не очень хорошим источником питания, просто у меня он уже был.
А вот от использования Li-ion аккумуляторов большой емкости я отказался. Во-первых, из-за высокой стоимости, во-вторых в китайских интернет-шопах легко нарваться на подделку. Точнее не «легко», а «всегда». Кроме этого Li-ion требует особого обращения, и он не безопасен.
Итак, как видим из таблицы, нам требуется 3 независимых источника питания:
Где ж столько набрать? Саму плату Arduino в любом случае надо питать от отдельного источника, т.к. при «проседании» напряжения, например от включения моторов, плата может перезагружаться или просто глючить. Здесь применяем аккумулятор форм-фактора «Крона 9В», причем разъем который будет подключаться к Arduino должен быть с «плюсом в центре».
Для сервомотора и 4-х DC моторов можно обойтись одним источником питания. Проблема только в том, что сервомотор рассчитан на напряжение 5-6В (максимум 7.2В) и ток 100 - 300мA (пиковое), а DC моторам требуется 6 - 8В (максимум 12В) и ток 250мА.
Для решения проблемы существуют DC-DC преобразователи, но у меня таких не оказалось. В итоге я применил свою "фирменную" схему соединения (безо всяких понижающих электронных схем, только экологически чистые напряжение и ток!): подключил 8 шт. аккумуляторов на 1.2V последовательно и сделал отводы в нужных местах, как показано на схеме.
6В пошло на сервомотор, а 9.6 на DC моторы. Понятно, что аккумуляторы 1--5 будут испытывать повышенную нагрузку.
Для управления серво и DC моторами использовал 4-х канальный Motor Drive Shield на базе микросхемы L293D.
Собрать готовое шасси небольшая проблема. Но не думайте, что без допиливания у вас всё сразу соберется. Поэтому приготовьте надфили.
Подключить нормально несколько моторов, сервомотор или шаговый напрямую к Arduino не удастся. Так как пины (выводы) Arduino являются слаботочными. Для решения проблемы существует дополнительный модуль управления приводами - Motor Drive Shield на базе микросхемы L293D, которая является одной из самых распространенных микросхем, предназначенных для этой цели. Чип L293D известен также как H-мост (H-Bridge).
Я использовал плату, которая обеспечивает 4 канала для подключения на двух микросхемах L293D и сдвиговом регистре. Приобретается на eBay за $5.
Данная плата модуля управления приводами имеет следующие характеристики.
Motor Drive Shield требует небольшой доработки, чтобы можно было после него хоть что-нибудь подключить. Я подпаял сверху необходимые разъемы, получилось вот что.
Моторы могут быть подключены к дополнительному по отношению к плате Arduino источнику питания. Я рекомендую именно такой способ подключения. Для этого нужно снять, разомкнуть перемычку, как показано на картинке.
В этом случае питание Arduino и питание моторов производится независимо друг от друга.
Светодиод на мотор-шилде светится при наличии питания для моторов, если он не горит, то моторы работать не будут.
Новая проблема.
Сервомоторов положение джампера питания не касается, они по прежнему будут запитаны от 5V Arduino. Так как сервомоторы обычно потребляют большой ток и если питания недостаточно, то всё устройство начинает глючить, в «лучшем» случае будет глючить только сервопривод - не будет поворачиваться на заданный угол, либо все время перед каждым поворотом поворачивать сначала в 0 градусов, а уже потом на заданный угол (и если будет успевать). Поэтому я рекомендую питать сервопривод также от дополнительного источника питания. Для этого придется немного переделать схему подключения: откусить плюсовой провод (обычно красный) от стандартного разъема и соединить его с плюсом источника питания напрямую.
При подключении Motor Drive Shield аналоговые пины не используются. Цифровые пины 2, 13 не используются.
Указанные ниже пины используются, только если подключены и используются соответствующие DC двигатели или шаговые двигатели (Stepper):
Эти пины будут заняты, если используются любые DC/steppers: D4, D7, D8, D12.
Указанные ниже пины будут заняты, только если используются соответствующие сервомоторы:
Для начала работы с Motor Drive Shield необходимо скачать и установить библиотеку Adafruit AFMotor .
Пример кода для управления моторами:
DC мотор у меня начал крутиться только при указании скорости больше 100, если меньше - просто жужжит. Минимальную скорость вашего мотора вам придется определить экспериментально.
Для моторов, подключенных к M1 и M2 можно задать частоту: MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ, MOTOR12_1KHZ. Наибольшая скорость вращения достигается при 64KHz эта частота будет слышна, меньшая частота и скорость на 1KHz но и использует меньше энергии. Моторы 3 и 4 всегда работают на 1KHz другие значения игнорируются. По умолчанию везде 1KHz.
После этого необходимо прогнать тест моторов. . В начале скетча измените номер мотора в строке (или в строках) типа:
Скетч некоторое время вращает мотор(ы) вперед по ходу движения робота, а затем назад. Посмотрите внимательно в ту ли сторону вращается мотор, и измените полярность подключения если нужно.
Подключаем ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module. Распиновка выводов:
Время затрачиваемое ультразвуковым дальномером на измерения (определено опытным путем):
Ультразвуковой датчик дальномер, в силу своей физической природы, а не потому что Китай, в некоторых случаях плохо определяет расстояние до препятствия:
Другими словами, для ультразвукового дальномера в идеале было бы отлично, если бы все препятствия имели вид твёрдой плоскости, перпендикулярной направлению излучения ультразвука.
Некоторые проблемы можно решить с помощью инфракрасного датчика расстояния. Но он тоже не идеален:
Хотя если установить эти дальномеры в паре, то эффективность их работы заметно повысилась бы.
Как видим из даташита основные пины «голого» HC-05:
Наш модуль припаян к плате Breakout/Base Board, где уже есть делитель напряжения, поэтому диапазон рабочих напряжений у него от 3.3В до 6В.
Подключаем наш Bluetooth модуль в сборе:
После подачи питания на модуль Bluetooth HС-05 на нем должен заморгать светодиод, что означает работоспособность блютуза.
Включаем bluetooth на мобиле, находим устройство с именем HC-05 и подключаемся, пароль 1234.
Для тестирования заливаем в Arduino простой скетч:
На Android телефон устанавливаем Bluetooth Terminal. Подключаемся к устройству HC-05 и наблюдаем на экране телефона бегущие строки с увеличивающимся счетчиком.
Чтобы модуль мог принимать AT-команды, нужно его перевести в соответствующий режим - для этого нужно установить вывод KEY (PIO11) в логическую 1. На некоторых Breakout/Base Board вместо вывода KEY есть вывод EN (ENABLE), который может или не может быть припаян к выводу на самом чипе. Это касается только чипов HC05. Вот как раз у меня вывод EN платы никуда не припаян. Поэтому его можно припаять отдельным проводом к выводу KEY(PIO11) чипа. Либо во время работы, чтобы перевести HC05 в режим AT-команд на пару секунд закоротить вывод чипа KEY(PIO11) на вывод питания Vcc. Для HC06 вывод KEY не нужен.
Примечание. Каждый раз перед загрузкой программы в Arduino, убедитесь, что модуль Bluetooth не подключен к Arduino. Это вызовет проблемы заливки скетча. Просто отсоедините питание от Bluetooth модуля или провода, соединяющие Arduino и RX, TX контакты модуля.
В начале скетча измените номера моторов в строках типа:
Если заменить строку
то включится режим отладки.
В режиме отладки робот RoboCar4W реально ездить или крутить колесами не будет. Вместо этого активируйте монитор последовательного порта и там увидите как он «ездит» виртуально. Вместо реальной езды вперед в монитор последовательного порта будет писаться строка «Forward», вместо заднего хода с поворотом влево - «Turn Back L(eft)» и т.д. Датчик ультразвукового измерения расстояния тоже ничего не делает, вместо этого расстояния до препятствий генерируются программно и случайно.
Добавить меткиВ этой статье мы займемся постройкой своего робота с нуля. То, что у нас получится, смотрите на фото ниже. Робот будет ездить как самостоятельно, так и под управлением смартфона. А еще мы рассмотрим постройку своего мобильного робота с нуля.
3 D принтер
Если я хочу построить робота я должен определиться с выбором платформы, на которую я буду устанавливать двигатели, платы, аккумуляторы. Я, конечно, могу приобрести готовый вариант, но интереснее сделать платформу самому. Такая платформа точно будет соответствовать вашим требованиям. Платформу можно сделать из орг. Стекла, фанеры, а я сделаю ее из пластика.
Вы можете сказать, что платформу самому делать неудобно и потребуется множество инструментов, начиная от кернера и заканчивая шлифовальным станком. А я говорю, что нам понадобится воображение и 3D принтер.
3D принтер? Всем, наверное, знаком обычный офисный принтер, который может распечатать на А4 нужный нам текст. Так вот, 3D принтер – это принтер, который может распечатать нужную деталь. Есть разные 3d принтеры. У меня принтер с технологией FDM (послойное наплавление). Какие еще есть технологии 3d печати, можно узнать в интернете.
Многие 3D принтеры работают на Arduino. При желании, можно собрать свой 3D принтер. Главная идея 3D принтера в том, что можно печатать абсолютно любую вещь, мы же напечатаем корпус для робота.
Для начала определимся с описанием платформы. Я хочу, чтобы платформа была двухколесной и в нее должны помещаться Arduino, питание, моторы и несколько датчиков.
Теперь нужно нарисовать макет платформы на бумаге и разместить на ней нужные компоненты. Например, вот так.
Когда макет будет готов, нужно будет сделать 3D модель платформы. Для этого существует множество программ. Я, обычно, пользуюсь . Я не буду учить работать с Компасом, но если вам интересно, можете посмотреть в интернете или попросить в комментариях сделать урок по Компасу.
Вот такая платформа получилась у меня.
После этого нужно преобразовать 3D модель в G-код, понятный 3d принтеру. Для этого существуют специальные программы - слайсеры. Я использую программу Repetier-Host со слайсером Sli3er. Вот как выглядит деталь, готовая к распечатке.
А вот распечатанная модель.
Только недавно у нас была идея, а готовая деталь уже перед нами. С помощью 3D принтера можно создавать уникальные вещи в единичных экземплярах. 3D принтер – классная штука. Советую всем!
Моторы
Теперь нужно подумать о том, как наш мобильный робот будет двигаться. Первое, что приходит на ум – колеса. Так и поступим.
Если кто помнит, мы уже пробовали подключать мотор к Arduino. Кто не помнит, не знает или не читал – смотрим . В подключении мотора с помощью MOSFET есть существенные недостатки – невозможно оперативно менять скорость и направление вращения. Пришло время научить Arduino управлять моторчиками по-настоящему!
Для этого можно использовать микросхему L293D. L293D позволяет управлять сразу двумя моторами, с током 600 мА на канал и пиковым до 1000 мА, а если объединить каналы – то до 1200 мА и 2000 мА пикового тока. Про объединение расскажу ниже.
Для начала, как всегда, следует посмотреть на Datasheet, чтобы разобраться, куда и что подключать. Если вы не знаете о микросхемах, то стоит прочитать статью.
Приступим. Соберем простенькую схему с одним мотором и порулим им. Внимание на схему сборки.
Если не знаете английский или просто не разобрались в Datasheet, то вот описание подключения. Нумерацию микросхем, надеюсь, все знают или узнали из статьи про микросхемы.
Отлично! Мотор подключили. Теперь можно и покодить.
#define FRW_BUT 7 //Кнопка "вперед" #define BCW_BUT 6 //Кнопка "назад" #define SPD 5 //Управление скоростью вращения... #define FRW 4 //...направлением вращения(вперед)... #define BCW 3 //...направлением вращения(назад) #define SPD_POT A5 int xspeed = 0; //Переменная для определения скорости вращения мотора int frw_move = 0; //Переменная для команды "вперед" int bcw_move = 0; //Переменная для команды "назад" void setup() { //Обозначаем пины pinMode(SPD, OUTPUT); pinMode(FRW, OUTPUT); pinMode(BCW, OUTPUT); pinMode(SPD_POT, INPUT); pinMode(FRW_BUT, INPUT_PULLUP); pinMode(BCW_BUT, INPUT_PULLUP); } void loop() { //Считываем показания с потенциометра //и приводим их в нужный диапазон - от 0 до 255 //После - передаем на пин регулировки скорости xspeed = analogRead(SPD_POT); constrain(xspeed, 0, 1023); xspeed = map(xspeed, 0, 1023, 0, 255); //Определяем нажатие кнопки "вперед" if(!digitalRead(FRW_BUT)) { frw_move = 1; } else { frw_move = 0; } //Определяем нажатие кнопки "назад" if(!digitalRead(BCW_BUT)) { bcw_move = 1; } else { bcw_move = 0; } //Вызываем функцию по отправке данных на L293D motor(); } void motor() { //Отправляем данные на L293D analogWrite(SPD, xspeed); digitalWrite(FRW, frw_move); digitalWrite(BCW,bcw_move); }
Как работает? Работает просто. При нажатии на левую кнопку колесо крутится в одну сторону, а при нажатии на правую – в другую. Поворотом ручки потенциометра можно регулировать скорость вращения моторчика. Действие нашей испытательной установки для моторчиков показано на видео.
З.Ы. Да, знаю, что качество видео не супер, но постараюсь найти нормальную камеру и организовать место для съемки как можно скорее.
Теперь про соединение каналов L293. Если хочется подключить более мощный моторчик, то можно объединить каналы.
Первый способ – параллельно соединить аналогичные выводы микросхемы, что даст прибавку к максимальной силе тока в два раза. Минус – к одной микросхеме можно подключить только один моторчик.
Второй способ – сверху на L293 напаять другую L293. Берем и напаиваем пин 1 к пину 1, пин 2 к пину 2 и так далее. Этот способ так же дает прибавку к силе тока в два раза, но, в отличие от первого – оставляет возможность управлять сразу двумя моторчиками. У вас может возникнуть идея – а не напаять ли мне еще парочку L293? К сожалению, последующая напайка микросхем не приведет к увеличению силы тока еще на 600 мА. Прибавка будет незначительна.
“Э-эх, придется убирать мой 12-Вольтовый мотор… “ Не спешите расстраиваться. Для более мощных моторов подойдет старший брат L293 - L298, но сейчас мы не будем его рассматривать. Это мы сделаем чуть позже.
Motor Shield
Согласитесь, что с таким пучком проводов выглядит это все не очень. Чтобы избавиться от него можно спаять схему с L293 на печатной или макетной плате для пайки, но что делать, если паять не хочется или не умеется? Для этого существуют готовые решения в виде шилдов для Arduino, например. Я расскажу про один из них – Motor Shield V1 от DK Electronics.
Вот, собственно, фото шилд.
На этом шилде установлены две L293D, что позволяет управлять сразу четырьмя моторами. Еще там есть два контакта для сервомоторов. Питание подается либо на клемник, либо, при установленной перемычке, с питания Arduino. Перемычка так же позволяет брать питание для Arduino с шилда. Для работы с этим шилдом существует специальная библиотека. Скачать ее можно .
К минусам платы. Для работы с шилдом используются почти все цифровые пины, кроме 0, 1, 2, 13. Как мы знаем, пины 0 и 1 используются Arduino для прошивки, поэтому их лучше не использовать.
Есть тут и хорошая сторона. Если не подключать сервы, например, освобождаются пины 9 и 10, а если не использовать какой-либо из моторов, то освободятся пины 3, 5, 6, 11, в зависимости от неиспользуемого мотора. И еще. Нам остаются доступны шесть аналоговых выходов, которые при желании можно использовать как цифровые.
Начнем подключение моторов. Ради эксперимента сделаем робота, который ездит вперед, назад, а также вращается вокруг собственной оси. В качестве платформы я взял собственную разработку, описанную выше. Вы можете взять, что душе угодно, главное – подходящее по характеристикам.
Нам понадобятся
Пришло время собрать нашего робота.
Шаг 1
Соединяем Arduino и Motor Shield.
Шаг 2
Собираем моторы и прикручиваем их на платформу.
Шаг 3
Собираем питание через повышающий преобразователь.
Для тех, у кого Крона. Не забудьте перемычку!
Шаг 4
Прикручиваем моторы к Motor шилду с Arduino.
Шаг 5
Добавляем питание.
Шаг 6 (Опционально)
Прикрепим крышку – для эстетики.
У нас есть готовый робот. Теперь пришло время его запрограммировать. Смотрим на код.
//Подключаем библиотеку для работы с Motor Shield
#include
Отлично! Время проверять. Вот видео с моей проверки. А у вас как?
“Ты что-то говорил про робототехнические платы?” – могут сказать те, кто читал вводный урок 2 части курcа. Да, такие платы есть. Рассмотрим робототехническую платформу Strela.
Мечта робототехника. (Почти). Преимущества платы я описывал . Сразу к делу.
На ней- то и установлен старший брат L293 – L298. А еще пины выведены тройками, что как раз подходит для подключения многих датчиков.
Эту плату можно подключить вместо Arduino UNO и Motor Shield. Кроме того, ребята из Амперки написали библиотеку для работы со Стрелой, что делает управление моторами достаточно тривиальной задачей.
Для тех, кто не знал, рассказываю. К каждой нормальной библиотеке существуют примеры по ее использованию и библиотека для Стрелы не исключение. Для того чтобы их найти, заходим во вкладку Файл -> Примеры -> Strela. Там выбираем пример StrelaMotors, где выполняется скетч, похожий на скетч с использованием Motor Shield. Кстати, к Motor Shield тоже есть примеры. Если интересно – смотрите.
Что еще можно сделать со Стрелой – смотрите ниже.А мы переходим к беспроводной связи по Bluetooth.
Bluetooth
Робот, который сам ездит по комнате это, конечно, хорошо, но хотелось бы порулить роботом самостоятельно. Для этого нужно организовать связь между Arduino и управляющим устройством.
В качестве управляющего устройства я выбрал смартфон. Связь мы будем организовывать по протоколу Bluetooth, поэтому пришло время знакомиться.
Это модуль HC-06. Я не буду особо вдаваться в подробности, но кому интересно, переходим . Наша цель – порулить роботом со смартфона. Начнем, пожалуй.
Для начала нужно подключить HC-06 к Arduino. Подключение будем осуществлять при помощи Software Serial. Эта библиотека позволяет эмулировать Serial Port на нужных нам пинах. Ради эксперимента попробуем сделать это на пинах A0(RX) и A1(TX). Зачем? Помним, что я рассказывал про Motor Shield.
Подключаем так:
Я подключу HC-06 к роботу, которого мы собирали выше. Для этого воспользуемся тремя полосами на Motor Shield.
Робот готов. Осталось его запрограммировать.
Прежде чем читать код, вы должны кое-что узнать. Моторы не идеальны, как и все в этом мире. Даже два мотора из одной партии, идущие друг за другом, будут немного отличаться, что скажется на разнице в количестве оборотов при одном и том же напряжении. Если моторы просто подключить к motor Shield и подать на них одинаковую скорость, а это и есть одинаковое напряжение, то робот поедет не прямо, а немного, или много, в сторону. Это можно увидеть в видео выше.
Для того чтобы этого избежать, мы будем применять корректировочные коэффициенты. У меня левое колесо крутится намного быстрее, чем правое, поэтому я поставил коэффициент 0.62 для компенсации. Значение коэффициента подбирается экспериментальным путем.
// Подключаем библиотеки для работы с Motor Shield и Software Serial
#include
Робота прошили. Теперь займемся смартфоном.
RC controller
Для связи Arduino и смартфона через Bluetooth есть множество различных приложений. В поиске ключевыми словами будут: Arduino, Bluetooth, RC.
Я выбрал приложение под названием Bluetooth RC Controller. Оно идеально подойдет для нашей цели. При нажатии на кнопку приложение отправляет значение типа char на HC-06, который, в свою очередь, передает пришедшее значение Arduino. Значение, отправляемое при нажатии кнопки, устанавливается самостоятельно.
Чтобы установить соединение с роботом, нужно нажать на шестерню и выбрать пункт “Settings” В “Settings” нужно убедиться, что кнопки соответствуют этим отсылаемым символам, либо изменяем код Arduino.
После настройки символов можно устанавливать соединение с HC-06. Жмем на шестерню и заходим в “Connect to car” Открывается окно с сопряженными устройствами. В нем выбираем HC-06. Если его нет, то ищем с помощью “Scan for devices”. Если устройство найдено, но не хочет сопрягаться, то заходим в Bluetooth на смартфоне и сопрягаем, как обычно. Пароль стандартный – 1234. После этого заходим в “Scan for devices” и соединяемся.
Когда соединение установится, загорится зеленый огонек сверху, а HC-06 перестанет моргать. Можно начинать рулить. Полоска сверху отвечает за скорость движения.
Вернемся к Стреле. Еще одним преимуществом Стрелы является возможность установить Bluetooth XBee формата, а хорошо это тем, что другие пины остаются свободными. А так как для Стрелы есть готовая библиотека, которая помогает сократить код для управления моторами, то использовать Стрелу для управления роботом по Bluetooth очень даже стоит.
Для этого нужно подключить XBee к Стреле, прошить ее скетчем из примеров под названием “ArduinoBluetoothRCCarOnStrela” и подключиться к XBee через RC controller.
Советы
Робот у меня готов и даже ездит по команде со смартфона. Но не все может пройти гладко. Я расскажу о некоторых проблемах и их решениях, а также дам несколько советов начинающим робототехникам.
Колеса крутятся не в те стороны, в какие хотелось бы – эта проблема легко устраняется путем перестановки проводов в клемниках или программно.
Bluetooth модуль не работает – нужно проверить наличие горящего красного светодиода на модуле. Если он не горит, то проверить правильность подключения Bluetooth модуля. Если светодиод горит, но соединение ну устанавливается, нужно убедиться в том, что RX модуля соединен с TX платы и наоборот, а так же попробовать способ с сопряжением модуля с Arduino через стандартный Bluetooth интерфейс.
Робот не едет прямо – я описывал эту проблему чуть выше, когда рассказывал про Bluetooth и Motor Shield.
При езде робот неожиданно останавливается и теряется соединение с HC-06 – проблема в источнике питания. Мы знаем, что Arduino нужно не менее 7В для стабильной работы, а еще мы знаем, что моторчики очень хорошо кушают. Если поднести щупы мультиметра к клеммникам подачи напряжения и измерить напряжение при выключенных моторах, а потом их включить, то можно увидеть, что напряжение на мультиметре упадет. Причем упасть напряжение может по-разному.
Если подключен источник питания, который не может обеспечить достаточный ток для моторов, то напряжение может упасть сильно, с 9 до 5 Вольт, например, а 5В уже не будет хватать для Arduino и она перезапустится. Решение – подключить более мощное питание. Как рассчитать, я расскажу ниже.
Если подключить источник питания мощнее, то просадка напряжения может быть только в течение нескольких миллисекунд, но и их может оказаться достаточно для перезапуска контроллера. Решение – параллельно проводам питания установить конденсатор не менее чем на 1000мкФ, емкость можно определить экспериментально. Я ставил конденсатор на 3300 мкФ и на 16В. Не забываем смотреть на максимальное напряжение конденсатора.
Когда источник питания достаточно мощный, просадки напряжения не более 0.2В.
Несколько советов для начинающих робототехников
Начиная планировку робота, первым делом желательно позаботиться о расчёте мощности силовой части и подборе соответствующего источника питания. Будет обидно, если 4 батарейки ААА не потянут твои 4 6-вольтовых мотора, а места для более источника питания не останется.
Для расчета мощности ищем характеристики моторов, плат, датчиков. Из курса физики знаем, что мощность можно рассчитать по формуле P = IU, где I – сила тока, U – напряжение. С помощью этой формулы и характеристик легко рассчитать потребляемую мощность готового устройства, а зная потребляемую мощность и рабочее напряжение питания, можно узнать оптимальную силу тока, необходимую для работы устройства, зная силу тока, можно определиться с необходимой емкостью аккумулятора и время работы устройства от выбранного аккумулятора.
Как я и говорил, всегда следует ставить конкретную цель, при достижении которой проект можно считать выполненным. В этой мысли есть нюансы. Если проект достаточно большой, то добраться до цели не так-то просто, особенно, когда пишешь код. Написал я однажды большой код, думал - «Вот сейчас напишу все и проверю! », при попытке скомпилировать код, он не сразу скомпилировался, так как было несколько ошибок. Ошибки я убрал, да вот только код не работал, как я хотел. Пришлось переписывать все почти с нуля, понемногу добавляя код и проверяя на работоспособность получившийся код. Так советую поступить и вам.
Если есть цель сделать “пароль” из трех символов, то не стоит программировать все три сразу. Лучше сделать пароль из одного символа, проверить его, потом из двух, а после проверки – из трех. Мне помогает.
Робот создается методом проб и ошибок. Не получится один раз запрограммировать, чтобы действие выполнялось идеально. Те же подстроечные коэффициенты на колесах, поэтому не стоит опускать руки если что-то не получается, а если совсем-совсем не получается, то можно обратиться к добрым людям на форумы или написать мне, обязательно поможем!
Заключение
Робототехника – классная штука! В скором времени, я думаю, роботы займут, а то и уже заняли место в жизни людей. Мы сделали простейшего робота-машинку с управлением со смартфона, позже займемся более серьезными проектами, ну а пока – до скорого!
Магазин роботов и робототехники бытовые роботы квадрокоптеры гироскутеры конструкторы роботы игрушки новости
Я радуюсь, когда будущие инженеры создают свои устройства и расстраиваюсь, когда слышу, как кто-то говорит об использовании Arduino в них.
Это не первая моя статья на эту тему: у меня возникает желание написать такую сразу после прочтения фразы о безграничных возможностях платформы в DIY-топике на Хабре. У меня возникает желание написать об истинной цене деталей после прочтения статьи о покупке конструктора за $200 почти ничего не содержащего (уж простите, запамятовал где видел).
Дело тут совсем не в том, что я считаю, что Arduino – это плохая идея. Наоборот – благодаря платформе многие познали мир микроконтроллеров, узнали, что собрать небольшое прикольное устройство может даже человек без специального образования, с минимальными познаниями в программировании и с отсутствием познаний в электронике.
Благодаря Arduino увидело свет множество проектов, которые пылились в банках памяти мозга их авторов.
Честно признаюсь, я иногда и сам пользовался кодом, написанным для Ардуино (к примеру, фирма InvenSense производит модульMPU6050 , запустить нормально который получилось только у ).
Презираю я тех людей, которые, открыв для себя мир микроконтроллеров, не потрудились осмотреться в нём и тех, кто нагло наживается на подобных людях.
К нам в лабораторию заходил (и работал с нами) студент кафедры информационных технологий - поклонник Arduino. Человек тратил огромные деньги на покупку самих *дуин и модулей к ним. Я не без сожаления наблюдал, как будущий (я всё же надеюсь) создатель роботизированных систем не мог запустить ШИМ нужной частоты, хотя «лётных» часов работы с платформой он намотал немало.
Так вот, этот студент показал мне «измеритель уровня заряда батареи», или как-то так. Я специально нашёл его сейчас на ebay, где он называется «High Sensitivity Voltage Sensor Module -Arduino Compatible » и продаётся за $8.58 . Вот он, на рисунке:
Кстати, центральный провод, который «+» - он просто висит в воздухе – всё сделано для максимального удобного подключения простого делителя напряжения, красная цена которому 2 цента за резисторы и 20 центов за разьём – это если в розницу покупать.
Это не единственный случай обмана нашего брата, ниже я приведу ещё несколько. Сейчас же, для любителей структурирования, я напишу основные недостатки Arduino.
На Hobbyking, где любителей различных моделизмов обманывают так-же как и в других магазинах любителей ардуино, продавался как-то обычный конденсатор, под видом какого-то фильтра. Не смог его сейчас уже найти. С трёхпиновым разьёмом, естественно. Всего за 3 доллара.
Arduino Compatible Mini Motor Speed counter Sensor AVR PIC – заменяется светодиодом и фототранзистором, подключающимися к центральному контроллеру и двадцатью строчками кода. Он не стоит 7.98 .
2*4 Matrix Keyboard Push Buttons AVR ARM Arduino Compatible – это просто кнопки , которые можно купить по цене 10 штук за доллар.
Есть один девайс в мире, который я ненавижу больше чем Arduino – это mbed . Его разработчики взяли контроллер LPC1768 (есть ещё на LPC11U24), припаяли его на плату с двумя стабилизаторами (о качестве разводки платы я говорить не буду), вывели половину ног наружу (вторая половина никуда не подключена, что очень раздражает), написали онлайн недо-IDE (впрочем, чуть лучше, чем у Arduino, хоть и требует подключения к интернету) и продают его за $64. Простите, но это уже совсем.
Что делать, если вы, вдруг, решили перестать топтаться на месте, и начать изучать микроконтроллеры?
Вообще знаете, что странно? Среди пользователей Arduino есть даже те, кто презирают Apple за их «направленность на недалёкого занятого-для-таких-мелочей юзера».
Я не хочу никого обидеть или переубедить. Но я буду рад, если хоть один человек, дочитавший статью до этого момента, поменяет Arduino на простой микроконтроллер – может быть, из него получится хороший разработчик встраиваемых систем в будущем.