Работа сервопривода и двигателей через 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 - проблема решилась.
Потом спаяю отдельный стабилизатор для нее.
Модераторы - перенесите пожалуйста тему в раздел Аппаратные вопросы - я не там косяк искал изначально.