Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Игрушки >

Простой робот на Atmega8

Автор: Резистор
Опубликовано 15.04.2014.
Создано при помощи КотоРед.

Вступление

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

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

1495 год. Леонардо да Винчи разрабатывает детальный проект механического человека, способного двигать руками и поворачивать голову. Механизм выглядит как бронированный рыцарь.

Что объединяет все эти «изобретения»? То, что человек пытался создать предметы, которые могли бы также автономно, как и живые существа, существовать в нашем мире, или даже мыслить.

Меняются времена, меняются технологии. Но человека не покинула идея сделать себе «механических слуг», способных мыслить и выполнять разные задачи. Современное название этих устройств – роботы.

Цели, задачи, а также приветствие

Здравствуйте, многоуважаемые радиокоты и радиокошки! Так как сам я ещё котёнок, как в области радиолюбительства, так и в области моего физического возраста, то и устройства, создаваемые мной, должны быть детскими и выполнять роль игрушки(да и вообще, данная статья будет интересна только начинающим). А что  будет выполнять роль игрушки, вы уже, наверное, догадались. Что же оно будет делать? Хм... О! А пусть оно следует за нарисованной линией, ведь это почти следование по заданной траектории! (можно будет заставить его таскать бутерброды от холодильника к рабочему месту, что бы не отвлекаться от любимого занятия :) ) И так, мы вплотную подошли к целям моей работы, а точнее цели:

  • Создать робота (действующую модель), который будет следовать за нарисованной на белом листе бумаги линией.

Задачи:

  • Создание принципиальной электрической схемы
  • Создание программы для созданной платформы
  • Сборка робота, согласно схеме
  • Тестирование, отладка
  • Анализ результатов

Создание действующей модели робота

Итак, создание принципиальной электрической схемы:

Начальная схема выглядит так:

Главная часть схемы – 8- битный МК семейства mega от фирмы Atmel. Именно он выполняет функцию контроллёра поведения робота. В нём заложена программа. Он получает сигналы от двух датчиков – фототранзисторов L32P3C (можно любые другие, лишь бы реагировали на свет). Когда фототранзистор освещён, он пропускает ток, и импульс появляется на выводе МК. МК, получив сигнал высокого уровня, в зависимости от того есть ли сигнал на другом фототранзисторе, посылает сигнал на входы драйвера двигателей L293D, который усиливает эти сигналы ( т.к. выводы МК не способны выдерживать ток больше 20мА ) и передаёт их на двигатели M1 и M2, которые вращаются. Z1, C1 и C2 задают тактовую частоту МК, в данном случае она установлена на 4МГц, то есть контроллёр будет выполнять 4 миллиона операций в секунду. Всем известно, что правильное питание  - залог здоровья, поэтому C3, C4 и VR1 выполняют функцию стабилизатора напряжения, для уничтожения нежелательных помех.

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


 

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

Алгоритм работы:

Алгоритм работы достаточно прост(подразумевается, что датчики находятся по разные стороны линии)

Небольшие поясниения:

Если участок линии, на которой находится робот, прямой, то от обоих датчиков будет идти сигнал.

 Соответственно нужно вращать оба мотора.

Если участок линии, направлен влево, то на левом датчике будет отсутствовать сигнал.

Тогда нужно подать напряжение на правый двигатель.

Если же отсутствует сигнал на правом датчике, то имеет место поворот направо.

Естественно, нужно вращать левый мотор.

Собственно, разработка программы.

В качестве языка разработки был выбран распространённый и мощный язык программирования C.

Разберу, только основной блок, весь код  смотрите ниже.

while ( 1 )
{
      PORTC.0 = PIND.0;
      PORTC.2 = PIND.1;
}

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

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

Итак, мы  подошли к сборке робота, согласно схеме.

Сборка управляющей платы.

Управляющая плата, это плата с микроконтроллером, которая будет контролировать поведение робота. Её схема:

 

 

 

 

 

 

 

 

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

Сборка стабилизотора напряжения и драйвера двигатетей.

На схеме это:

 

 

 

 

 

 

 

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

 

Сборка блока датчиков.

Блок датчиков отвечает за приём информации о мире. На схеме это:

 

 

 

 

 

 

Схема настолько проста, что собирается в течении 3-х минут. Конечный результат:

 

После соединения всех блоков получаем: 

 

 

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

 Тестирование, отладка.

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

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

 

 

 

 

 

 

 

 

 

 

 

Естественно, я ошибался. Робот не то что медленно ехал, он просто стоял на месте.

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

 

 

 

 

 

 

 

 

 

 

 

 

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

Отладка датчиков

Наверное, ещё ни один датчик не работал сразу без отладки. Мой случай не исключение. Изначально датчики реагировали даже на слабый свет. Следовательно, нужно  сделать регулятор чувствительности. Поэтому схема была дополнена:

 

 

 

 

 

 

 

 

Переменные резисторы позволяют настроить чувствительность. Затем можно померить сопротивление переменного резистора и поставить уже постоянный. Кстати, оптимальное сопротивление резистора в моём случае равно 9.1 кОм. Также были добавлены светодиоды, которые позволили датчикам работать даже в тёмных помещениях. Конечный результат:

 

 

 

 

 

 

 

 

 

Отладка программы

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

Была разработана функция:

void PWM ( unsigned char vector )

{

      PORTC = vector;

      delay_us ( 84 );

      PORTC = 0;

      delay_us ( 16 );

      return;

}

Опытный радиолюбитель скажет, что никакой это не ШИМ, и он будет прав. Но всё же данная функция позволяет регулировать скорость робота. (конечный код смотрите ниже в списках файлов)

И вот когда сборка и отладка закончены, настаёт время проверить работоспособность робота (там на фоне играла музыка, но youtube её убрал  =(  )

 

Анализ результатов

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

  • Создание программы.
  • Создание электромеханической платформы. Остановимся на этом моменте поподробнее. Конечная ЭМП получилась такой, что её можно применять для решения таких  простых задач как: прохождение лабиринта, как двухмерного, так и трёхмерного, следование за источником света, он может рисовать (достаточно прикошачить присобачить к корпусу фломастер), робот даже может участвовать в таких робототехнических соревнованиях, как кегельринг.
  • Отладка системы.
  • И самое главное - робот двигается по линии.

 Заключение

В заключение обязательно нужно что-то сказать. А скажу я вот что:

Дело это:

  • Финансово затратное
  • Требует много свободного времени
  • Требует знаний как в программировании так и в области электромеханики

Но если есть минусы, то должны быть и плюсы:

  • Данная работа позволила мне увеличить свои знания как в области программирования,  так и в области электромеханики.
  • И вообще, мне было интересно.

За сим всё. Всем удачного дня!


Файлы:
Исходный код, hex-файл, схема


Все вопросы в Форум.


Как вам эта статья?

Заработало ли это устройство у вас?

52 9 3