Amateur Radio Station R9AL

     Роботы данного типа у нас называются "Бродягами". Все что делает робот - просто бродит по помещению. В торцевой части робота установлены два концевых выключателя, которые позволяют детектировать столкновение с препятствием. Сразу после включения питания робот начинает двигаться вперед до столкновения с препятствием. При столкновении происходит остановка. Затем, после паузы, робот объезжает назад, поворачивается на заданный угол, делает паузу и снова возобновляет движение.

Принципиальная схема робота:



Монтажная схема робота:


Сборка робота:

Сначала собираем простого робота, который использовался для движения по заданному алгоритму. А далее нужно установить на нем два концевых выключателя (см. Датчики касания).

Для примера, в данном роботе использованы микропереключатели МИ-3А. Необходимо установить микропереключатели на основании робота и подключить их согласно схеме.




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





Программирование робота

     Напишем простую программу, в соответствии с которой робот будет двигаться прямо в течении одной секунды, останавливаться на одну секунду, поворачивать направо в течении 0.7 секунды, опять останавливаться на секунду и далее процесс будет повторяться. Вот код:

/*  Робот  */

void setup() 
{
	pinMode(6,OUTPUT);     	//  управление левым мотором
	pinMode(9,OUTPUT);      //   
	pinMode(10,OUTPUT);     //  управление правым мотором
	pinMode(11,OUTPUT);     //
	pinMode(4,INPUT);       //  для подключения левого датчика
	pinMode(5,INPUT);       //  для подключения правого датчика
}

void loop() 
{
	motor(0,255,0,255);     			//  движение вперед
	if(digitalRead(4) == 0 || digitalRead(5) == 0)  //  если сработал какой-либо датчик,
	{                                               //  то:
	motor(0,0,0,0);                                 //  остановка
	delay(1000);                                    //  на 1 секунду
	motor(255,0,70,0);                              //  назад и влево
	delay(300);                                     //  в течении 0.3 секунды.
	}
}

void motor(int L1,int L2,int R1,int R2)   		//  подпрограмма управления двигателем
{
	analogWrite(6,L1);
	analogWrite(9,L2);
	analogWrite(10,R1);
	analogWrite(11,R2); 
}


А вот видео как это работает:



Задание

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




Обсуждение на форуме





Copyright © R9AL 2022 Все права защищены
Рейтинг@Mail.ru Яндекс цитирования