Menu Home

Бесплатная техническая библиотека для любителей и профессионалов Бесплатная техническая библиотека


Простой робот. Энциклопедия радиоэлектроники и электротехники

Бесплатная техническая библиотека

Энциклопедия радиоэлектроники и электротехники / Аппаратура радиоуправления

Комментарии к статье Комментарии к статье

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

Простой робот. Принципиальная схема робота
(нажмите для увеличения)

Сердцем робота является микроконтроллер фирмы ATMEL: AT90S2313, но можно и любой другой этой фирмы, у этого микроконтроллера 2кб памяти для программы, 15 портов ввода/вывода, доступное питание - 4-6В. Двигателями будет управлять "драйвер двигателя" - микросхема L293D (отечественный аналог - КР1128КТ4А). В качестве датчика было решено взять фоторезисторы СФ3-1.

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

Команда Ходовой двигатель Двигатель поворота
вперед (F) вперед стоп
вперед-вправо (FR) вперед вперед
вперед-влево (FL) вперед назад
назад (B) назад стоп
назад-вправо (BR) назад вперед
назад-влево (BL) назад назад
назад-влево (BL) стоп стоп

Используемые радиоэлементы в схеме:

Микроконтроллер AT90S2313

Микросхема L293D (отечественный аналог - КР1128КТ4А)

2 фоторезистор СФ3-1

Кварц на 4МГц

Конденсаторы 22-24 пФ

Стабилизатор 7805 (или КРЕН5А)

Резистор 100 Ом (Опционально)

Два мотора

Питание Vbat - 4батарейки пальчиковые, или 1 крона (9В)

Питание Vm - 1крона (9В)

После сборки схемы, необходимо загрузить программу в микроконтроллер и робот готов:

/****************************************************

Chip type : AT90S2313

Clock frequency : 4,000000 MHz

Memory model : Tiny

External SRAM size : 0

Data Stack size : 32

****************************************************/

#include <90s2313.h>

#include <stdlib.h>

#include <delay.h>

// назначение определений для удобства работы с периферией

#define OUT PORTB

#define MOTOR_F 7

#define MOTOR_B 6

#define TURN_R 5

#define TURN_L 4

#define IN PIND

#define LIGHT_R 0

#define LIGHT_L 1

#define BUMPER_F 2

#define BUMPER_B 3

// Возможные режимы движения

enum {STOP, F, FR, FL, B, BR, BL};

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

// Задержка t х 10ms

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

void Delay_10ms(unsigned char t)

{char i;

for(i=0;i<t;i++) delay_ms(10);}

// таблица вероятностей для выбора направления движения

// исходя из текущего направления движения

unsigned char p[7][7] =

{14, 43, 57, 71, 86, 93, 100,

7, 43, 71, 100, 100, 100, 100,

7, 50, 93, 100, 100, 100, 100,

7, 50, 57, 100, 100, 100, 100,

29, 29, 29, 29, 57, 79, 100,

36, 36, 36, 36, 71, 93, 100,

36, 36, 36, 36, 71, 79, 100};

// текущее направление движения

unsigned char this_move;

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

// Включение комбинации моторов для движения в заданном направлении

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

void go(unsigned char direction){

switch (direction) {

case STOP:

OUT.MOTOR_F=0;

OUT.MOTOR_B=0;

OUT.TURN_R=0;

OUT.TURN_L=0;

break;

case F:

OUT.MOTOR_F=1;

OUT.MOTOR_B=0;

OUT.TURN_R=0;

OUT.TURN_L=0;

break;

case FR:

OUT.MOTOR_F=1;

OUT.MOTOR_B=0;

OUT.TURN_R=1;

OUT.TURN_L=0;

break;

case FL:

OUT.MOTOR_F=1;

OUT.MOTOR_B=0;

OUT.TURN_R=0;

OUT.TURN_L=1;

break;

case B:

OUT.MOTOR_F=0;

OUT.MOTOR_B=1;

OUT.TURN_R=0;

OUT.TURN_L=0;

break;

case BR:

OUT.MOTOR_F=0;

OUT.MOTOR_B=1;

OUT.TURN_R=1;

OUT.TURN_L=0;

break;

case BL:

OUT.MOTOR_F=0;

OUT.MOTOR_B=1;

OUT.TURN_R=0;

OUT.TURN_L=1;

break;

}

}

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

// Выбор направления движения в следующем шаге по таблице вероятностей

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

unsigned char next_move(void){

unsigned char pp, i;

pp = rand()/327; // получаем случайное число 0..99

for (i=0;i<7;i++){ // ищем соответствие в таблице вероятностей

if (p[this_move][i] > pp) break;

}

this_move = i; // записываем новое полученное направление как текущее

return(i);

}

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

// Обработка прерывания от переднего бампера (INT0 = PD2)

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

interrupt [EXT_INT0] void ext_int0_isr(void)

{

if(this_move==FR) go(BL);

if(this_move==FL) go(BR);

else go(B);

Delay_10ms(250); // отъезд в течение 2.5 х 2 сек

Delay_10ms(250);

this_move=B;

}

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

// Обработка прерывания от заднего бампера (INT1 = PD3)

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

interrupt [EXT_INT1] void ext_int1_isr(void)

{

if(this_move==BR) go(FL);

if(this_move==BL) go(FR);

else go(F);

Delay_10ms(250); // отъезд в течение 2.5 х 2 сек

Delay_10ms(250);

this_move=F;

}

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

// "Случайное блуждание"

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

unsigned char walk(void){

// этот цикл организует "свободное блуждание" пока

// нет сигнала ни от одного из датчиков освещенности

while((IN.LIGHT_R) && (IN.LIGHT_L)){

go(next_move()); // получаем следующее направление движения и

Delay_10ms(250); // движемся в этом направлении 2.5 сек

}

// этот цикл организует движение на свет, пока

// есть сигнал хотя бы от одного из датчиков освещенности

while((IN.LIGHT_R==0) || (IN.LIGHT_L==0)){

if((IN.LIGHT_R==0) && (IN.LIGHT_L==0)) go(F);

else if(IN.LIGHT_R==0) go(FR);

else if(IN.LIGHT_L==0) go(FL);

}

return(0);

}

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

// Главная программа

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

void main(void)

{

DDRB = 0xff; // назначаем все линии порта B на выход

PORTB = 0x00; // и устанавливаем на них низкий уровень

DDRD = 0x00; // назначаем все линии порта D на вход

PORTD = 0xff; // подключаем внутренние нагрузочные резисторы

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Falling Edge

// INT1: On

// INT1 Mode: Falling Edge

GIMSK=0xC0;

MCUCR=0x0A;

GIFR=0xC0;

// разрешаем прерывания

#asm("sei")

// запускаем главный цикл

while(1) walk();

}

Скачать программу, файл прошивки и схему робота в формате sPlan

Публикация: cxem.net

Смотрите другие статьи раздела Аппаратура радиоуправления.

Читайте и пишите полезные комментарии к этой статье.

<< Назад

Последние новости науки и техники, новинки электроники:

Робот Bean-Bot без моторов и программирования 07.09.2026

Робототехнику трудно представить без электродвигателей, аккумуляторов, датчиков и управляющего программного обеспечения. Однако исследователи Итальянского технологического института продемонстрировали, что для выполнения довольно сложных движений все эти компоненты иногда вовсе не обязательны. Созданный ими миниатюрный робот Bean-Bot способен самостоятельно прыгать, катиться, скользить, переворачиваться и преодолевать наклонные поверхности, используя энергию нагрева и особенности собственной конструкции. Идея разработки возникла благодаря необычному природному механизму. За основу специалисты взяли мексиканскую фасоль, которая способна неожиданно перемещаться из-за находящейся внутри семени личинки моли. В лаборатории биомиметической мягкой робототехники эту природную особенность переосмыслили с инженерной точки зрения. Получившийся Bean-Bot представляет собой легкую оболочку характерной формы, пружину из материала с памятью формы и несколько магнитов. Основным источником энергии ...>>

Ультраширокий монитор LG 40HT513D 07.09.2026

Компания LG Electronics презентовала свой новый профессиональный дисплей 40HT513D, сочетающий большую рабочую площадь с функциями, ориентированными специально на медицинские учреждения. Монитор оснащен 40-дюймовой изогнутой IPS Black-панелью с соотношением сторон 21:9 и разрешением 5120 x 2160 пикселей, что соответствует примерно 11 мегапикселям. Такая конфигурация позволяет разместить на одном экране несколько диагностических изображений без разделительных рамок, которые неизбежно возникают при использовании отдельных мониторов. Устройство предназначено для работы с рентгеновскими снимками, компьютерной и магнитно-резонансной томографией, а также другими медицинскими изображениями и получило разрешение Управления по контролю за продуктами и лекарствами США (FDA) в качестве медицинского устройства. По оценке LG, по площади рабочего пространства один 40HT513D способен заменить конфигурацию из трех 3-мегапиксельных медицинских мониторов. Для специалистов по лучевой диагностике это ...>>

Происхождение изображений ИИ становится все труднее установить 06.09.2026

Генеративный искусственный интеллект способен создавать изображения, в которых угадываются особенности определенных художественных стилей, однако установить источник конкретного визуального элемента оказывается значительно сложнее. Исследование специалистов лаборатории MIT CSAIL показывает, что по мере увеличения обучающего набора данных надежно определить, какое именно изображение повлияло на результат работы модели, становится практически невозможно. Чтобы изучить эту проблему, исследователи создали около двух десятков собственных диффузионных моделей и обучили их на наборах, содержащих от нескольких сотен до сотен тысяч изображений. В экспериментах использовались фотографии лиц, а также произведения различных художников. Независимо от размера и состава наборов данных ученые наблюдали одну закономерность: чем больше изображений использовалось для обучения, тем труднее становилось определить вклад отдельной работы в последующий результат. Это явление авторы назвали "утратой атрибуц ...>>

Случайная новость из Архива

В проблеме ожирения виноват мозг 04.10.2012

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

"Это порочный круг, который может объяснить, почему так трудно преодолеть ожирение", - говорит Дэвидсон, являющийся также профессором психологии в AU. Дэвидсон фокусирует свои исследования на гиппокампе - части мозга, отвечающей за память и обучение. В данном конкретном исследовании Дэвидсон и его коллеги ставили опыты над двумя группами крыс. Одна группа имела неограниченный доступ к еде с низким содержанием жиров, а другая - к высококалорийной пище с животными жирами. Способности крыс к запоминанию и обучению, зависящие от работы гиппокампа, предварительно проверили на тестовых задачах.

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

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

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

Другие интересные новости:

▪ Фотонная камера отслеживает эндоскоп в теле человека

▪ Глаза в глаза

▪ Акустика Стоунхенджа

▪ Микробы пожирают нефть

▪ Цитрусовые волокна как экологичная альтернатива яйцам и маслу

Лента новостей науки и техники, новинок электроники

 

Интересные материалы Бесплатной технической библиотеки:

▪ раздел сайта Часы, таймеры, реле, коммутаторы нагрузки. Подборка статей

▪ статья И делал я благое дело среди царюющего зла. Крылатое выражение

▪ статья Как великий князь киевский Владимир Святославович мотивировал свой отказ от иудаизма? Подробный ответ

▪ статья Тонирование стекол автомобилей. Типовая инструкция по охране труда

▪ статья Генератор звуковых эффектов. Энциклопедия радиоэлектроники и электротехники

▪ статья Тиристорный преобразователь тока. Энциклопедия радиоэлектроники и электротехники

Оставьте свой комментарий к этой статье:

Имя:


E-mail (не обязательно):


Комментарий:





Главная страница | Библиотека | Статьи | Карта сайта | Отзывы о сайте

www.diagram.com.ua

www.diagram.com.ua
2000-2026