Простой робот

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

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

 
Ходовой двигатель
Двигатель поворота
вперед (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
#include

// назначение определений для удобства работы с периферией
#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 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();

} Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

DD1
MKAT90S23131
DD2
Драйвер электродвигателейL2931

Линейный регуляторLM78051
С1, С2
Конденсатор22-24 пФ2
R1
Резистор100 Ом1
VD1, VD2
ФоторезисторСФ3-12
ZQ1
Кварц4 МГц1
M1, M2
Электродвигатель2
SA1, SA2
Выключатель2

Кнопка1
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.