МИНИРОБО

ЛАБОРАТОРИЯ МЕХАТРОНИКИ

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

СПРАВОЧНИК | ЭМУЛЯТОР МИНИРОБОТОВ

ЭМУЛЯТОР ORANGUTAN

Дистрибуцией семейства роботов, управляемых AVR-контроллерами Orangutan, впервые когда-то занялась небольшая инновационная фирма minirobo.ru (кризис, сейчас сайт без движения). Ныне это история, но фирма оказала поддержку в становлении on-line лаборатории. В on-line лаборатории можно ознакомиться принципами программирования. Предварительно полезно почитать описание эмулятора AVR GCC.

C библиотекой AVR Library Pololu можно ознакомиться при помощи графического эмулятора, имитирующего микропроцессор и визуализирующего роботов, динамика которых моделируется на языке матричного исчисления iMatLab. Программа с эмулятора переносима на реальный робот с микроконтроллерами, распространяемыми фирмой Minirobo, при помощи программатора Studio 4 фирмы Atmel.

Не следует программировать робот при полуразряженных аккумуляторах. Дисплей удобен при отладке, однако полезно знать, что шины дисплея и программатора совмещены. Одна из мер, помогающих оживить программатор, это вытянуть дисплей из гнезда 3Pi. Некоторые баги библиотеки. Обращение к дисплею при реверсе второго мотора у Orangutan провоцирует reset, вызывая останов или неравномерное вращение гусениц. Кнопки совмещены и работают при отключенном программаторе.

РОБОКОНТРОЛЛЕР SV-328

Контроллер Orangutan SV-328 включает в себя микропроцессор ATmega328P, который работает на частоте 20 MHz, два двунаправленных порта двигателя, каждый из которых способен обеспечить 1А (продожительно), съемный (8 символов х 2 строки) жидкокристаллический дисплей, зуммер, пользовательские три кнопки и два светодиода. Восемь входов/выходов IO широкого применения могут быть использованы для подключения датчиков или расширения системы. Обозначение каналов слева направо: РС5, PC4, PC3, PC2, PC1, PC0, PD1 и PD0. Orangutan SV-328 работает при питании 6 - 13,5 В и имеет 5V-вый импульсный регулятор, позволяющий выдавать до 3А при управлении RC servos непосредственно от его выхода.

Примечание: у 3pi робота, Orangutan SV, Orangutan LV-168, и Baby Orangutan B, красный светодиод (LED) на том же пине, что и UART передатчик (PD1/TXD). Когда AVR не передает байты по TXD, красный светодиод горит, иначе он мерцает. Основное назначение контроллера Orangutan SV-328, все таки, управление гусеницами, поскольку полноценное управление еще и сервами с использованием готовой библиотеки ведется старшей моделью с номером 1284. Существует еще миниконтроллер серв Маэстро.

СЕРВОПРИВОДЫ РОБОТОВ

Серва соединяется трехжильным кабелем с микроконтроллером: темный цвет - земля GND (грунт), красный средний - питание (Vcc), желтый - управляющий сигнал (Servo). Сигнал представляет собой повторяющуюся последовательность, в пределах периода T сигнал управления ступенчато переходит с 0 на 1, образуя подобие ГГГГГ..... От величины периода T зависит скорость вращения. А от доли верхней полочки Г - угол поворота. Тут неплохое описание с графиками сигналов СЕРВЫ | [2].

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

МОДЕЛЬ УПРАВЛЕНИЯ СЕРВОЙ

Графическая интерпретация попрограмм на C написана с помощью продвинутого в графике iMatLab (нарисована сервомашинка и вебкамера на ее роторе). Демо позволяет познакомиться с подпрограммами управления сервоприводами.


#include <pololu/orangutan.h>



int main() {

clear(); int T=0; 

// Константы инициализации  

// const unsigned char demuxPins[] = {}; 

// servos_init(demuxPins, sizeof(demuxPins)); 



// Серва 0: скорость,

set_servo_speed(0,300); 

// Серва 0: стартовый угол 0 (1300), 

set_servo_target(0,1300); 



while(1){ 

// Логика управления,

switch (T){

case   0: set_servo_speed(0,150); 

          set_servo_target(0, 1800); break; 

case 100: set_servo_speed(0,500); 

          set_servo_target(0, 800);  break; 

case 200: set_servo_speed(0,150); 

          set_servo_target(0, 1300); break;

case 300: set_servo_speed(0,150); 

          set_servo_target(0, 1800); T=0; break;

}

clear(); 

print_long(get_servo_position(0)); 

delay_ms(50); 

T++;

}//while

}



%math, % ДИНАМИКА СЕРВЫ (ВИЗУАЛИЗАТОР iMATLAB),



if tick=0, Serva=0, Speed=150, a=1300, 

R=serva(40), moveXat(R 220), moveYat(R 140), 

end,



function: set_servo_speed(S V), 

Serva=S, Speed=V, 

end,



function: set_servo_target(S A),

Serva=S, Angle=A,  

end,



function: get_servo_position(S),

if a>=Angle, a=a-Speed/10, end,

if a<=Angle, a=a+Speed/10, end,

Q=(a-1300), if abs(Q)<50, Q=0, end,

turnat(R Q/700), show(R),

return a,

end,



function: print_long(a),

Q=100*round(a/100), [T Q]=?,  

end,



function: serva(L),

var t X Y C, C=iniFG(0 '#00aaaa' 0 0), 

t=time(2*PI 8), X=fun(5*sin(t)), Y=fun(5*cos(t)), 

addFG(C 'T' 'F' '#222222' [-L-40 -L-40 L+40 L+40] [-L-2 L+2 L+2 -L-2]), 

addFG(C 'T' 'T' '#ffbb55' [-L+20 -L+20 L-20 L-20] [-L L L -L]), 

addFG(C 'T' 'F' '#222222' X Y), 

moveX(C 220), moveY(C 140), 

return C, 

end,

МИКРОКОНТРОЛЛЕР ФИРМЫ POLOLU

Микроконтроллер Orangutan SVP-1284 (младшие версии микроконтроллера этого сервиса не имеют) вырабатывает управляющий сигнал на ножке PD5. Чтобы управлять несколькими сервами ножка PD5 разветвлена мультиплексором на 8 порций по 3 штырька (для соединения трехжильных кабелей): GND (грунт), красный средний - питание (Vcc), желтый - управляющий сигнал (Servo). Согласно описанию orangutan_svp.pdf питание Vcc=+5 вольт подключается к средней клемме сервомоторчика (по опыту - D-MG16) на плате с помощью синего джампера.

Существует специальный ISP-программатор, который включается в легко узнаваемую колодку с MOSI-MISO. На рисунке ниже для большей ясности изображен первый примитивный микроконтроллер ряда ATmega8 и программатор.

Чтобы запрограммировать микроконтроллер, на него подается питание от 6 до 13 вольт (синяя колодка). Недонапряжение чревато порчей контроллера. Рядом с колодкой есть кнопка включения питания и синий светодиод индикации. Внешний ISP-программатор не требует установки обновлений на Windows (SP3). Программа в кодах hex записываться с его помощью - через AVR-студию легко, как файл на флэшку. Если программатор связывается с комьютером, но не видит устройства, то это связано обычно с неправильной установкой в студии типа микросхемы контроллера.

Можно использовать сервис: встроенный USB AVR ISP программатор (прилагается USB A to mini-B кабель), но он потребует установки обновления Service Pack 3 для Windows XP и ставятся драйверы программатора. По крайне мере первый сеанс работы нужно проводить из админ-панели, иначе может блокироваться операция настройки ISP, причем в режиме AVR GCC (не ассемблирования). Этот путь громоздок и рекомендуется при отсутствии программатора. Распространенный модуль STK500 осваивается заметно проще, но стоит вдвое дороже.

Для управления микроконтроллером через USB-СОМ порт устанавливается Pololu USB-to-serial driver.

SVP-1284 имеет также отдельные гнезда для управления двумя 1-амперными моторами гусениц (управляемых не по положению, а по скорости). Это позволяет собрать робот, который умеет ездить и крутить головой. Кручение головой не отработано.

AVR-Студия имеет готовую библиотеку программ, она скачивается и ставится (поставлена, описание ее). Программа Orangutan Servo Control Functions позволяет опробовать серву в работе. Первый ее пример прост, видно, как устанавливается скорость и поворот сервы на заданный угол по if-условию нажатия кнопки TOP_BUTTON (delay_ms - задает паузу, в микросекундах). На плате микроконтроллера есть 3 кнопки для отладки софта. Программа сводится к вызовам подпрограмм установки скорости и положения в вечном цикле ожидания нажатия кнопки while, для ее понимания не нужно глубокое знание C. Первая задача - запрограммировать и посмотреть, вертит ли штучка головой.


#include <pololu/orangutan.h> 

  

/* 

 * svp-one-servo: for the Orangutan SVP. 

 * 

 * This example uses the OrangutanServos functions to control one servo. 

 * The servo pulse signal is sent on pin PD5, which is hardwired to the 

 * input of the demux.  The servo signal is available on demux output 0. 

 * This example uses the OrangutanPushbuttons functions to take input 

 * from the user, and the OrangutanLCD functions to display feedback on 

 * the LCD. 

 * 

 * http://www.pololu.com/docs/0J20 

 * http://www.pololu.com 

 * http://forum.pololu.com 

 */

  

int main() 



    const unsigned char demuxPins[] = {}; 

    servos_init(demuxPins, sizeof(demuxPins)); 

  

    // Make the servo go to a neutral position. 

    set_servo_target(0, 1300);  

  

    clear(); // Clear the LCD. 

  

    while(1) // Loop forever. 

    { 

        // When the user presses the top button, 

        // execute a pre-programmed sequence of servo movements. 

        if (button_is_pressed(TOP_BUTTON)) 

        { 

            // Set the servo speed to 150.  

            // This means that the pulse width 

            // will change by at most 15 microseconds every 20 ms.  

            // So it will take 1.33 seconds to go from a pulse 

            // width of 1000 us to 2000 us. 

            set_servo_speed(0, 150); 

  

            // Slowly move the servo to position 1800. 

            set_servo_target(0, 1800); 

            delay_ms(700); 

  

            // Disable the speed limit 

            set_servo_speed(0, 0); 

  

            // Make the servo move back to position 1300 as fast as possible. 

            set_servo_target(0, 1300); 

        } 

  

        if (button_is_pressed(BOTTOM_BUTTON)) 

        { 

            // While the user holds down the bottom button, move the servo 

            // slowly towards position 1800. 

            set_servo_speed(0, 60); 

            set_servo_target(0, 1800); 

            wait_for_button_release(BOTTOM_BUTTON); 

  

            // When the user releases the bottom button, print its current 

            // position (in microseconds) and then move it back quickly. 

            clear(); 

            print_long(get_servo_position(0)); 

            print_from_program_space(PSTR(" \xE4s")); 

            set_servo_speed(0, 0); 

            set_servo_target(0, 1300); 

        } 

    } 



  

// Local Variables: ** 

// mode: C ** 

// c-basic-offset: 4 ** 

// tab-width: 4 ** 

// indent-tabs-mode: t ** 

// end: **

Итак, управление у сервы импульсное, по сигнальному проводу. Для того, чтобы повернуть серву на нужный угол ей надо на вход подавать импульс с нужной длительностью. Т.е. управляем не уровнем, а протяженностью сигнала, что проще устроить на дискретном выходе микроконтроллера. Предложенная фирмой pololu.com старшая версия микроконтроллера (Orangutan SVP-1284) имеют мультиплексор для управления 8 сервами. Для сервоприводов и конроллеров версий SVP (старше 328-й) написана библиотека.

ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ

Кстати (примечание по управлению), у 3pi робота, Orangutan SV, Orangutan LV-168, и Baby Orangutan B, красный светодиод (LED) на том же пине, что и UART передатчик (PD1/TXD). Когда AVR не передает байты по TXD, красный светодиод горит, иначе он мерцает. Микроконтроллер SV328 может управлять сервоприводом любым своим IO выходом (which allows the 5V bus to deliver up to 3 A - enough to power servos), но это требует адекватного программирования (что нелегко). У Orangutan SVP (версия старше 328-го) ножка pin PD5 - стандартный выход для управляющего сигнала (a hardware PWM output (OC1A)), это позволяет не имитировать генерацию импульсов софтом. Мультиплексор размножает эту линию.

У pololu есть микроконтроллер только для серв, называемый Маэстро. Он дешевле отмеченного (который управляет еще и гусеничными моторами).

ДРАЙВЕР УПРАВЛЕНИЯ СЕРВАМИ МАЭСТРО

Маэстро, 6-ти КАНАЛЬНЫЙ вариант | ДРАЙВЕР | ПРИМЕРЫ СЦЕНАРИЕВ

РУКОВОДСТВО

ГНЕЗДА ПОД ОБЖИМ, ШТЫРИ СОЕДИНЕНИЙ

Варианты гнезд BLS3, BLS2 c полоской контактов под обжим

Штыри PLS-40

СЕРВА С УПРАВЛЕНИЕМ ПО ПОЛОЖЕНИЮ

Серва MEXTRONICS D-MG16

СЕРВА С УПРАВЛЕНИЕМ ПО СКОРОСТИ

The SM-S4303R is a standard-sized servo that has been built by SpringRC specifically for continuous rotation (up to 70 RPM at 6 V), and it is the strongest continuous rotation servo we carry (4.8 kg-cm/67 oz-in at 6 V). It features two ball bearings on the output shaft for reduced friction, and it offers easy access to the rest-point adjustment potentiometer. The servo can be controlled using a direct connection to a single microcontroller I/O line without any additional electronics, which makes it a great actuator for beginner robotics projects.

The SM-S4303R continuous rotation servo converts standard RC servo position pulses into continuous rotation speed. The default rest point is 1.5 ms, but this can be adjusted by using a small slotted screwdriver to turn the middle-point positioner. Pulse widths above the rest point result in counterclockwise rotation, with speed increasing as the pulse width increases; pulse widths below the rest point result in clockwise rotation, with speed increasing as the pulse width decreases. Note that this is the reverse of what is described in the datasheet.

ДРУГИЕ МИКРОКОНТРОЛЛЕРЫ

Набор Motor Shield

Шаговый привод нуждается в драйвере (усилителе), драйвер часто продается с микропроцессором (наборы Aurdino). Платка с драйвером стоит под 20 баксов. Платка в ЧИП-ДИП около 1200 руб, столько же стоит каждый шаговик, см. там же или minirobo.ru. Причем, надо выяснять - каждый раз - а есть ли связь по UART (переходник UART-USB освоен, но он может быть встроен, и тогда должен прилагаться софт).

Примеры разработок с AVR-микроконтроллером | [2] | Статья

ДАТЧИКИ И ЭФФЕКТОРЫ

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

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

ПРИМЕР ИСПЫТАНИЙ РОБОТЕЛЕЖКИ RP5



Rambler's Top100