Arduino uno + drier L298 машинка робот не работает.

PavelB36
Offline
Зарегистрирован: 15.01.2017

Друзья, помогите!

Купил конструктор - Машина робот. Смонтировал как описанно в книге (см. ссылку ниже).

http://www.bhv.ru/books/full_contents.php?id=194730

Залил программу, скеч 7.1,  (см. ниже). Диоды драйвера L298 мигают, колеса не крутятся. 

Может кто знает почему так? Подскажите, где искать ошибку. 

// Объявляем переменные для хранения состояния двух моторов.
int motor_L1, motor_L2, input_L;
int motor_R1, motor_R2, input_R;
void setup()
{
  // Переменные – номера контактов (пинов) Arduino.
  // Для левых и правых моторов машинки.  
  setup_motor_system(3, 4, 11, 7, 8, 10);
  // Двигатели остановлены.
  setspeed(0, 0);
}
// Основная программа.
void loop()
{
  // Пример движения робота задан жестко в программе.
  // и повторяется в цикле.
  setspeed(255, 255); // устанавливает макс. скорость колес.
   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);
}  
// Функция инициализации управления моторами.
void setup_motor_system(int L1, int  L2, int iL, int  R1, int R2, int iR)
{
  // Заносятся в переменные номера контактов (пинов) Arduino.
  motor_L1=L1; motor_L2=L2; input_L=iL;
  // Для левых и правых моторов робота.
  motor_R1=R1; motor_R2=R2; input_R=iR;
  // Переводятся указанные порты в состояние вывода данных.
  pinMode(motor_L1, OUTPUT);
  pinMode(motor_L2, OUTPUT);
  pinMode(input_L, OUTPUT);
  pinMode(motor_R1, OUTPUT);
  pinMode(motor_R2, OUTPUT);
  pinMode(input_R, OUTPUT);
}
// Функция задает скорость двигателя.
void setspeed(int LeftSpeed, int RightSpeed)
{
  // Задает ширину положительного фронта от 0 до 255.
  analogWrite(input_L, LeftSpeed);
  analogWrite(input_R, RightSpeed);
  // Чем больше, тем интенсивнее работает мотор.
}
// движение вперед.
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);
}
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
kalapanga
Offline
Зарегистрирован: 23.10.2016

Ссылка на книгу ни о чем не говорит, тем более что по ней можно только на оглавление полюбоваться. Как у Вас там всё подключено, как питание организовано? Рисуйте, рассказывайте или сами проверяйте. При исправных деталях и правильном включении тут особо нечему не работать.

PavelB36
Offline
Зарегистрирован: 15.01.2017

Сейчас все запитанно скледующм образом

 от компютера, провода USB на Arduino uno разъм . Дополнительно подключил две боторейки 3.7 вольт ко второму разъему питания Arduino uno.

К Arduino Uno подключенны две микросхемы: 1) Arduino Sensor Sheildv5.0; 2) Motor Driver;

 

Такое ощущение, что 0 на моторы с L298N не приходит. Так как его контакты, их светодиоды   L1,L2,L3,L4,  загораются смею предпокожитм, в соответствии с алгоритмом программы. А моторы не крутятся.

 Arduino Sensor Sheildv5.0, его контакты 11, 10, 8, 7, 5, 3 идут на L298N на контакты ena, enb,  in1, in2, in3, in4, gnd, +5v;

 

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

А у моторов-то своё питание есть? На модуле с L298N для него отдельный разъём есть. А то что-то у Вас всё питание только к Ардуине подключено получается.

PavelB36
Offline
Зарегистрирован: 15.01.2017

Да, питание идет от Arduino UNO, точнее от четырехжжильного кабеля. По двум жилам этого кабеля идет питание с одного конца,  от батарей на второй конец Arduino UNO, на соединение круплое такое, с положительным контактом внутри. Из этого соединения, стой, второй стороны, из контакта папа, выходят две жилы на L298N, контакты GND, VMS.

Когда машина включена, я откинул 0 от GND, L298N, померил вольтаж GND - VMS . Значение прыгает от VDC 1,5   до 4,0.

 

Еще на плате Arduino Sensor ShieldV5.0 оталисмь два контакта пустых GND, VCC. Может их тоже запитать?

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

Т.е. с батарей питание идёт параллельно и на ардуино и на моторы. Вроде всё так. Ну соедините ещё GND модуля, тот который вместе с управляющими контактами (ena, enb, in1, in2, in3, in4) с GND ардуины (шилда). Хотя вроде и так земли через питание общие. Ну а дальше чего - проверять нужно. Не понял, зачем, куда и какой Вы там ноль откидывали. Соберите всё как должно быть. Залейте скетч по короче, который будет просто крутить моторы вперёд, включите машинку и смотрите какой сигнал или какое питание куда не дошли.

PavelB36
Offline
Зарегистрирован: 15.01.2017

Скетч, контроллер сожрал. Питание подключил. На L298, клемы UVS, GND приходит 7,6 вольт. А вот на клемы моторов питание не приходит почемуто. Модет перемычка какая то не отключена?

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

Модули немного разные бывают. На моём например можно перемычкой выбрать от чего питать саму микросхему. Если перемычка стоит, то напряжение моторов подаётся на встроенный стабилизатор, с которого и получается 5В для самой L298. Если перемычка снята, то ещё нужно подавать 5V снаружи. Вообщем на 9-й ноге у неё 5V должны быть.

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

Вы вообще поняли о чём был мой пост #1? Для особо непонятливых поясняю: до тех пор, пока Вы не выложите код нормально, его скорее всего никто не будет читать.

PavelB36
Offline
Зарегистрирован: 15.01.2017

Евгений, спасибо что предупредили ещё раз. Сейчас доберусь до компа и сделаю все по инструкции.

PavelB36
Offline
Зарегистрирован: 15.01.2017

А есть возможность на сайт фотографии залить?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

PavelB36 пишет:

А есть возможность на сайт фотографии залить?

конечно, через иконку рисунок

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
PavelB36
Offline
Зарегистрирован: 15.01.2017
// Объявляем переменные для хранения состояния двух моторов.
int motor_L1, motor_L2, input_L;
int motor_R1, motor_R2, input_R;
void setup()
{
  // Переменные – номера контактов (пинов) Arduino.
  // Для левых и правых моторов машинки.  
  setup_motor_system(3, 4, 11, 7, 8, 10);
  // Двигатели остановлены.
  setspeed(0, 0);
}
// Основная программа.
void loop()
{
  // Пример движения робота задан жестко в программе.
  // и повторяется в цикле.
  setspeed(255, 255); // устанавливает макс. скорость колес.
   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);
}  
// Функция инициализации управления моторами.
void setup_motor_system(int L1, int  L2, int iL, int  R1, int R2, int iR)
{
  // Заносятся в переменные номера контактов (пинов) Arduino.
  motor_L1=L1; motor_L2=L2; input_L=iL;
  // Для левых и правых моторов робота.
  motor_R1=R1; motor_R2=R2; input_R=iR;
  // Переводятся указанные порты в состояние вывода данных.
  pinMode(motor_L1, OUTPUT);
  pinMode(motor_L2, OUTPUT);
  pinMode(input_L, OUTPUT);
  pinMode(motor_R1, OUTPUT);
  pinMode(motor_R2, OUTPUT);
  pinMode(input_R, OUTPUT);
}
// Функция задает скорость двигателя.
void setspeed(int LeftSpeed, int RightSpeed)
{
  // Задает ширину положительного фронта от 0 до 255.
  analogWrite(input_L, LeftSpeed);
  analogWrite(input_R, RightSpeed);
  // Чем больше, тем интенсивнее работает мотор.
}
// движение вперед.
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);
}

 

PavelB36
Offline
Зарегистрирован: 15.01.2017

Как теперь убрать код, который вставлен  в тему форума изначально некорректно?

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

Никак - забейте.