робот на УЗ дальномере

zugni
Offline
Зарегистрирован: 14.06.2015

помогите разобраться в скетче не устаревает работа Уз дальномера не всегда срабатывает на препятствия  иногда даже врезается расстояния менял с 30 до 45 но тогда он просто на начинает крутится на одном месте.

#define trigPin 5
#define echoPin 6

int motorPin = 8; //right side to IB - forwward

int motorPin2 = 9; //left side to IA - forwward

int motorPin3 = 10; //right side to IA - backward

int motorPin4 = 11; //left side to IB - backward



void setup()

{

Serial.begin (9600);

pinMode(motorPin, OUTPUT);

pinMode(motorPin2, OUTPUT);

pinMode(motorPin3, OUTPUT);

pinMode(motorPin4, OUTPUT);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

}

void forward(){

digitalWrite(motorPin, HIGH);

digitalWrite(motorPin2, HIGH);

digitalWrite(motorPin3, LOW);

digitalWrite(motorPin4, LOW);

}

void backward() {

digitalWrite(motorPin, LOW);

digitalWrite(motorPin2, LOW);

digitalWrite(motorPin3, HIGH);

digitalWrite(motorPin4, HIGH);

}

void turnLeft() {

digitalWrite(motorPin, HIGH);

digitalWrite(motorPin2, LOW);

digitalWrite(motorPin3, LOW);

digitalWrite(motorPin4, HIGH);

}

void turnRight() {

digitalWrite(motorPin, LOW);

digitalWrite(motorPin2, HIGH);

digitalWrite(motorPin3, HIGH);

digitalWrite(motorPin4, LOW);

}

int CheckDistance() // Проверяем расстояние

{

long duration, distance;  //Длительность расстояния

digitalWrite(trigPin, LOW); // Добавить эту строку
delayMicroseconds(2);       // 2 Добавить эту строку
digitalWrite(trigPin, HIGH);

delayMicroseconds(10);      // Добавить эту строку
digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

  distance = (duration/2) / 29.1;  //29.1

  return distance;

 }

  void loop()

 {

  int testDistance = CheckDistance(); /// получить расстояние до объекта с помощью команды ping

  if (testDistance >= 30 || testDistance <= 0) /// если объект находится более чем в 30 см от него идет вперед
  
 {

  forward();

 }

  else /// объект находится ближе, чем 30 см, поворачивает направо

 {

  turnRight();

 }

delay(500); ///ждать пол сек до следующего пинга

 }

 

zugni
Offline
Зарегистрирован: 14.06.2015

робот паказал еще один пример если добавить как на писал выше 30-45 и я решил добавить еще 5 то УЗ дальномер стал не у варачиваться от припятствий а на оброт ехать на них во так как то ( 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

И что означает дистанция меньше 0?

zugni
Offline
Зарегистрирован: 14.06.2015

andriano пишет:

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

И что означает дистанция меньше 0?

да робот врезается и стоит на месте а какая долна тогда быть  дистанция ?

zugni
Offline
Зарегистрирован: 14.06.2015

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

zugni пишет:

andriano пишет:

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

И что означает дистанция меньше 0?

да робот врезается и стоит на месте а какая долна тогда быть  дистанция ?

Речь не о том, что происходит с роботом в реальной жизни, а о Вашей программе.

У Вас там есть строка:

109  if (testDistance >= 30 || testDistance <= 0) /// если объект находится более чем в 30 см от него идет вперед

Что она означает?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

zugni пишет:

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

У любых изделий есть разброс параметров. У моторов - в том числе.

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

zugni
Offline
Зарегистрирован: 14.06.2015

andriano пишет:

zugni пишет:

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

У любых изделий есть разброс параметров. У моторов - в том числе.

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

 

все это круто но я нашел в чем была причина (кашачья шерть на крутилась):)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Одно другого не исключает.

Теперь, когда очевидный дефект устранен, робот будет продолжать ездить кругами. Только круги будут большего диаметра.

zugni
Offline
Зарегистрирован: 14.06.2015

нет ездит пряма не угадали)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А я не гадаю, я говорю точно.

Ездить "прямо" она не может в принципе. Самая последняя причина - потому что Земля круглая. Но перед ними идут причины, о которых я писал выше - разброс в КПД, сопротивлении обмоток двигателей и подводящих проводов, в радиусе и коэффициенте сцепления колес, различии в нагрузке на колеса и пр.

Так что, если Вы чего-то не замечаете, еще не значит, что этого нет.

Прикрепите на тележку лазерную указку, прицельтесь ею в определенное мето и запустите робота. А потом посмотрите, насколько ушла точка прицела.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

andriano пишет:

А я не гадаю, я говорю точно.

Ездить "прямо" она не может в принципе. Самая последняя причина - потому что Земля круглая. Но перед ними идут причины, о которых я писал выше - разброс в КПД, сопротивлении обмоток двигателей и подводящих проводов, в радиусе и коэффициенте сцепления колес и пр.

Так что, если Вы чего-то не замечаете, еще не значит, что этого нет.

Прикрепите на тележку лазерную указку, прицельтесь ею в определенное мето и запустите робота. А потом посмотрите, насколько ушла точка прицела.

ты еще раскажи ему что одна нога короче другой и в лесу можно ходить кругами.

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

Puhlyaviy пишет:

ты еще раскажи ему что одна нога короче другой и в лесу можно ходить кругами.

давайте отрежем Сусанину ногу!

zugni
Offline
Зарегистрирован: 14.06.2015

себе отрезай руки с ногами )

Гриша
Offline
Зарегистрирован: 27.04.2014

zugni пишет:

себе отрезай руки с ногами )

прикольно :)))) Клапауций 999 угадал фамилию?:

похоже что проблемы не в скетче, а в железе... читаем про траблы с питанием (УЗД), читаем про траблы с источником питания. к слову, а он какой этот источник питания... посадить на провода (для теста). сколько току требует УЗД для импульса? 

и, отвечаем на пост5, мне тоже стало интересно (в смысле ошибка или умысел?)

zugni
Offline
Зарегистрирован: 14.06.2015

Гриша пишет:

zugni пишет:

себе отрезай руки с ногами )

прикольно :)))) Клапауций 999 угадал фамилию?:

похоже что проблемы не в скетче, а в железе... читаем про траблы с питанием (УЗД), читаем про траблы с источником питания. к слову, а он какой этот источник питания... посадить на провода (для теста). сколько току требует УЗД для импульса? 

и, отвечаем на пост5, мне тоже стало интересно (в смысле ошибка или умысел?)

скинте ссылки на траблы

 

Гриша
Offline
Зарегистрирован: 27.04.2014

zugni пишет:

скинте ссылки на траблы

Вас тоже GOOgle забанил??? (Puhlyaviy) в самом верху "поиск"

ну к примеру раз  и два