Еще один вариант робота "Бродяги", но в отличии от
Робота "Бродяги" с датчиками касания.
В торцевой части робота установлен ультразвуковой датчик HC-SR04, который
позволяет определять расстояние до препятствия. Сразу после включения питания
робот начинает двигаться вперед. Если перед роботом появлется препятствие, то
робот останавливается, отъезжает назад, поворачивается на заданный угол,
делает паузу и снова возобновляет движение.
Принципиальная схема робота:
Напишем простую программу, в соответствии с которой робот будет двигаться прямо в течении одной секунды, останавливаться на одну секунду, поворачивать направо в течении 0.7 секунды, опять останавливаться на секунду и далее процесс будет повторяться. Вот код:
/* Робот */
#define PIN_TRIG A1
#define PIN_ECHO A0
void setup() {
pinMode(PIN_TRIG,OUTPUT);
pinMode(PIN_ECHO,INPUT);
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(6,OUTPUT);
}
void loop()
{
motor(1,0,1,0);
if(echo()<=50)
{
motor(0,1,0,1);
delay(500);
motor(1,0,0,1);
delay(350);
}
}
void motor(int M1W,int M1S,int M2W,int M2S)
{
digitalWrite(11,M1W);
digitalWrite(10,M1S);
digitalWrite(9,M2W);
digitalWrite(6,M2S);
}
int echo(){
long duration=0;
digitalWrite(PIN_TRIG,0);
delayMicroseconds(5);
digitalWrite(PIN_TRIG,0);
delayMicroseconds(10);
digitalWrite(PIN_TRIG,1);
duration=pulseIn(PIN_ECHO,1);
delay(10);
return (duration)/29.1;
}
Попробуйте запрограммировать робота на более сложные движения, включая,
например, движение задним ходом, разворот на месте, плавный поворот и т.п.