В какой-то момент жизни я осознал, что темное пятно в понимании микроконтроллеров не дает мне жить спокойной размеренной жизнью. При этом я был уверен, что времени выделить на это занятие много не получится и поэтому мой выбор пал на Arduino, который позволяет абстрагироваться от схемотехники и заняться простым макетированием и программированием конечных устройств.
Немного изучив представленную во всемирной паутине информацию, было принято решение сделать первые покупки. Мои первые впечатления от погружения в этот мир описаны под катом.
Вместо пролога
Тема использования Arduino глубоко раскрыта в статьях уважаемых участников форума Spc, Sanja и Bim_Sony. Данная статья не претендует на полноту описания, но показывает опыт человека, никоим образом ранее не сталкивавшегося ни с электроникой, ни с микро контролерами в частности.
Отчетливо понимая, что мир микроконтроллеров не начинается с Arduino и то, что данная платформа скроет от меня многие премудрости работы с ними (равно как и уберет многие грабли для начинающего) я запасаюсь терпением и желанием открыть для себя что-то, что окружает ежедневно, но спрятано за стеной непонимания, а скорее просто не заметно глазу.
Первым шагом стала покупка Arduino Duemilanove. Почему именно эта модель? Абсолютно спонтанное решение — просто подвернулась в списке новинок магазина.
Техническая информация
Микроконтроллер: ATmega168 Рабочее напряжение 5 В Входное напряжение (рекомендуемое) 7-12 В Входное напряжение (предельное) 6-20 В Цифровые Входы/Выходы 14 (6 из которых могут использоваться как выходы ШИМ) Аналоговые входы 6 Постоянный ток через вход/выход 40 мА Постоянный ток для вывода 3.3 В 50 мА Флеш-память 16 Кб (ATmega168) или 32 Кб (ATmega328) при этом 2 Кб используются для загрузчика ОЗУ 1 Кб (ATmega168) или 2 Кб (ATmega328) EEPROM 512 байт (ATmega168) или 1 Кб (ATmega328) Тактовая частота 16 МГц
После получения посылки ждать пока появится свободное время уже не было сил. Пришлось немного перекроить свой график с тем, чтобы изыскать время на новое увлечение.
Вооружившись терпением я сел изучать туториалы. Все оказалось не сложно и вдоволь наигравшись миганием светодиодов было решено пойти немного далее.
Кстати, забегая вперед скажу, что под Ubuntu среда разработки видеть плату без бубна не захотела — пункт последовательный порт не был активен в меню «Сервис». Решение подсказал гугл.
Количество моторов: 4 Количество колес: 4 Цвет: черный или прозрачный Крепления: платформа содержит множество отверстий, предназначенных для крепления датчиков, кроме того возле каждого колеса есть посадочное место под датчик прерывания (для получения обратной связи по скорости вращения колеса)
Дополнительная информация о LM293D
Motor Shield – силовой модуль управления двигателями для микроконтроллеров серии Freeduino/Arduino. Модуль предназначен для упрощения разработки моторизированных и робототехнических устройств.
Технические возможности позволяют реализовать разнообразные проекты, связанные с подключением и управлением слаботочными двигателями следующих типов:
* четырёх двигателей постоянного тока (DC motors);
* двух шаговых двигателей униполярных или биполярных с одинарной или * двойной обмоткой (stepper motors);
* двух 5В сервоприводов.
Технические характеристики напряжение питания: +7...+ 24 В; количество силовых каналов: 4; максимально-продолжительный ток каждого канала: 0,6 А; напряжение питания сервоприводов: 5 В; возможность реверса каждого двигателя; возможность независимого управления каждым каналом;
Отверстия на платформе оказались не приспособленными для крепления Arduino-подобных, но это не смутило. Вооружившись стяжками удалось закрепить на ней Duemilanove, поверх которого тут же был водружен motor shield:
Еще одним неприятным моментом стало отсутствие припаянных проводов к моторам. Пришлось потратить какое-то время на лужение и припаивание проводов из тех что были в наличии.
Совет
Возможно имеет смысл скручивать провода питающие мотор в витую пару для того, чтобы исключить наводки токов протекающих в проводниках на микроконтроллер.
Процесс сборки шасси детально проиллюстрированный в инструкции не вызвал вопросов и через 15 минут моя, пока еще не самоходная, тележка была готова.
Совет
Мне, как новичку, показалось удобным на этапе сборки платформы пронумеровать пары проводов и сами моторы, чтобы не путаться в дальнейшем при написании кода.
Моторы:
И пары проводов:
Кроме того, чтобы не путать полярность при отключении проводов от моторов, плюсовые провода и зажимные контакты шилда были также помечены красным маркером:
Конечно, если вы будете использовать провода разных цветов, помечать провода не имеет смысла. Мне же было удобно, так как все использованные мною провода были черного цвета.
Чтобы закончить с материальной составляющей, осталось лишь обеспечить питание для моторов. Источником, по-началу, была выбрана сборка из четырех элементов AAA:
Но такого запаса хватало не на долго и немного позже была добавлена сборка из 6 AA элементов, которая в отличии от первой не имела кнопки включения/выключения, поэтому в разрез плюсового проводника был вставлен переключатель:
Обе батареи решил оставить для чистоты эксперимента — разделить по питанию Ардуино и мотор шилд и оценить разницу.
Справка
Для написания кода (т.н. скетчей) используется одноименная среда разработки "Arduino IDE".
Осталось вдохнуть в ардуино немного жизни — написать скетч, управляющий моторами. Для старта была выбрана библиотека AFMotor и пример работы с моторами.
Для начала решил, что будет достаточно, чтобы новоиспеченная машинка поездила в различных направлениях и вернулась на место старта. Небольшой особенностью данного шасси является отсутствие рулевого механизма, следовательно поворачивать пришлось вращая левую и правую пары колес в разных направлениях.
Код скетча
#include <AFMotor.h>
#define MAX_SPEED 255 // Maximum motor speed
#define LEFT 33
#define RIGHT 44
#define TURN_TIME 660
//Создаем объекты для двигателей
AF_DCMotor frontLeftMotor(1); //канал М1 - передний левый
AF_DCMotor frontRightMotor(2); //канал М2 - передний правый
AF_DCMotor rearLeftMotor(3); //канал М3 - задний левый
AF_DCMotor rearRightMotor(4); //канал М4 - задний правый
void setup() {}
void setSpeed(int newSpeed) {
frontLeftMotor.setSpeed(newSpeed);
rearLeftMotor.setSpeed(newSpeed);
frontRightMotor.setSpeed(newSpeed);
rearRightMotor.setSpeed(newSpeed);
}
void turn(int dir) {
switch(dir) {
case LEFT:
frontLeftMotor.run(BACKWARD);
rearLeftMotor.run(BACKWARD);
frontRightMotor.run(FORWARD);
rearRightMotor.run(FORWARD);
break;
case RIGHT:
frontLeftMotor.run(FORWARD);
rearLeftMotor.run(FORWARD);
frontRightMotor.run(BACKWARD);
rearRightMotor.run(BACKWARD);
break;
default:
break;
}
delay(TURN_TIME);
}
void move(int dir) {
switch (dir) {
case FORWARD:
frontLeftMotor.run(FORWARD);
rearLeftMotor.run(FORWARD);
frontRightMotor.run(FORWARD);
rearRightMotor.run(FORWARD);
break;
case BACKWARD:
frontLeftMotor.run(BACKWARD);
rearLeftMotor.run(BACKWARD);
frontRightMotor.run(BACKWARD);
rearRightMotor.run(BACKWARD);
break;
default:
frontLeftMotor.run(RELEASE);
rearLeftMotor.run(RELEASE);
frontRightMotor.run(RELEASE);
rearRightMotor.run(RELEASE);
}
delay(500);
}
void loop() {
setSpeed(MAX_SPEED);
move(FORWARD);
turn(RIGHT);
move(FORWARD);
move(BACKWARD);
delay(500);
turn(RIGHT);
move(FORWARD);
turn(LEFT);
move(FORWARD);
delay(80);
turn(LEFT);
move(RELEASE);
delay(9500);
}
После компиляции и заливки в Ардуино машинка прошла боевое крещение:
И даже вызвала интерес у домашнего любимца:
И напоследок несколько фото агрегата.
Эпилог
К моменту написания статьи на импорте отметилась посылка с рядом датчиков, среди которых: ультразвуковые дальномеры, ИК дальномеры, датчики обхода препятствий и sensor shield для удобного подключения всего вышеперечисленного. Кроме этого были заказаны 2 радио модуля для беспроводного управления платформой. Так что веселое времяпрепровождение мне обеспечено еще на долго.
Резюме
По мере знакомства с миром Arduino пришло понимание, что затягивать меня стало все больше и больше, причем не только с точки зрения готового автомата и его программирования, но и с точки зрения физики протекающих в нем процессов и схемотехники. Прощаясь с читателями и своим свободным временем скажу, что Arduino заслуживает внимания в качестве увлекательного хобби.
Плюсы:
Огромное комьюнити, тонны видео и статей
Открытая архитектура
Легкое макетирование
Минусы:
Цена некоторых шилдов кусается.
Upd:Магазин снизил цену с $13.49 до $10.99
Планирую купить+84Добавить в избранноеОбзор понравился+103
+187
Автор, забивайте на шилды, учитесь делать дополнительные модули самостоятельно. Почитайте про ЛУТ на easyelectronics.ru. Получается намного дешевле, понимание процессов и схемотехники взлетает до небес. Но надо почитать книжек по электронике, купить как минимум мультиметр и logic analyzer (а лучше осциллограф).
AVR для своих целей тоже неплох, потому что не везде нужны 32кб памяти — где-то хватит ATTiny. И еще нужно не забывать, что Arduino — это плата для прототипирования и в реальных устройствах нет смысла применять всю плату.
Это да, но я отвечал на тему sav32 про STM32.
У STM32 начинается хардкор с настройкой пинов гпио, включения таймеров и прочее внутреннее строение железного программирования. У тексаса есть нечто ардуиноподобное IDE и библиотеки. там просто читаем состояние пина, пишем и не думаем о настройках и прочих параметрах.
пожалуй, это первый обзор, в котором я вообще ничего не поняла)
А вот зачем вы это всё делали? Можно же купить радиуправляемую машинку в любом магазине) Или эта какая-то особенная получилась? Или она вообще не радиоуправляемая)?
на самом деле это не «радиоуправляемая машинка», а конструктор. и, со временем, оно довольно заметно усовершенствуется. по меньшей мере именно на эту мысль наводит перечисление того, что скоро должно автору приехать в посылке ;)
В общем, если коротко: это конструктор для автономного робота. Автор хочет его запрограммировать и навешать всяких датчиков, чтобы он ездил сам по себе, выполняя свою программу и реагировал на окружающую среду. Из применений (после доработки напильником): робот-пылесос, робот-развлекатель кошака, робот-мобильная камера. В общем игрушка для взрослых =)
Ух классный обзор! Мне всегда нравилась это тема но я как чайник боялся и ленился к ней подойти а тут такое пособие наглядное.
Позвольте спросить а чем вы управляли машинкой? Контролёр шёл вместо с платой? И можно пару ссылок на контролёры?
Спасибо!
программирование дает хороший багаж знаний для такого хобби. Я вот тоже в поисках хобби, присмотрюсь на ваш выбор :). аналогично опыта работы с контроллерами не имею.
Да уж…
Тут уж моя жаба тоже не даст. Тогда буду по-прежнему смотреть на тамию, там конечно все пластиковое, но комплект в 25 долларов обходится, плюс доставка.
Ребяты, я вам так скажу — не влезайте в это дело, если у вас нет гигазов свободного времени или вы имеете тенденцию лениться от души (навроде меня). Вот у меня этих хренюлек ардуиновых огроменная коробень накопилась, и такую тележку покупал, и даже руку-манипулятор с шестью степенями свободы соорудил. Но вот всё это упорядочить во что-то работающее — так и удосужился. Жуткие траты, куча кайфа, но очень мало отдачи.
Впрочем, кому я это говорю? Для чайника подсесть на дуину — это как на герыча, неизлечимо! :)
Все хорошо- но паять с движку не стоило- контакты там под наконечники обжимные. И, естественно, два цвета провод хотя бы… Ну и прикупить дремель- дабы не притягивать хомутами а сверлить отверстие :)
PS К робо-самоходкам не пришел, у мну пока уно цветы поливает, температуру пола держит да отслеживает движение и количество людей в квартире включая свет в комнате куда идешь а не куда зашел. На очереди — шторы…
Интересный обзор. А кто что думает про Lego Mindstorms? (http://mindstorms.lego.com/en-us/default.aspx) ИМХО тоже достойный вариант для шаловливых ручек для более широкого круга. В комплекте есть сенсоры, сервоприводы, а если все это скрестить с ардуиной…
Лего майндшторм все-таки чуть ближе к игрушкам (проще в сборке, но негуманный ценник). Хотя как обучающе-развивающая игрушка — штука весьма серьезная. Не зря они партнерствуют с NI LabView
Тем более это клон, совместимая плата, а не оригинал.
Проще и дешевле Arduino Uno. Про него и информации в интернете много.
Вполне рабочие платы китайцы менее 9$ пролают
$7.99 с доставкой FedEx прям домой с непередаваемой скоростью!
https://estore.ti.com/Stellaris-LaunchPad.aspx?sp_rid_pod4=MzUyNzgxNzgwNjMS1&sp_mid_pod4=42306888
Из "+" — есть Ардуиноподобносовместимая среда Energia
Из "-" — это TexasInstruments. Ожидайте неожиданного! :)
У STM32 начинается хардкор с настройкой пинов гпио, включения таймеров и прочее внутреннее строение железного программирования. У тексаса есть нечто ардуиноподобное IDE и библиотеки. там просто читаем состояние пина, пишем и не думаем о настройках и прочих параметрах.
А вот зачем вы это всё делали? Можно же купить радиуправляемую машинку в любом магазине) Или эта какая-то особенная получилась? Или она вообще не радиоуправляемая)?
Позвольте спросить а чем вы управляли машинкой? Контролёр шёл вместо с платой? И можно пару ссылок на контролёры?
Спасибо!
Ссылка
А пульт для управления где взять?
Извините за дураЦкие вопросы=)
из описания:
т.е. какова отдаленность ваша была от контроллеров и решились заняться таким хобби?
aliexpress.com/item/New-tanks-metal-robot-chassis-crawler-robot-crawler-chassis-tracking-car-toy-car/1156336694.html
у продавца несколько моделей
Тут уж моя жаба тоже не даст. Тогда буду по-прежнему смотреть на тамию, там конечно все пластиковое, но комплект в 25 долларов обходится, плюс доставка.
Впрочем, кому я это говорю? Для чайника подсесть на дуину — это как на герыча, неизлечимо! :)
PS К робо-самоходкам не пришел, у мну пока уно цветы поливает, температуру пола держит да отслеживает движение и количество людей в квартире включая свет в комнате куда идешь а не куда зашел. На очереди — шторы…
А то очень интересно))