Tiny Dog - ФОРУМ ДВ Робот dvrobot.ru
Воскресенье, 18.11.2018, 10:10
Главная Мой профиль Регистрация Выход
  • НАШ МАГАЗИН
  • Вы вошли как Гость | Группа "Гости"Приветствую Вас, Гость
    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Модератор форума: GRACH, Serg  
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Библиотека Проектов » Tiny Dog (Простой четырехногий шагающий робот)
    Tiny Dog
    m_wДата: Среда, 23.01.2013, 07:13 | Сообщение # 1
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Все видели BigDog (http://www.bostondynamics.com/robot_bigdog.html). Я тоже сделал робота собаку. Само собой разумеется, результат соответствует бюджету. А он у меня намного меньше, чем у Boston Dynamics.

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

    Я использовал сервоприводы HK15288A. У этих сервоприводов три вывода. Коричневый провод подключается к GND. Красный провод подключается к VCC. Желтый провод соединяется с ножкой порта микроконтроллера. Управляются сервоприводы хитрыми импульсами.

    Для того, чтобы установить качалку сервопривода в среднее положение необходимо выставить логическую единицу на ножке МК к которой подключен сервопривод. Затем подождать 1500 микросекунд и выставить логический ноль на ножке МК. Логический ноль должен присутствовать на ножке около 20 миллисекунд. Длительность наличия логического ноля на ножке МК на положение качалки сервопривода не влияет. Поэтому допустимы небольшие отклонения от указанной величины.

    Ниже приведен фрагмент простейшей программы устанавливающей качалку сервопривода в среднее положение:

    Код

    for(;;)
    {
         PORTF |= (1<<PF0); // устанавливаем 1 на PF0
         _delay_us(1500); // ждем 1500 микросекунд
         PORTF &= ~(1<<PF0); // устанавливаем 0 на PF0
         _delay_ms(17); // ждем 17 миллисекунд
    }


    Сигнальный провод сервопривода подключен к PF0. Ножка PF0 должна быть сконфигурирована как выход.

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

    В этом случае ранее приведенный фрагмент кода будет выглядеть следующим образом:

    Код

    for(;;)
    {
         PORTF |= (1<<PF0); // устанавливаем 1 на PF0
         _delay_us(2000); // ждем 2000 микросекунд
         PORTF &= ~(1<<PF0); // устанавливаем 0 на PF0
         _delay_ms(17); // ждем 17 миллисекунд
    }


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

    И фрагмент программы:

    Код

    for(;;)
    {
         PORTF |= (1<<PF0); // устанавливаем 1 на PF0
         _delay_us(1000); // ждем 1000 микросекунд
         PORTF &= ~(1<<PF0); // устанавливаем 0 на PF0
         _delay_ms(17); // ждем 17 миллисекунд
    }


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

    Чуть не забыл. Есть еще один нюанс про который нужно сказать. Собирая конструкции с сервоприводами необходимо учитывать такой параметр как крутящий момент. У HK15288A он составляет 8.0 кг/см при 4.8 в. Превышение этого параметра на работающем сервоприводе, с большой степенью вероятности, выведет его из строя. Проще говоря, сервопривод сгорит.


    Мой блог http://justforduino.blogspot.ru/
     
    m_wДата: Среда, 23.01.2013, 07:20 | Сообщение # 2
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Фото робота:



    Картинка побольше http://yadi.sk/d/XOK7mgt522uiG

    Как видите конструкция простая. Кусок стеклотекстолита 10 x 15 см. По углам приклеены сервоприводы. К качалкам сервоприводов крепятся ножки сделанные из болтов 5 x 85 мм.

    При длине ножки робота в 6 см (меряется от центра вала сервопривода и до кончика соприкасающегося с поверхностью) крутящий момент составит более 1 кг при 4.8 в. Так как масса всего робота значительно меньше, превышение этого параметра весьма затруднительно.
    Прикрепления: 7358579.jpg(126.2 Kb)


    Мой блог http://justforduino.blogspot.ru/
     
    m_wДата: Среда, 23.01.2013, 07:26 | Сообщение # 3
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Еще для изготовления этого робота необходим сервотестер. Стоят они не дорого. Но и сделать их не сложно.



    Большая картинка http://yadi.sk/d/XUGi_Q2y22v1Q

    Сервопривод подключается к ATmega32U4 как описано ранее. Еще к ATmega32U4 подключается три кнопки. На PD0, PD1 и PD2.

    Программа:

    http://yadi.sk/d/xlpHUsGw22v88

    Написана на С в AVR Studio.

    При нажатии кнопки на PD0 качалка сервопривода отклоняется в одну сторону, а при нажатии на кнопку соединенную с PD2 - в другую. Нажатием кнопки подключенной к PD1 качалка сервопривода устанавливается в среднее положение.

    Собственно, перед установкой качалки на сервопривод, его вал необходимо установить в среднее положение.
    Прикрепления: 2573763.jpg(132.4 Kb)


    Мой блог http://justforduino.blogspot.ru/
     
    m_wДата: Среда, 23.01.2013, 07:29 | Сообщение # 4
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Теперь "мозг" робота. Он сделан на микроконтроллере ATtiny2313.

    Схема:



    Сервопривод левой передней ножки подключается к разъему JP1.
    Сервопривод правой задней ножки подключается к разъему JP2.
    Сервопривод левой задней ножки подключается к разъему JP3.
    Сервопривод правой передней ножки подключается к разъему JP4.

    Робот управляется с компьютера через Bluetooth. Bluetooth модуль подключается к разъему JP5.

    Разъем JP6 предназначен для подключения программатора. Я использовал USBasp.
    Прикрепления: 9144282.gif(13.5 Kb)


    Мой блог http://justforduino.blogspot.ru/
     
    m_wДата: Среда, 23.01.2013, 07:35 | Сообщение # 5
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Фотография робота с подключенным программатором:



    Более качественное изображение http://yadi.sk/d/uycyAX6m22vdC

    При программировании и отладке ботик питался от USB.

    Программа для контроллера:

    http://yadi.sk/d/JvATqpkd22vnM

    Написана на С в AVR Studio.

    Длительность управляющих импульсов находится в пределах от 1300 микросекунд и до 1700 микросекунд. Подобрано опытным путем. Мне так больше понравилось. Да. Это был основной критерий.

    Fuse bits микроконтроллера для этой программы менять не нужно. Они должны быть установлены так, как их установил изготовитель микроконтроллера.

    И программа для компьютера:

    http://yadi.sk/d/Vd_ge4d222vxo

    Написана на python.

    Windows присвоила моему Bluetooth модулю порт COM6. Программа настроена на работу именно с этим портом. Если у Вас иначе, то необходимо внести изменения в программу.

    В крайнем случае можете использовать любую терминальную программу работающую с вашим Bluetooth модулем.

    Управляется робот следующим образом. При отправке 0 робот останавливается. Отправка 1 заставляет робота идти вперед. 2 означает движение назад. 3 это поворот налево. 4 это поворот направо. Вот так все просто и незамысловато.

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

    http://www.youtube.com/watch?v=Mz9FWa790us
    Прикрепления: 7614132.jpg(131.8 Kb)


    Мой блог http://justforduino.blogspot.ru/
     
    SergДата: Среда, 23.01.2013, 13:53 | Сообщение # 6
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline
    Спасибо за статью. Не могли бы Вы переделать код под atMega 8, что бы робота можно было собрать на основе Arduino?
     
    m_wДата: Суббота, 26.01.2013, 04:13 | Сообщение # 7
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Сделаю. Но вряд ли раньше выходных.

    Добавлено (26.01.2013, 04:04)
    ---------------------------------------------

    Код

    ////////////////////////
    //
    // Arduino Leonardo
    //
    ////////////////////////
    //
    // Sketch: Tiny Dog
    //

    #include <Servo.h>

    Servo servo1;
    Servo servo2;
    Servo servo3;
    Servo servo4;

    int data = 0;

    void stop( void )
    {
         servo1.writeMicroseconds(1500);
         servo2.writeMicroseconds(1500);
         servo3.writeMicroseconds(1500);
         servo4.writeMicroseconds(1500);

         delay(1000);
    }

    void forward( void )
    {
         servo1.writeMicroseconds(1300);
         servo2.writeMicroseconds(1700);

         delay(1000);

         servo3.writeMicroseconds(1700);
         servo4.writeMicroseconds(1300);

         delay(1000);

         servo1.writeMicroseconds(1500);
         servo2.writeMicroseconds(1500);

         delay(1000);

         servo3.writeMicroseconds(1500);
         servo4.writeMicroseconds(1500);

         delay(1000);

         servo3.writeMicroseconds(1300);
         servo4.writeMicroseconds(1700);

         delay(1000);

         servo1.writeMicroseconds(1700);
         servo2.writeMicroseconds(1300);

         delay(1000);

         servo3.writeMicroseconds(1500);
         servo4.writeMicroseconds(1500);

         delay(1000);

         servo1.writeMicroseconds(1500);
         servo2.writeMicroseconds(1500);

         delay(1000);
    }

    void backward( void )
    {
         servo1.writeMicroseconds(1700);
         servo2.writeMicroseconds(1300);

         delay(1000);

         servo3.writeMicroseconds(1300);
         servo4.writeMicroseconds(1700);

         delay(1000);

         servo1.writeMicroseconds(1500);
         servo2.writeMicroseconds(1500);

         delay(1000);

         servo3.writeMicroseconds(1500);
         servo4.writeMicroseconds(1500);

         delay(1000);

         servo3.writeMicroseconds(1700);
         servo4.writeMicroseconds(1300);

         delay(1000);

         servo1.writeMicroseconds(1300);
         servo2.writeMicroseconds(1700);

         delay(1000);

         servo3.writeMicroseconds(1500);
         servo4.writeMicroseconds(1500);

         delay(1000);

         servo1.writeMicroseconds(1500);
         servo2.writeMicroseconds(1500);

         delay(1000);
    }

    void left( void )
    {
         servo1.writeMicroseconds(1700);
         servo4.writeMicroseconds(1700);

         delay(1000);

         servo2.writeMicroseconds(1700);
         servo3.writeMicroseconds(1700);

         delay(1000);

         servo1.writeMicroseconds(1500);
         servo2.writeMicroseconds(1500);
         servo3.writeMicroseconds(1500);
         servo4.writeMicroseconds(1500);

         delay(1000);
    }

    void right( void )
    {
         servo1.writeMicroseconds(1300);
         servo4.writeMicroseconds(1300);

         delay(1000);

         servo2.writeMicroseconds(1300);
         servo3.writeMicroseconds(1300);

         delay(1000);

         servo1.writeMicroseconds(1500);
         servo2.writeMicroseconds(1500);
         servo3.writeMicroseconds(1500);
         servo4.writeMicroseconds(1500);

         delay(1000);
    }

    void setup()
    {
         // USART
         Serial1.begin(9600);

         servo1.attach(2);
         servo2.attach(3);
         servo3.attach(4);
         servo4.attach(5);
    }

    void loop()
    {
         if (Serial1.available() > 0)
         {
             data = Serial1.read();
         }

         if ( data == 0 )
         {
             stop();
         }

         if ( data == 1 )
         {
             forward();
         }

         if ( data == 2 )
         {
             backward();
         }

         if ( data == 3 )
         {
             left();
         }

         if ( data == 4 )
         {
             right();
         }
    }

    Добавлено (26.01.2013, 04:06)
    ---------------------------------------------
    Некоторые пояснения по подключению сервоприводов.

    D2 управляет сервоприводом левой передней ножки.
    D3 управляет сервоприводом правой задней ножки.
    D4 управляет сервоприводом левой задней ножки.
    D5 управляет сервоприводом правой передней ножки.

    Bluetooth модуль подключается к D0 и D1.

    Добавлено (26.01.2013, 04:13)
    ---------------------------------------------
    У Arduino Leonardo работа с USART организована через Serial1. Для других Arduino платок Serial1 необходимо заменить на Serial.

    PS Это первый мой скетч. Замечания и предложения приветствуются.


    Мой блог http://justforduino.blogspot.ru/
     
    cmept-27Дата: Среда, 30.01.2013, 22:50 | Сообщение # 8
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 17
    Репутация: 0
    Статус: Offline
    А вот еще мое не готовое чудо http://youtu.be/CyDJYhx2WAM .
     
    Ivan-771Дата: Среда, 30.01.2013, 22:59 | Сообщение # 9
    5 Вольт
    Группа: Пользователи
    Сообщений: 39
    Репутация: 0
    Статус: Offline
    Цитата (cmept-27)
    А вот еще мое не готовое чудо http://youtu.be/CyDJYhx2WAM .
    Концовка доставляет. smile
     
    GRACHДата: Среда, 06.02.2013, 13:39 | Сообщение # 10
    dvrobot.ru
    Группа: Администраторы
    Сообщений: 111
    Репутация: 16181
    Статус: Offline
    cmept-27, Да, круто в конце клешней тыкает!!!
    Описать процесс производства не хотите на общее обозрение!? Может кто захочет повторить. А почему еще не готовое?
     
    cmept-27Дата: Среда, 06.02.2013, 23:08 | Сообщение # 11
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 17
    Репутация: 0
    Статус: Offline
    Серва одна не выдержала веса и сгорела. Жду конца китайского нового года придут новые сервы. Когда будет готов скорее всего опишу процесс производства.
     
    cmept-27Дата: Суббота, 13.04.2013, 23:12 | Сообщение # 12
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 17
    Репутация: 0
    Статус: Offline




    Начало нового ))
    Прикрепления: 5268907.jpg(206.9 Kb) · 4098298.jpg(234.3 Kb)
     
    SergДата: Суббота, 13.04.2013, 23:59 | Сообщение # 13
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline
    Гигинтский паук!!! Дырок полу наделает.
     
    cmept-27Дата: Воскресенье, 14.04.2013, 18:50 | Сообщение # 14
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 17
    Репутация: 0
    Статус: Offline
    smile

    Прикрепления: 6656664.jpg(215.2 Kb)
     
    muveyДата: Воскресенье, 14.04.2013, 18:52 | Сообщение # 15
    220 Вольт
    Группа: Пользователи
    Сообщений: 303
    Репутация: 1
    Статус: Offline
    cmept-27, а ща сервы мощнее поставил?

    Ex nihilo nihil fit
     
    cmept-27Дата: Воскресенье, 14.04.2013, 19:00 | Сообщение # 16
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 17
    Репутация: 0
    Статус: Offline
    MG995 Надеюсь попрет. Хотя сейчас паук и легче получился.
     
    muveyДата: Воскресенье, 14.04.2013, 19:05 | Сообщение # 17
    220 Вольт
    Группа: Пользователи
    Сообщений: 303
    Репутация: 1
    Статус: Offline
    cmept-27, 8 серваков получается..жрет много?

    Ex nihilo nihil fit
     
    cmept-27Дата: Понедельник, 15.04.2013, 20:06 | Сообщение # 18
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 17
    Репутация: 0
    Статус: Offline
    Скоро узнаю. Ну и по тому как жрет буду выбирать аккуму

    Добавлено (14.04.2013, 19:20)
    ---------------------------------------------
    И серваков не 8 а 12

    Добавлено (15.04.2013, 19:45)
    ---------------------------------------------
    Проверяю на сколько хватит китайских аккум

    Добавлено (15.04.2013, 20:06)
    ---------------------------------------------
    Ну блин врядле они 3800 они думаю и до 1500 не тянут ((

     
    muveyДата: Понедельник, 15.04.2013, 20:32 | Сообщение # 19
    220 Вольт
    Группа: Пользователи
    Сообщений: 303
    Репутация: 1
    Статус: Offline
    cmept-27, у тя LiIon?

    Ex nihilo nihil fit
     
    cmept-27Дата: Понедельник, 15.04.2013, 22:25 | Сообщение # 20
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 17
    Репутация: 0
    Статус: Offline
    Угу
     
    cmept-27Дата: Пятница, 26.04.2013, 21:43 | Сообщение # 21
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 17
    Репутация: 0
    Статус: Offline
    smile
    Прикрепления: 4201804.jpg(173.6 Kb) · 4060893.jpg(184.9 Kb)
     
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Библиотека Проектов » Tiny Dog (Простой четырехногий шагающий робот)
    • Страница 1 из 1
    • 1
    Поиск:

    ДВ Робот - Чат