0,0
рейтинг
4 января 2014 в 15:27

Опыт создания робота. Часть 1 из песочницы

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

Преамбула


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

Идея была собрать более или менее компактного робота, но достаточно проходимого и функционального. Я не хотел привязываться к каким-то определённым платформам или собирать китовые наборы, поэтому решил отдельно заказывать детали и стараться по максимуму делать из подручных средств.

Подбор запчастей


Вначале я стал выбирать «мозг» робота. Очень привлекательным мне казался LEGO Mindstorms, привлекало именно то, что можно было собрать из деталей любую шасси, какую захочется. Но мне хотелось не готовый конструктор, подключил проводки и готово, а самому паять, программировать, изучать микроконтроллеры, да и набор LEGO дороговато стоит. Поэтому выбор пал на семейство Arduino. И не такое дорогое, и программировать можно. Мне советовали взять Arduino Uno, но так как я решил делать компактно, решено было взять Arduino Nano.

Когда я начал выбирать шасси, я вдруг вспомнил, что где-то в шкафу пылится LEGO SpyBotics, это что-то вроде прародителя Mindstorms.

image

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

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

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

Итак, с основными деталями разобрались, теперь остальное. И вот я стал искать, где вообще можно выбрать и купить запчасти. Я нашёл девочку, которая заказывает из Китая вещи, она пообещала помочь с покупкой и дала ссылку на Taobao, посоветовав покупать детали у одного продавца, чтобы меньше платить за доставку. Через пару дней анализа я определился с поставщиком и сделал заказ.

И вот после месяца ожидания, наконец, пришла посылка.

image

Содержимое:

1) Arduino Nano V3.0 ATMEGA328P

image

2) Motors driver L298

Когда я выбирал модуль управления моторами, мне на глаза попался интересный вариант, специально для Nano — Feedback Control add-on

Но в Китае я эту модель так и не нашёл, поэтому заказал обычную модель.

image

3) Bluetooth HC-05

image

Через этот модуль мы будем связываться с ПК. В дальнейшем я планирую написать управление под Android.

4) LM2577 DC-DC Adjustable Step Up Power

image

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

Ну и плюс мелочи: Монтажная плата и различные проводки.

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

Сборка робота


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

Примерный план был такой:
1) Подключить к Arduino драйвер моторов, ну, и собственно, сами моторы.
2) Прикрутить мозги к шасси и установить элементы питания.
3) Прикрутить к роботу дистанционное управление.

А дальше уже будет модернизация робота и попытки сделать его максимально автономным.

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

image

Оказалось, это не так просто, ибо плата достаточно крепко сидела на корпусе.

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

image

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

image

Я старался сделать схему гибкой, чтобы можно было легко отсоединять детали от робота. Мне нужно было придумать, как приделать мои детали к LEGO. Это оказалось легче, чем казалось. Вначале я взялся за драйвер двигателей, лёгким движением руки, прикрепив его к деталям LEGO. Правда пришлось немного модернизировать старый корпус, получилась такая интересная композиция.

image

Которая без проблем прикрепилась к шасси робота.

image

Затем я взялся за bluetooth модуль и arduino. Bluetooth модуль я приклеил к одной из деталей, чтобы легко можно было прикрепить его к любому месту. А для arduino решил использовать разъём, приклеил его к одной из деталей LEGO, и припаял необходимые провода к нему.

image

Теперь чтобы прикрепить arduino, достаточно воткнуть её в разъём, и подключить к ней разъём питания.

Программирование робота


Наконец, пришло время подключить собранную схему и заставить моторчики крутиться.

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

image

Для тестов был использован смартфон, так как у него есть bluetooth. Покопавшись в интернете я нашёл пару интересных программ. Blue Arduino показалась мне очень удобной. Ничего лишнего, обычный терминал для связи с arduino. Так же заинтересовала программа Arduino Bluetooth Controller, удобно в ней то, что интерфейс управления представлен в виде джойстика и можно очень быстро назначить на любой элемент управления любую команду. Для тестирования моего робота уже в собранном виде она подошла очень кстати.

Для программирования arduino я использовал стандартный пакет с официального сайта. Была написана самая простейшая программа, взятая из тестовых примеров, чтобы только тестировать.

char incomingByte;  // Входящие данные
 
void setup() 
{      
    Serial.begin(9600);   // инициализация порта
    Serial.println("Robot online...");
}
 
void loop() 
{
    if (Serial.available() > 0) //если пришли данные
    {  
        incomingByte = Serial.read(); // считываем байт
       
        if(incomingByte == 'w') // если w, то едем вперед
        {    
            digitalWrite(DR, HIGH);
            digitalWrite(DL, HIGH);         
            digitalWrite(MR, LOW);     
            digitalWrite(ML, LOW); 
            
            Serial.println("Forward");
        }
        if(incomingByte == 's') // если s, то едем назад
        {    
            digitalWrite(DR, LOW);
            digitalWrite(DL, LOW);       
            digitalWrite(MR, HIGH);     
            digitalWrite(ML, HIGH);
            
            Serial.println("Backward");
        }
        if(incomingByte == 'a') // если a, то поворачиваемся налево
        {    
            digitalWrite(DR, HIGH);
            digitalWrite(DL, LOW);       
            digitalWrite(MR, LOW);     
            digitalWrite(ML, HIGH);
            
            Serial.println("Left");
        }
        if(incomingByte == 'd') // если d, то поворачиваемся направо
        {    
            digitalWrite(DR, LOW);
            digitalWrite(DL, HIGH);       
            digitalWrite(MR, HIGH);     
            digitalWrite(ML, LOW);
            
            Serial.println("Right");
        }
        if(incomingByte == 'f') // если f, то стоп
        {    
            digitalWrite(DR, LOW);
            digitalWrite(DL, LOW);        
            digitalWrite(MR, LOW);     
            digitalWrite(ML, LOW); 
            
            Serial.println("Stop");
        }
    }
}

А вот и проблемы
Вначале я наткнулся на то, что при подключенном bluetooth модуле не заливается прошивка. Но это решилось тем, что провод питания от bluetooth легко отключался от arduino.

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

Вначале я долго не мог определиться со схемой питания. На просторах интернета нашёл схему с двумя отдельными источниками, на «мозги» и на драйвер двигателей. От неё я сразу отказался и начал тестировать различные способы.

image

Оказалось, что можно всю схему питать как через Arduino, так и через драйвер двигателя.

image

В первой схеме я подавал напряжение на Arduino на вход Vin, а на драйвер двигателя пускаем через 5V, но таким образом двигателям не хватало напряжения.

image

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

image

В итоге я просто параллельно подал питание, и всё стало нормально работать.

На этапе тестирования всё было отлично, потому что я питался от usb-провода. Зря я изначально упёрся в деку для трёх батареек АА.

image

Трёх батареек оказалось не достаточно, чтобы привести робота в движение, даже с использованием преобразователя. В итоге преобразователь был убран из схемы. Походя по магазинам, нашёл замечательные литий-ионные(li-ion) аккумуляторы, формата AA.

image

Они подошли идеально (напряжение 3.7V). При первом тесте этих аккумуляторов, мой робот на огромной скорости устремился в стену, остановить его я не успел. Трёх аккумуляторов оказалось слишком много. В итоге я оставил только два аккумулятора.

Для зарядки этих аккумуляторов был докуплен такой модуль:

image

Заключение


Получилась такая вот модель робота.

image

Потом шасси всё-таки пришлось пересобрать, потому что он очень коряво дёргался, точнее, вставал на дыбы, так и ехал.

image

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

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

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

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

UPD
По просьбе желающих добавляю видео с тестированием своего робота.

Максим Трофимчук @LeVoleur
карма
13,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (14)

  • 0
    Хочу робота, который умеет привозить кофе!
  • 0
    А в телефоне есть функция «снять видео»? Было бы неплохо ею воспользоваться :)
  • 0
    Отличный пример, как и сама статья, побольше бы таких подробных статей по робототехники.
  • 0
    Спасибо за столь содержательную статью по сборке робота.
    Хотим обратить внимание на нашу библиотеку, с помощью которой вы можете легко написать свой джойстик в качестве мобильного телефона через библиотеку BTCA2A.
  • +3
    Неужели в каждой статье обязательно нужны десятки картинок с огромным разрешением, весом в 3-5 Мб? Неужели разрешения 800x600 или 1024x768 не хватит?

    К сожалению, я полгода вынужден пользоваться CDMA-модемом с ограниченной скоростью и лимитом трафика (15Гб/мес), поэтому подобные ситуации вызывают двойную досаду.
    • –3
      Используйте мобильную версию сайта. Мобильная версия жесть ) Ну может с мобильного устройства смотреть?
    • 0
      Специально залез со стационарного компа чтобы отписать аналогичный комментарий. На телефоне браузер вообще вылетел, когда попытался открыть статью… Люди, что же вы делаете то? Разве ж так можно? Предупреждать хотя бы о таких вещах нужно перед хабракатами…
    • +2
      Первый раз статью публиковал, не сообразил сразу. Я перезалил фотографии в меньшем размере.
  • 0
    А видео покажете?
    • 0
      Хорошо, завтра запишу.
  • +5
    Отличный проект для начала! По разводке питания существует простое правило: питание разводится из одной точки на все нагрузки, и ни в коем случае не последовательно (от нагрузки к нагрузке). В вашем примере это сейчас не так ощутимо, но когда вы начнёте экспериментировать с более мощными двигателями, вы это сразу заметите по сбоям процессора. Лучше вообще сделать два отдельных стабилизатора (импульсных, для экономии энергии), их запитать от аккумуляторов, а от них уже отдельно питать силовую и электронную части. А в перспективе, когда исполнительные устройства будут слишком мощными и процессор будет сбоить от коммутации тока как такового, нужно будет использовать оптроны для создания 100% гальванической развязки.

    Мы в своё время, разрабатывая устройства автоматизации для автомобиля, много времени убили на правильную разводку питания.

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

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

    Кстати, у упомянутого Lego Mindstorms в комплекте идёт ИК и ультразвуковой датчик. У меня это добро пылится на антресолях. :)
  • 0
    очень рекомендую вам использовать более тонкие проводки для bluetooth и жестко закрепить их. плата предназначена для поверхностного монтажа, контактные площадки очень хрупкие и оторвутся от вибрации — к сожалению, проверил это на своем опыте. как вариант — запихать весь модуль в термоусадку после пайки.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.