Бот с УЗ-дальномером
- Войдите на сайт для отправки комментариев
Чт, 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 поговорить на тему аппаратной совместимости ваших ботов.
Спасибо