Бот с УЗ-дальномером

HXT
Offline
Зарегистрирован: 20.12.2012

Столкнулся с проблемой что серва с УЗ-дальномером в боте очень медленно поворачивает и в результате чего бот сталкивается с препятствием.

Выкладываю код , сильно не пинайте так как новичек в этом деле:

#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();
  }
}
}

 

 

maksim
Offline
Зарегистрирован: 12.02.2012

Причина в том, что у вас понатыканы задержки delay(5*t); в функциях отвечающих за управление двигателями и эти функции вы вызываете в том же цикле, что и управляете сервой.
И еще не думаю, что какая либо серва способна успеть повернуться на угол 45 градусов за 15 тысячных секунды, у вас измерение расстояния происходит в момент движения сервы - то есть серва за отведенное вами время delay(15); успевает только начать двигаться в заданную позицию, а вы уже измеряете расстояние дальномером.

Victor278
Offline
Зарегистрирован: 22.04.2013

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

Smart Car kit /Ultrasonic car kit L298N motor driver board for arduino  

Клапауций
Offline
Зарегистрирован: 10.02.2013

Victor278 пишет:
Друзья подскажите  мне     мой  бот с  уз  проста  нарезает  круги   в  програмирорование  пока  нечего  не  понимаю

Друг прекратите издеваться над жывотным учите понимать програмирование

Victor278
Offline
Зарегистрирован: 22.04.2013

Ну тогда  подскажи  с  чего  начать 

Клапауций
Offline
Зарегистрирован: 10.02.2013

Victor278 пишет:

Ну тогда  подскажи  с  чего  начать 

Списаться с HXT поговорить на тему аппаратной совместимости ваших ботов.

Victor278
Offline
Зарегистрирован: 22.04.2013

Спасибо