роботы
робототехника
микроконтроллеры
Главная
Новости
Спорт
Шаг за шагом
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты
 

Простейший робот
Схема и описание простого робота на одной микросхеме. Робот может двигаться на свет или следовать за рукой.  

Схема и описание первого проекта на микроконтроллере AVR
"Hello, world!" для микроконтроллера.  

Робот на микроконтроллере AVR
Схема робота на микроконтроллере. Примеры программ.  

ПРОСТОЙ РОБОТ НА МИКРОКОНТРОЛЛЕРЕ (Часть 1)



Простого робота на микроконтроллере можно собрать на основе драйвера управления двигателями и непосредственно самого микроконтроллера.

В качестве драйвера двигателей используем микросхему L293D, входы которой подсоединим к выводам микроконтроллера так, как показано на схеме. В данном примере будет рассмотрен микроконтроллер ATmega8, хотя можно использовать и другой микроконтроллер (например, ATtiny26 или какой-либо микроконтроллер из семейства Mega).

Схема простого робота на микроконтроллере AVR

Схема робота на микроконтроллере AVR


   Комментарий к схеме робота

В приведенной схеме рекомендуется использовать электродвигатели с током потребления до 150 мА и напряжением питания 3-5 В. При использовании более мощных моторов рекомендуется применить раздельное питание электронной схемы и электродвигателей, а также предусмотреть меры по стабилизации работы микроконтроллера.


   Из бесед Бибота и Бобота
Дорогой Бобот, на некоторых других схемах я встречал дополнительные элементы, например резистор, подтягивающий вывод RESET к питанию, или конденсатор, шунтирующий RESET на "землю".
Так ли они необходимы?


Это очень хороший вопрос, старина Бибот. Внешний pull-up резистор, о котором ты говоришь, подключают к выводу RESET для предотвращения случайного сброса микроконтроллера при просадках питания, а конденсатор - для дополнительной защиты линии RESET от внешних помех. В приводимой схеме их нет по следующей причине: микроконтроллеры AVR второго поколения уже имеют для линии RESET встроенный подтягивающий резистор, номинал которого калибруется на заводе Atmel таким образом, чтобы обеспечить максимально устойчивую работу чипа без использования внешнего подтягивающего резистора [1]. А если ты заглянешь в атмеловский апноут "AVR042: AVR Hardware Design Consideration" (PDF), то об упомянутом тобой конденсаторе сможешь прочитать следующее: "Это непосредственно не требуется с тех пор, как AVR имеют low-pass фильтр, чтобы устранить пики и шум, которые могли бы вызвать сброс".

Представленная схема максимально упрощена и является самым простым примером для первых опытов по построению робота на микроконтроллере. А для того чтобы уберечь микроконтроллер от возможных просадок питания в схему, как ты можешь видеть, введен конденсатор номиналом 1000 мкф, который играет роль накопителя энергии и обеспечивает нормальное функционирование микроконтроллера. Стоит также добавить, что роботы, построенные в точном соответствии со схемами, приводимыми в курсе "Шаг за шагом", при всей своей простоте являлись неоднократными участниками и победителями соревнований Российской олимпиады роботов, Открытого робототехнического турнира на Кубок политехнического музея, Всероссийского робототехнического фестиваля, соревнований Фестиваля науки в Москве.

А что мне добавить в схему в первую очередь, если я захочу сделать ее более защищенной?

Начни с цепи сброса, о которой мы только что говорили. Подключи внешний подтягивающий резистор номиналом от 4,7 до 10 кОм так, как показано на следующем рисунке, и подключи вывод "аналогового" питания AVCC. Схема при этом усложнится не намного.

Кроме того, чтобы избежать проблем с наводками от работающих электродвигателей, подсоедини непосредственно к каждому из них керамический конденсатор номиналом 0,1 мкф.

А каким образом я должен подключить микроконтроллер, чтобы быть абсолютно уверенным в своем устройстве?

Абсолютно уверенным быть ни в чем нельзя (Бобот с сожалением посмотрел на свою беспричинно погасшую трубку). Но вот обеспечить некоторые меры, чтобы работа устройства была приближена к уровню стабильности промышленной автоматики, вполене можно. Об этом см. подробнее в статье "Подключение AVR: стабилизация работы микроконтроллера".

На схеме робота входы драйвера двигателей L293D подключены к выводам порта C микроконтроллера ATmega8, но их можно подключить к любому из портов микроконтроллера (при этом будет необходимо внести изменения в программную часть, указав порт и непосредственно его выводы в соответствующих строках программы, приводимой ниже).

Электролитический конденсатор C3 (1000 мкф, 10-25 в.) необходим для того, чтобы сгладить броски по питанию, вызванные работой моторов. Этот конденсатор очень важен. Именно он дает возможность работать схеме с необходимым уровнем стабильности. Вместо одного конденсатора можно использовать два. Номинал каждого из них в этом случае может быть около 470 мкф. При этом один из конденсаторов устанавливают в непосредственной близости от выводов питания микроконтроллера, а второй - рядом с выводом Vs микросхемы драйвера моторов L293D. Обеспечение стабилизации питания - один из важнейших аспектов проектирования устройств на микроконтроллерах.

Для того чтобы еще больше стабилизировать работу микроконтроллера, хорошим решением может служить керамический конденсатор емкостью около 0,1 мкф, подсоединенный между выводами питания VCC, GND (ножки 7 и 8) и располагающийся в непосредственной близости от них (на схеме не указан).

Механическая схема рассматриваемого робота должна быть собрана по "танковому" принципу: левый мотор передает движение на левое колесо, правый - на правое. По-другому такая механическая схема называется схемой с двумя ведущими колесами.


Для того чтобы собранный робот "ожил", напишем для него программу. Откомпилируем ее и загрузим в микроконтроллер. (Как это сделать, см. в статьях: Makefile и компиляция программы; Простой программатор AVR; Первый проект на микроконтроллере AVR.)




/*******************************************************
ПРИМЕР 1 :: ВРАЩЕНИЕ МОТОРАМИ ВПЕРЕД-НАЗАД :: MYROBOT.RU
********************************************************/ 

   #define F_CPU 1000000UL  // указываем частоту в герцах
   
   #include <avr/io.h>
   #include <util/delay.h>

int main(void) // начало основной программы
{
   
   DDRC = 0xff; // все выводы порта C сконфигурировать как выходы

        while (1) {  // Бесконечный цикл

            // ---------- вращаем моторы вперед 1 сек ----------

            PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
            PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
            PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
            PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C

            _delay_ms(1000); // ждем 1 сек.

            // --------------------------------------------------


                        // ---------- вращаем моторы назад 1 сек ----------

                        PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
                        PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
                        PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
                        PORTC |= _BV(PC4); // установить "1" на линии 4 порта C

                        _delay_ms(1000); // ждем 1 сек.

                        // --------------------------------------------------


                   } // закрывающая скобка бесконечного цикла

} // закрывающая скобка основной программы

Отсоединив программатор, проверим направление вращения колес робота. Если моторы вращают колеса в противоположные стороны, поменяйте местами их выводы.

Следующим шагом будет создание программы, реализующей поворот на необходимый угол остановкой одного из моторов.


/***************************************************
ПРИМЕР 2 :: ДВИЖЕНИЕ ПРЯМО С ПОВОРОТОМ :: MYROBOT.RU
****************************************************/ 

   #define F_CPU 1000000UL  // указываем частоту в герцах
   
   #include <avr/io.h>
   #include <util/delay.h>

int main(void) // начало основной программы
{
   
   DDRC = 0xff; // все выводы порта C сконфигурировать как выходы

        while (1) {  // Бесконечный цикл

            // ---------- вращаем моторы вперед 1 сек ------------

            PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
            PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
            PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
            PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C

            _delay_ms(1000); // ждем 1 сек.

            // ----------------------------------------------------


                        // ---------- останавливаем мотор M2 на 0,5 сек ------

                        PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
                        PORTC |= _BV(PC2); // установить "1" на линии 2 порта C

                        _delay_ms(500); // ждем 0,5 сек.

                        // ----------------------------------------------------


                   } // закрывающая скобка бесконечного цикла

} // закрывающая скобка основной программы

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

Для более быстрого разворота робота можно использовать реверс (вращение в противоположную сторону) одного из моторов. Написание такой программы будет хорошим практикумом для самостоятельного программирования движения робота.



Искусство роботов

A new kind of art: the painting robots.
     Ежегодно проводимая Международная художественная выставка робототехнического искусства ArtBots: "Шоу талантов роботов" собирает тысячи посетителей.
     Самая первая выставка ArtBots прошла еще в мае 2002 года в Бруклинском институте. А уже в июле 2003 года работу выставки освещали самые престижные газеты и журналы.
     "Каждый год мы публикуем открытое приглашение для художников со всего мира принять участие в нашей выставке. Никаких формальных требований не существует: если Вы считаете, что это робот, и если Вы считаете, что это искусство, то можете смело отправлять заявку".

ArtSBot (Art Symbiotic roBots)
Хотя получившийся робот достаточно прост, с ним можно провести ряд интереснейших экспериментов, среди которых могут быть опыты по созданию рисующего робота и робота-танцора.

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





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

Robotic Action Painter - робот, созданный португальским дизайнером Леонелом Моурой. Интересные результаты можно получить, используя маркеры и фломастеры разных типов, толщины и фактуры. Красиво выглядит фактурная прерывистая линия, оставляемая мягким толстым стеклографом. А самые необычные результаты дают подогреваемые восковые палочки для рисования. Устройство подогрева легко сделать из небольшого кусочка нихромовой проволоки и стеклянной трубки. (Батареи питания робота при этом быстро садятся.)

Как выглядит рисующий робот в работе, вы можете посмотреть на видеоролике в режиме он-лайн (необходим Macromedia Flash Player) или скачать видеофайл.



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


myROBOT.ru Это оригинальная статья myROBOT.ru
Постоянный адрес статьи: http://myrobot.ru/stepbystep/r_firstbot1.php




Файлы:

Схемы роботов (версии для печати в фомате PDF).


Datasheets:

Описание микросхемы управления двигателем L293D (англ.).
L293D.pdf

Описание микроконтроллера ATmega8 (англ.).
ATmega8.pdf

Для просмотра необходим Adobe Acrobat Reader     Скачать Acrobat Reader




Использованные иллюстрации:

A new kind of art: the painting robots.
Artwork, 400 x 500 cm, produced by a group of 10 robots

ArtSBot (Art Symbiotic roBots).
http://artbots.org/2004/participants/ArtSBot/

Robotic Action Painter.
http://www.leonelmoura.com/






Статьи раздела
РОБОТЫ

Все статьи курса
Простой робот на микроконтроллере (Часть 1).
Управляем электромоторами.


Простой робот на микроконтроллере (Часть 2).
Робот с фотодатчиком.


Простой робот на микроконтроллере (Часть 3).
Робот для соревнований.







Copyright © myrobot.ru, 2005-2013


OpenHosting