Arduino uno + drier L298 машинка робот не работает.
- Войдите на сайт для отправки комментариев
Ср, 12/07/2017 - 12:52
Друзья, помогите!
Купил конструктор - Машина робот. Смонтировал как описанно в книге (см. ссылку ниже).
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);
}
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Ссылка на книгу ни о чем не говорит, тем более что по ней можно только на оглавление полюбоваться. Как у Вас там всё подключено, как питание организовано? Рисуйте, рассказывайте или сами проверяйте. При исправных деталях и правильном включении тут особо нечему не работать.
Сейчас все запитанно скледующм образом
от компютера, провода 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;
А у моторов-то своё питание есть? На модуле с L298N для него отдельный разъём есть. А то что-то у Вас всё питание только к Ардуине подключено получается.
Да, питание идет от Arduino UNO, точнее от четырехжжильного кабеля. По двум жилам этого кабеля идет питание с одного конца, от батарей на второй конец Arduino UNO, на соединение круплое такое, с положительным контактом внутри. Из этого соединения, стой, второй стороны, из контакта папа, выходят две жилы на L298N, контакты GND, VMS.
Когда машина включена, я откинул 0 от GND, L298N, померил вольтаж GND - VMS . Значение прыгает от VDC 1,5 до 4,0.
Еще на плате Arduino Sensor ShieldV5.0 оталисмь два контакта пустых GND, VCC. Может их тоже запитать?
Т.е. с батарей питание идёт параллельно и на ардуино и на моторы. Вроде всё так. Ну соедините ещё GND модуля, тот который вместе с управляющими контактами (ena, enb, in1, in2, in3, in4) с GND ардуины (шилда). Хотя вроде и так земли через питание общие. Ну а дальше чего - проверять нужно. Не понял, зачем, куда и какой Вы там ноль откидывали. Соберите всё как должно быть. Залейте скетч по короче, который будет просто крутить моторы вперёд, включите машинку и смотрите какой сигнал или какое питание куда не дошли.
Скетч, контроллер сожрал. Питание подключил. На L298, клемы UVS, GND приходит 7,6 вольт. А вот на клемы моторов питание не приходит почемуто. Модет перемычка какая то не отключена?
Модули немного разные бывают. На моём например можно перемычкой выбрать от чего питать саму микросхему. Если перемычка стоит, то напряжение моторов подаётся на встроенный стабилизатор, с которого и получается 5В для самой L298. Если перемычка снята, то ещё нужно подавать 5V снаружи. Вообщем на 9-й ноге у неё 5V должны быть.
Вы вообще поняли о чём был мой пост #1? Для особо непонятливых поясняю: до тех пор, пока Вы не выложите код нормально, его скорее всего никто не будет читать.
Евгений, спасибо что предупредили ещё раз. Сейчас доберусь до компа и сделаю все по инструкции.
А есть возможность на сайт фотографии залить?
А есть возможность на сайт фотографии залить?
конечно, через иконку рисунок
Конечно, http://arduino.ru/forum/obshchii/sokhranenie-kartinok-na-forume
// Объявляем переменные для хранения состояния двух моторов. 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); }Как теперь убрать код, который вставлен в тему форума изначально некорректно?
Никак - забейте.