В статье дана инструкция по сборке и оживлению двухколёсной платформы Turtle . Мы произведём монтаж моторов, управляющей электроники и научим её кататься по заданному алгоритму.
Итак, платформа поставляется в виде набора деталей:
Из этого набора можно собрать классическую платформу двухколёсного мобильного робота.
Платформа имеет средние размеры, что позволяет использовать её, например, на столе. При этом на ней много места для удобного размещения как управляющих плат вроде Arduino Uno или Mega 2560, так и разнообразных датчиков; есть штатное место для сервопривода, который может служить основанием для радара или манипулятора. Все это удобно крепится на платформе в штатные отверстия и позволяет попробовать многие базовые функции мобильного робота, не прибегая к дрели и напильнику.
Первое, что нужно сделать — это припаять провода к моторчикам. При пайке надо быть осторожным: пластик вокруг контактов очень нежный и легко плавится. Затем надо прикрутить моторчики к основанию платформы и установить все колёса на место. Третье колёсико, представляющее металлический шарик в обойме, крепится двумя винтиками, они легко отличимы: таких в наборе всего два.
Вот, что примерно должно получиться:
Обычно такая платформа приобретается для экспериментов, а значит будет собираться и разбираться снова и снова. Дабы не проверять на прочность контакты моторчиков, провода можно закрепить нейлоновой стяжкой.
Полярность подключения моторов задаётся программно, но чтобы не путаться, провод с чёрной полосой лучше подключить к минусу, красный — к плюсу.
Как видно на фото выше, провод лучше не разрезать на два отдельных перед тем, как припаивать. Так будет проще отрезать его на нужную длину. А оставшийся кусочек пригодится для подключения электроники, установленной на верхней палубе.
В комплект платформы включён разъём внешнего питания с возможностью отключения минусового контакта, это позволяет использовать его в зависимости от схемы включения либо для внешнего питания робота, либо для зарядки аккумуляторов платформы. На фотографии ниже — вариант распайки для внешнего питания. В этом случае при включении разъёма внешнего питания в гнездо, кассета с батареями отключается.
Мы будем использовать Arduino Uno и Motor Shield для управления роботом.
Чтобы подключить управляющую плату к батарейному отсеку, потребуется штекер питания с внутренним отверстием 2,1 мм.
Будьте внимательны, проверьте полярность подключения питания! Центр штекера, в соответствии с документацией, должен быть подключен к плюсу; соответственно, внешняя часть штекера — к минусу (земле).
Чтобы соответствовать программному коду из примера ниже, моторчики соединены с Motor Shield так: правый — к клеммам M1 с прямой полярностью (плюс к плюсу), а левый — к M2 с обратной (плюс к минусу).
Для установки плат на платформу в комплекте идут латунные стоечки.
Для крепления Arduino Uno на платформе предусмотрено три отверстия. Четвёртое можно просверлить или просто прикрутить стоечку не к платформе, а к самой плате, перевернув её.
Вот, что в результате должно получиться:
После сборки, как и положено, останутся «лишние детали», они пригодятся, когда в последствии вы захотите закрепить на платформе сенсоры или другую перифирию.
Теперь осталось написать скетч и загрузить его в микроконтроллер Ардуино.
Для создания скетча вам понадобится: среда программирования Arduino IDE, обычный USB-кабель и компьютер.
Вот пример кода, который управляет моторами платформы:
// Моторы подключаются к клеммам M1+,M1-,M2+,M2- // Motor shield использует четыре контакта 6,5,7,4 для управления моторами #define SPEED_LEFT 6 #define SPEED_RIGHT 5 #define DIR_LEFT 7 #define DIR_RIGHT 4 void go(int speed, bool reverseLeft, bool reverseRight, int duration) { // Для регулировки скорости `speed` может принимать значения от 0 до 255, // чем болше, тем быстрее. analogWrite(SPEED_LEFT, speed); analogWrite(SPEED_RIGHT, speed); digitalWrite(DIR_LEFT, reverseLeft ? LOW : HIGH); digitalWrite(DIR_RIGHT, reverseRight ? LOW : HIGH); delay(duration); } void setup() { // Настраивает выводы платы 4,5,6,7 на вывод сигналов for(int i = 4; i <= 7; i++) pinMode(i, OUTPUT); } void loop() { // Задержка 5 секунд после включения питания delay(5000); // Cекуда с небольшим вперёд go(150, false, false, 1100); // Разворот на 180 градусов go(125, true, false, 1350); // Две секуды с небольшим вперёд go(150, false, false, 2200); // Разворот на 180 градусов в другую сторону go(125, false, true, 1300); // Cекуда с небольшим вперёд go(150, false, false, 1200); // Поворот на 90 градусов go(125, true, false, 680); // Медленно назад полторы секунды go(100, true, true, 1500); // Остановка до ресета или выключения питания go(0, false, false, 0); // Всё, приехали while (true) ; }
Результат исполнения этого скетча представлен на видео:
Итак, из груды деталей мы собрали основу для мобильного робота, который действует по заданному алгоритму. Да, у него нет связи с внешним миром, он не понимает где он находится. Но ведь это только начало! Вдохнуть разумную жизнь помогут различные сенсоры, устройства дистанционного управления и ваша фантазия!
— Материал подготовил Дмитрий Кунин