Работа сервопривода и двигателей через Motor Shield
- Войдите на сайт для отправки комментариев
Столкнулся с проблемой при работе двигателей и сервопривода через Motor Shield.
При подключенном сервоприводе двигатели ведут себя странно. Движение назад еще отрабатывают, а на поворотах и вперед - идет глюк. Если сервопривод отключить, то двигатели начинают работать нормально.
Сперва грешил на питание, но подключил достаточно мозный аккумулятор на 8 ампер 8 вольт и проблема не исчезлаю
Питаю и Arduino Mega 2560 и Motor Shield от этого аккумулятора - перемычка замкнута.
В проекте испольщую серву MG995.
Motor Shiela Adafruit Industries Motor Shield
На даном этапе пытался реализовать такой алгоритм работы:
Движение вперед в течении 5 секунд с поворотом сервы на угол 90 градусов
Поворот вправо в течении 2 секунд с поворотом сервы на угол 180 градусов
Движение назад в течении 5 секунд с поворотом сервы на угол 90 градусов
Поворот влево в течении 2 секунд с поворотом сервы на угол 0 градусов
Остановка двигателей на 3 секунды с поворотом сервы на угол 90 градусов
Мой скетч
#include <AFMotor.h> // Подключаем библиотеку для управления двигателями
#include <Servo.h> // Подключаем библиотеку для сервоприводом
//Создаем объекты для двигателей
AF_DCMotor motor1(1); //канал М1 на Motor Shield — задний левый
AF_DCMotor motor2(2); //канал М2 на Motor Shield — задний правый
AF_DCMotor motor3(3); //канал М3 на Motor Shield — передний правый
AF_DCMotor motor4(4); //канал М4 на Motor Shield — передний левый.
// Создаем объект для сервопривода
Servo myservo;
void setup() {
// Выбираем пин к которому подключен сервопривод
myservo.attach(9); // или 10, если воткнули в крайний разъём
// Поворачиваем сервопривод в положение 0 градусов при каждом включении
myservo.write(0);
// Пауза 5 секунд
delay(5000);
}
void loop() {
//Устанавливаем скорость 100% (0-255)
motor1.setSpeed(255);
motor2.setSpeed(255);
motor3.setSpeed(255);
motor4.setSpeed(255);
// Задаем направление движение
// FORWARD - вперед
// BACKWARD - назад
// RELEASE - стоп
// Движение вперед в течении 5 секунд с поворотом сервы на угол 90 градусов
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
myservo.write(90); // Поворот сервы на угол 90 градусов
delay(5000);
// Поворот вправо в течении 2 секунд с поворотом сервы на угол 180 градусов
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
myservo.write(180);
delay(2000);
// Движение назад в течении 5 секунд с поворотом сервы на угол 90 градусов
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
myservo.write(90);
delay(5000);
//Поворот влево в течении 2 секунд с поворотом сервы на угол 0 градусов
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
myservo.write(0);
delay(2000);
// Остановка двигателей на 3 секунды с поворотом сервы на угол 90 градусов
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
myservo.write(90);
delay(3000);
}
Видео с демонстрацией глюка: http://youtu.be/0nWRduwPY9k
Объясните, пожалуйста, где я накосячил
Дело именно в питании, питание серв на шилде берется с дуиновского стабилизатора на 5 вольт, от которого питается и сам МК, в момент когда серва стартует идет просадка напряжения и дуина перезагружается. Запитывайте серву отдельно, но не давайте на нее более 6 вольт, иначе сгорит.
Спасибо тёска. Откусил провод питания от разъема сервы и подключил его к контакту питания Motor Shield - проблема решилась.
Потом спаяю отдельный стабилизатор для нее.
Модераторы - перенесите пожалуйста тему в раздел Аппаратные вопросы - я не там косяк искал изначально.