Бот с УЗ-дальномером
- Войдите на сайт для отправки комментариев
Чт, 20/12/2012 - 22:44
Столкнулся с проблемой что серва с УЗ-дальномером в боте очень медленно поворачивает и в результате чего бот сталкивается с препятствием.
Выкладываю код , сильно не пинайте так как новичек в этом деле:
#include <Servo.h>
byte MotorPin1a = 5;
byte MotorPin1b = 4;
byte MotorPin2a = 2;
byte MotorPin2b = 3;
int Trig = 7;
int Echo = 6;
int servoPin = 8;
int t =200;
int pos;
int distance;
Servo myservo;
void setup ()
{
pinMode(MotorPin1a,OUTPUT);
pinMode(MotorPin1b,OUTPUT);
pinMode(MotorPin2a,OUTPUT);
pinMode(MotorPin2b,OUTPUT);
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
pinMode(servoPin,OUTPUT);
myservo.attach(8);
}
int Ping ( int Trig,int Echo)
{
int time = 0;
distance =0;
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
time=pulseIn(Echo,HIGH,40000);
distance = time/58;
return distance;
}
void Forward()
{
digitalWrite(MotorPin1a,HIGH);
digitalWrite(MotorPin1b,LOW);
digitalWrite(MotorPin2a,HIGH);
digitalWrite(MotorPin2b,LOW);
delay (t);
}
void Backward()
{
digitalWrite(MotorPin1a,LOW);
digitalWrite(MotorPin1b,HIGH);
digitalWrite(MotorPin2a,LOW);
digitalWrite(MotorPin2b,HIGH);
delay (5*t);
}
void TurnRight()
{
digitalWrite(MotorPin1a,LOW);
digitalWrite(MotorPin1b,HIGH);
digitalWrite(MotorPin2a,HIGH);
digitalWrite(MotorPin2b,LOW);
delay (5*t);
}
void TurnLeft()
{
digitalWrite(MotorPin1a,HIGH);
digitalWrite(MotorPin1b,LOW);
digitalWrite(MotorPin2a,LOW);
digitalWrite(MotorPin2b,HIGH);
delay (5*t);
}
void Stop()
{
digitalWrite(MotorPin1a,LOW);
digitalWrite(MotorPin1b,LOW);
digitalWrite(MotorPin2a,LOW);
digitalWrite(MotorPin2b,LOW);
delay (5*t);
}
void loop ()
{
for(pos=45;pos<=135;pos+=45)
{
myservo.write(pos);
delay(15);
Ping(Trig,Echo);
if (pos==45&&distance<10)
{
TurnRight();
}
else
{
Forward();
}
if (pos==90&&distance<10)
{
Stop ();
Backward();
}
else
{
Forward();
}
if (pos==135&&distance<10)
{
TurnLeft();
}
else
{
Forward();
}
}
for(pos=135;pos>=45;pos-=45)
{
myservo.write(pos);
delay(15);
Ping(Trig,Echo);
if (pos==45&&distance<10)
{
TurnRight();
}
else
{
Forward();
}
if (pos==90&&distance<10)
{
Stop ();
}
else
{
Forward();
}
if (pos==135&&distance<10)
{
TurnLeft();
}
else
{
Forward();
}
}
}
Причина в том, что у вас понатыканы задержки delay(5*t); в функциях отвечающих за управление двигателями и эти функции вы вызываете в том же цикле, что и управляете сервой.
И еще не думаю, что какая либо серва способна успеть повернуться на угол 45 градусов за 15 тысячных секунды, у вас измерение расстояния происходит в момент движения сервы - то есть серва за отведенное вами время delay(15); успевает только начать двигаться в заданную позицию, а вы уже измеряете расстояние дальномером.
Друзья подскажите мне мой бот с уз проста нарезает круги в програмирорование пока нечего не понимаю Использовал выше указаный код
Smart Car kit /Ultrasonic car kit L298N motor driver board for arduino
Друг прекратите издеваться над жывотным учите понимать програмирование
Ну тогда подскажи с чего начать
Ну тогда подскажи с чего начать
Списаться с HXT поговорить на тему аппаратной совместимости ваших ботов.
Спасибо