Проблемы в сборке Robocar-3 Bluetooth arduino uno
- Войдите на сайт для отправки комментариев
Втр, 08/03/2022 - 21:07
Добрый день. Я новичок в сборке роботов. Я собрала робота, всё работает, залила прошивку, но робот неправильно реагирует на клавиши. При нажатии "вперед" "назад" робот должен ехать по нужному направлению, а при нажатии "право" "лево" должен поворачить. Но при нажатии "вперед" робот крутится в правую сторону, а при нажатии "назад" крутится в левую сторону. При нажатии "право" и "лево" поворачивается только в правую сторону (или при удержании -крутится в неё).
Прошивка написана на языке "С", я скопировала её из документов, на сайте где заказывали этого робота. Подскажите пожалуйста, как можно решить эту проблему?
http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-novichok-prochti
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
[code] char getstr; int Left_motor_go=8; //Левый мотор вперед(IN1) int Left_motor_back=9; //Задний левый мотор(IN2) int Right_motor_go=10; // Правый мотор вперед(IN3) int Right_motor_back=11; // Задний правый мотор(IN4) void setup() { //Инициализирует привод мотора IO как режим выхода Serial.begin(9600); pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM) pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM) pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM) } void run() { digitalWrite(Right_motor_go,HIGH); // Правый мотор вперед digitalWrite(Right_motor_back,LOW); //analogWrite(Right_motor_go,150);//PWM 0 ~ 255 скорость //analogWrite(Right_motor_back,0); digitalWrite(Left_motor_go,LOW); // Левый мотор вперед digitalWrite(Left_motor_back,HIGH); //analogWrite(Left_motor_go,0);//PWM 0 ~ 255 скорость //analogWrite(Left_motor_back,150); //delay(time * 100); //Время выполнения можно отрегулировать } void brake() //Тормоз, стоянка { digitalWrite(Right_motor_go,LOW); digitalWrite(Right_motor_back,LOW); digitalWrite(Left_motor_go,LOW); digitalWrite(Left_motor_back,LOW); } void left() { digitalWrite(Right_motor_go,HIGH); // Правый мотор вперед digitalWrite(Right_motor_back,LOW); //analogWrite(Right_motor_go,150); //analogWrite(Right_motor_back,0);//PWM比例0~255调速 digitalWrite(Left_motor_go,LOW); //Задняя часть левого колеса digitalWrite(Left_motor_back,LOW); //analogWrite(Left_motor_go,0); //analogWrite(Left_motor_back,0);//PWM比例0~255调速 //delay(time * 100); //Время выполнения можно отрегулировать } void spin_left(int time) //Повернуть налево (левое колесо назад, правое колесо вперед) { digitalWrite(Right_motor_go,HIGH); // Правый мотор вперед digitalWrite(Right_motor_back,LOW); //analogWrite(Right_motor_go,200); //analogWrite(Right_motor_back,0);//PWM比例0~255调速 digitalWrite(Left_motor_go,HIGH); //Задняя часть левого колеса digitalWrite(Left_motor_back,LOW); //analogWrite(Left_motor_go,200); //analogWrite(Left_motor_back,0);//PWM比例0~255调速 //delay(time * 100); //Время выполнения можно отрегулировать } void right() { digitalWrite(Right_motor_go,LOW); //右电机后退 digitalWrite(Right_motor_back,LOW); //analogWrite(Right_motor_go,0); // analogWrite(Right_motor_back,0);//PWM比例0~255调速 digitalWrite(Left_motor_go,LOW);//左电机前进 digitalWrite(Left_motor_back,HIGH); //analogWrite(Left_motor_go,0); //analogWrite(Left_motor_back,150);//PWM比例0~255调速 //delay(time * 100); //执行时间,可以调整 } void spin_right(int time) //Повернуть направо (правое колесо назад, левое колесо вперед) { digitalWrite(Right_motor_go,LOW); //右电机后退 digitalWrite(Right_motor_back,HIGH); //analogWrite(Right_motor_go,0); // analogWrite(Right_motor_back,200);//PWM比例0~255调速 digitalWrite(Left_motor_go,LOW);//左电机前进 digitalWrite(Left_motor_back,HIGH); // analogWrite(Left_motor_go,0); // analogWrite(Left_motor_back,200);//PWM比例0~255调速 //delay(time * 100); //执行时间,可以调整 } void back() { digitalWrite(Right_motor_go,LOW); //右轮后退 digitalWrite(Right_motor_back,HIGH); // analogWrite(Right_motor_go,0); // analogWrite(Right_motor_back,150);//PWM比例0~255调速 digitalWrite(Left_motor_go,HIGH); //左轮后退 digitalWrite(Left_motor_back,LOW); //analogWrite(Left_motor_go,150); //analogWrite(Left_motor_back,0);//PWM比例0~255调速 //delay(time * 100); //执行时间,可以调整 } void loop() { getstr=Serial.read(); // if(getstr=='A') { Serial.println("go forward!"); run(); } else if(getstr=='B'){ Serial.println("go back!"); back(); } else if(getstr=='C'){ Serial.println("go left!"); left(); } else if(getstr=='D'){ Serial.println("go right!"); right(); } else if(getstr=='F'){ Serial.println("Stop!"); brake(); } else if(getstr=='E'){ Serial.println("Stop!"); brake(); } } [/code]Какая-то путаница. Уж не знаю кто её внёс. Китайские друзья на сайте или автор вопроса уже что-то подправил...
Процедура run() видимо должна двигать машинку вперёд. Если переменные названы осмысленно и двигатели подключены правильно, то уж если Right_motor_go ставим в HIGH а Right_motor_back в LOW, то и Left_motor_go должно быть HIGH а Left_motor_back в LOW. А сейчас они противоположные, вот и крутятся в разные стороны
Дальше не глядел, наверное во всех командах такое есть. Вот почитайте, чтобы осмысленно управление писать:
https://create.arduino.cc/projecthub/ryanchan/how-to-use-the-l298n-motor-driver-b124c5
p.s. Можно конечно у одного из двигателей полярность подлключения (или номера выводов в скетче) поменять, оно и поедет, но тогда логика именования переменных потеряется. Скетч совсем непонятным станет.
да там вообще полный бардак, кто-то это явно уже неумело редактировал.
процедуры spin_left() и spin_right() вообще в программе не используются. а между тем именно они как раз выполняют движения вперед и назад :)
ИМХО, тут проще всего переназвать процедуры :) - взаимно поменять spin_left() и run() , и точно так же spin_right() и back()
Для начала хотелось бы понять, что за робот...
Проверил вперёд-назад, логически там всё правильно, левая сторона имеет обратное вращение жеж