Arduino uno robot 4wd. Help!

grann
Offline
Зарегистрирован: 29.12.2017

Помогите! Не могу разобраться! Motor Shield — L298P, Adruino Uno, 4 мотора подклчены парами - левая и правая сторона, пробовал различные распиновки, скетчи. Не включается одна сторона. Что смотреть? Подскажите!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Зелёный провод неправильно припаян.

grann
Offline
Зарегистрирован: 29.12.2017

куда его надо припаять?

bwn
Offline
Зарегистрирован: 25.08.2014

К синему

grann
Offline
Зарегистрирован: 29.12.2017

а если по контактам можно рассказть?

bwn
Offline
Зарегистрирован: 25.08.2014

Вы еще не доперли, что вам намекают схему выложить?

grann
Offline
Зарегистрирован: 29.12.2017

хема 1:вообще ничего не идет
motor_L1 - (3-IN4)
motor_L2 - (4-IN3)
input_L - ШИМ левого двигателя (11-ENB)
motor_R1-(7-IN2)
motor_R2-(8-IN1)
input_R - ШИМ правого двигателя (10-ENA)
Схема2: работает одна сторона, зеркально меняешь - работает вторая а та замолкает
motor_L1 - (3-IN4)
motor_L2 - (4-IN3)
input_L - ШИМ левого двигателя (1-ENB)
motor_R1-(7-IN2)
motor_R2-(8-IN1)
input_R - ШИМ правого двигателя (нигде не работает-ENA)

grann
Offline
Зарегистрирован: 29.12.2017
// Объявляем переменные для хранения состояния двух моторов.
int motor_L1, motor_L2;
int motor_R1, motor_R2;
//===============================================
// Функция инициализации управления моторами.
void setup_motor_system(int L1, int  L2, int  R1, int R2)
{
  // Заносятся в переменные номера контактов (пинов) Arduino.
  // Для левых
  motor_L1=L1; motor_L2=L2;
  // и правых моторов робота.
  motor_R1=R1; motor_R2=R2;
  // Переводятся указанные порты в состояние вывода данных.
  pinMode(motor_L1, OUTPUT);
  pinMode(motor_L2, OUTPUT);
  pinMode(motor_R1, OUTPUT);
  pinMode(motor_R2, OUTPUT);
}
//===============================================
// движение вперед.
void forward()
{
    // Если двигатель будет работать не в ту сторону,
    // поменять на нем контакты местами.
    digitalWrite(motor_L1, HIGH);
    digitalWrite(motor_L2,LOW);
    digitalWrite(motor_R1, HIGH);
    digitalWrite(motor_R2,LOW);
}
//===============================================
// Поворот налево с блокировкой левых колес.
void forward_left()
{
  // блокировка вращения левых колес.
    digitalWrite(motor_L1, LOW);
    digitalWrite(motor_L2, LOW);
   // правые колеса вращаются.
    digitalWrite(motor_R1, HIGH);
    digitalWrite(motor_R2, LOW);
}
//===============================================
// Поворот направо с блокировкой правых колес.
void forward_right()
{
  // левые колеса вращаются.
    digitalWrite(motor_L1, HIGH);
    digitalWrite(motor_L2, LOW);
    // блокировка вращения правых колес.
    digitalWrite(motor_R1, LOW);
    digitalWrite(motor_R2, LOW);
}
// Включаем движение назад.
void backward()
{
    // Смена направления вращения двигателей.
    digitalWrite(motor_L2, HIGH);
    digitalWrite(motor_L1,LOW);
    digitalWrite(motor_R2, HIGH);
    digitalWrite(motor_R1,LOW);
}
//===============================================
void _stop()
{
    // Блокировка всех колес.
    digitalWrite(motor_L2, LOW);
    digitalWrite(motor_L1,LOW);
    digitalWrite(motor_R2, LOW);
    digitalWrite(motor_R1,LOW);
}
//===============================================
// Функция инициализации, выполняется один раз.
void setup()
{
  // Переменные – номера контактов (пинов) Arduino.
  // Для левых и правых моторов машинки.
  setup_motor_system(2,3,4,5);
  // Двигатели остановлены.
   _stop();
}
//===============================================
// Основная программа.
void loop()
{
  // Пример движения робота задан жестко в программе
  // и повторяется в цикле.
   forward(); // едет вперед 1 секунду.
   delay(1000);
   forward_left(); // поворачивает налево 0,5 секунд.
   delay(500);
   forward(); // едет вперед 0,5 секунд.
   delay(500);
   forward_right(); // поворачивает направо 0,5 секунд.
   delay(500);
   _stop();
   delay(500);
   backward(); // движется назад 0,8 секунд.
   delay(800);
}

 

NickSan
NickSan аватар
Offline
Зарегистрирован: 28.12.2017

Я понимаю что передние колеса должны крутиться по направлению движения робота вперед, а задние наоборот, при этом всём холостого хода я не наблюдаю из функции стоп.

// Объявляем переменные для хранения состояния двух моторов.
//int motor_L1, motor_L2, motor_R1, motor_R2;
int motor_LeftFront  = 2,
	motor_LeftRear   = 3,
	motor_RightFront = 4,
	motor_RightRear  = 5;
int RobotWheel[4] = {2,3,4,5};
//===============================================
void ChageState(int ST[4]){
	for( int i=0 ; i<4 ; i++ ){
		if(ST[i]!=0) digitalWrite( RobotWheel[i] , HIGH );
		else digitalWrite( RobotWheel[i] , LOW );
	}
}
//===============================================
// движение вперед.
void forward() {
    ChageState(1,0,1,0); // Если двигатель будет работать не в ту сторону, поменять на нем контакты местами.
}
//===============================================
// Поворот налево с блокировкой левых колес.
void forward_left() {
	ChageState(0,0,1,0); // блокировка вращения левых колес.
}
//===============================================
// Поворот направо с блокировкой правых колес.
void forward_right(){
	ChageState(1,0,0,0); // левые колеса вращаются.
}
// Включаем движение назад.
void backward() {
	ChageState(0,1,0,1); // Смена направления вращения двигателей.
}
//===============================================
void _stop() {
	ChageState(0,0,0,0); // Блокировка всех колес.
}
//===============================================
// Функция инициализации, выполняется один раз.
void setup() {  
  // Переводятся указанные порты в состояние вывода данных.
  pinMode(motor_LeftFront, OUTPUT);
  pinMode(motor_LeftRear, OUTPUT);
  pinMode(motor_RightFront, OUTPUT);
  pinMode(motor_RightRear, OUTPUT);
   _stop(); // Двигатели остановлены.
}
//===============================================
// Основная программа.
void loop()
{
  // Пример движения робота задан жестко в программе
  // и повторяется в цикле.
   forward(); // едет вперед 1 секунду.
   delay(1000);
   forward_left(); // поворачивает налево 0,5 секунд.
   delay(500);
   forward(); // едет вперед 0,5 секунд.
   delay(500);
   forward_right(); // поворачивает направо 0,5 секунд.
   delay(500);
   _stop();
   delay(500);
   backward(); // движется назад 0,8 секунд.
   delay(800);
}

 

grann
Offline
Зарегистрирован: 29.12.2017

Вопрос в том что одна сторона вообще не крутится 

NickSan
NickSan аватар
Offline
Зарегистрирован: 28.12.2017

проверяйте распиновку

схему никто не видел.

kalapanga
Offline
Зарегистрирован: 23.10.2016

grann, так что всё-таки у Вас - Motor Shield или отдельный модуль на L298? И наверное Вы думаете, что у Вас единственная существующая и известная всем модель того или другого. Из Вашего словесного описания схемы следует что ENA и ENB подключены к ардуино, а где они используются в скетче? Я не нахожу. Про питание вашей конструкции ничего не рассказали.

По существу вопроса, Ваша железка как и любая другая может быть неисправной. Но сначала нужно всё правильно подключить и правильно это использовать в скетче. А из Вашего описания уверенности, что всё сделано верно нет.