Часть 10

13.03.2012

В нескольких следующих постах я хочу описать Mr.General робот-конструктор, что он из себя представляет и конечно же, что в конце концов у меня получилось из этого конструктора собрать. 

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

Для начала я размялся, спаяв плату Freeduino (процесс описан здесь). Затем я решил на этом не останавливаться, и была вскрыта коробка с роботом-конструктором.


Что же входит в комплект?

— печатная плата, которая является и основой робота
— 4 светодиода и 4 фототранзистора IR диапазона для определения препятствий спереди и сзади робота
— 4 светодиода зеленого цвета
— выключатель питания и индикатор питания (красный светодиод)
— гнездо подзарядки и индикатор подзарядки аккумуляторов (желтый светодиод)
— печатная плата, «глаза робота», 4 светодиода и 8 фототранзисторов IR диапазона 
— макетная плата и кабеля-перемычки (различные по длине и способу соединения)
— два серво, переделанных на непрерывное вращение и колеса диаметром 38 мм
— два мини серво и кронштейны для сборки поворотного устройства 
— одно шаровое колесо 
— два держателя батарей (типа 2 х АА)
— комплект гаек, шайб, винтов и и т.п. крепежные элементы (маленькая отвертка и маленький гаечный ключик)
— CD диск с инструкцией 

А вот что должно из этого получится:



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

С этого момента я расскажу, как я чуть не испортил весь этот проект.

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

Вот он, спаянный «Глаз робота». Осталось впаять транзистор и несколько резисторов. 



И тут, видимо сказалась усталость или зрение подвело в столь поздний час (точки пайки находятся очень близко, на фотографии выше это хорошо видно… ) и к тому же опыт пайки у меня только плат с минимальным шагом 2,5 мм. Короче говоря, две ножки транзистора спаялись вместе. С помощью специального инструмента (оловоотсоса) и, естественно, паяльника, ситуация была исправлена. В этот момент я подумал, что четыре других (они на основой плате) транзистора впаяю утром. А ведь на коробке написано для начинающих… забавно…

Затем я продолжил пайку основной платы. Порядок, что за чем припаивалось можно увидеть на фотографиях (нет только фотографии, где уже впаяны все сопротивления… забыл сфотографировать  ). 



Ближе к четырем часам ночи практически все было спаяно, оставались только те самые, злополучные, четыре транзистора. Ну, конечно же, желание все закончить побыстрее (в смысле допаять) перевесило здравый смысл. И как результат — первый транзистор был впаян нормально, хотя не очень эстетично, второй настолько неудачно, что пришлось восстанавливать дорожку на плате (решил прочистить межу контактами пространство и сковырнул дорожку). Два последних тоже впаял так, что меня мучили сомнения: не замыкает ли что-нибудь (использование линзы для осмотра места пайки не помогало…). Вывод один — нужно было дать отдых глазам. В результате спать я лег с чувством полностью запоротого проекта и впустую потраченного времени. Но как в таких случаях бывает, заснуть никак не получалось. В голову лезли различные мысли по спасению проекта (что можно перепаять… как проверить работоспособность плат по отдельности и т. д.). А потому в 7 утра я решил, что бесполезно пытаться уснуть, нужно встать, завершить начатое, и, тем самым, обрести покой.

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

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


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

Итак, крепим сервоприводы. В описании — это второй и третий шаги. Советую сразу сильно не затягивать стойки крепежа (они выделены красным на рисунке). Иначе будет сложно втиснуть между ними сами приводы. 


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


Обжав первый провод, я пришел к выводу, что надежнее будет припаять напрямую к плате (см. фото)


Теперь про сборку поворотного механизма для «Глаза робота». Первое, на что надо обратить внимание, это то, что детали, изображенные на рисунке 5 и 6, очень похожи, но они разные. У детали с рисунка 5 для крепления «Глаза робота» есть соответствующие отверстия. Я это проглядел и пришлось все переделывать.


Еще один момент при сборке этого механизма. Обратите внимание, что на одном шурупе держится практически все. У этих приводов шестерни пластиковые и такой зазор, изображенный на фотографии, не желателен. Приходится постоянно его поправлять. А если по хорошему, то надо этот узел еще доводить до ума.


Итак, провозившись некоторое время, не помню, сколько это у меня заняло, я собрал робота. И поначалу решил попробовать использовать ATmega8A, который тоже прилагался в комплекте. С ним же был набор деталей и плата USB- интерфейса (см. фото)


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


Подключаю я все это к компьютеру. Компьютер ругаться не стал, сделал вид, что ему все понравилось. Открываю arduino-0023, начинаю грузить код, а он не грузится и выдает до боли знакомую ошибку (я о ней писал еще в одном из первых постов на эту тему). Проверив COM порты и заглянув в диспетчер устройств, я понял, что компьютер не видит моего нового устройства. Затем стандартная процедура поиска драйверов и их установка (ссылка на драйвер). Устройство распозналось, но программный код так и не залился. Но работоспособность проверить очень хотелось. И я собрал схему, используя Freeduino Nano v5.
И теперь робот стал выглядеть вот так:

Итак, робот собран и установлен микроконтроллер Freeduino Nano v5. Провода подключены и программный код загружен (пример кода прилагался на диске для ATMega8A, мною были внесены изменения в файл библиобеки IO_pins.h

И тут выплыли те самые проблемы, возникшие при пайке. Робот жил какой-то своей жизнью. Колеса вращались в разные стороны, заставляя робота крутится на одном месте. А скажем так, голова робота судорожно дергалась (как будто у робота какой-то спазм или нервный тик), а время от времени резко задиралась вверх или так же резко поворачивалась, то в лево, то в право. 
Первым делом проверил провода и соответствие портов. Порты были подключены все правильно, но вот провода, стоило их пошевелить так сервоприводы начинали срабатывать. Выяснилось, что под изоляцией скрывался брак (у каждого провода на концах с двух сторон припаян наконечник квадратный в сечении место пайки заизолировано), заменив провода я смог добиться от робота некоторого послушания, но не в полной мере. 

Наверное возникает вопрос. Что робот должен уметь делать? Начнем с того, что не спроста у него такой сложный глаз. Данные от датчиков поступают на четыре аналоговых порта А7, А6, А5, А4. и один цифровой D2 
Приведу для примера часть кода: 

Код

#define IRleft 4  // Compound Eye Left      — analog  input    A4

#define IRright 5  // Compound Eye Right      — analog  input    A5       

#define IRup 6  // Compound Eye Up          — analog  input    A6

#define IRdown 7  // Compound Eye Down      — analog  input    A7

#define IRleds 2  // Compound Eye LEDs      — digital output   D2



А5, А4 отвечают за левый и правый фронт 
А7, А6, отвечают за верхний и нижний фронт 
D2 отвечает за работу IR светодиодов (четыре в один ряд по центру) 


Это дает возможность заставить робота подчиняться движениям руки человека.(со стороны робот похож на игривую собачку). 
И так я остановился на том, что не всегда срабатывало все четко и робот крутился на месте. 
Первым делом разобрался с вращением колес. Нужно было подобрать значения int leftmotorstop и int rightmotorstop так чтобы они не вращались (для каждого серво привода значения могут быть разные). 
В моем случае это: 

Код

int leftmotorstop=1510;

int rightmotorstop=1500;



Затем отредактировал значения int neckLRcenter и int neckUDcenter они отвечают за положение глаза Изменяя значения int neckLRcenter добиваемся, чтобы глаз смотрел строго вперед 
Я настроил эти значения так: 

Код

int neckLRcenter=1500;

int neckUDcenter=800;



Дальше протестировав работу, частично остался доволен результатом. Оставалось разобраться. С нечетким исполнением команд. Первое что проверил это работоспособность IR светодиодов. Это сделать просто если у вас есть видео камера. В камеру я увидел что все четыре светодиода работают. Оставалось проверить работу фотодиодов. Первое, что я решил сделать это проверить их работу программно, а именно промониторить , что я получаю на портах. Просмотрев понял, надо взглянуть снова на единственный в схеме глаза транзистор. Получше протер увеличительное стекло, включил паяльник. Рассматривая контакты, понял, что днем видимость лучше чем ночью (меньше бликов). Нужно было убрать излишки олова. Для этого почистил жало паяльника и аккуратно прогрел контакты. Результатом остался доволен (между точками пайки просматривались четкие дорожки, никаких замыканий быть больше не должно). 

Закрепил плату на место, заново залил программу. И вот оно чудо техники, все заработало. 

Небольшой видеоролик про то, как это все работает (не думал, что так сложно и снимать на камеру и с роботом играться…) 



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