Почему Adafruit motor shield не крутит моторы?
Я использую Adafruit Motor Shield v2.3. Я питаю Arduino от USB-кабеля, а моторный шилд — от 9-вольтовой батареи.
Я удалил контакт и использую это учебник/код, чтобы заставить двигатель постоянного тока вращаться.
Я пробовал 3 различных типа двигателей постоянного тока, но ни один из них не работал. Arduino работает для обычных скетчей, таких как зажигание светодиодов, но я не могу заставить работать моторы.
Есть идеи?
Изменить: я использую код Adafruit "Motor Test" из библиотеки Motor Shield v2, как показано ниже. Двигатель подключен к порту 1.
// Библиотека Adafruit Motor Shield
// авторское право Adafruit Industries LLC, 2009 г.
// этот код является общественным достоянием, наслаждайтесь!
#include <AFMotor.h>
AF_DCMotor motor(4);
void setup() {
Serial.begin(9600); // настраиваем последовательную библиотеку на 9600 бит/с
Serial.println("Motor test!");
// включаем мотор
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop() {
uint8_t i;
Serial.print("tick");
motor.run(FORWARD);
for (i=0; i<255; i++) {
motor.setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--) {
motor.setSpeed(i);
delay(10);
}
Serial.print("tock");
motor.run(BACKWARD);
for (i=0; i<255; i++) {
motor.setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--) {
motor.setSpeed(i);
delay(10);
}
Serial.print("tech");
motor.run(RELEASE);
delay(1000);
}
@Pikamander2, 👍5
Обсуждение3 ответа
Лучший ответ:
Я вижу пару вещей...
1.) Возможно, провода двигателя замыкают корпус двигателя. убедитесь, что это не так.
2.) Возможно, двигатель подключен к неправильному порту для данного кода:
В строке 7 кода написано: AF_DCMotor motor(4);
Поэтому попробуйте физически переключить двигатель на порт 4.
3.) Кроме того, у этой платы есть адрес I2C, и я не вижу его нигде в коде. Вы можете проверить, что такое адрес I2C с этим кодом. Это также покажет вам, что плата управления мотором действительно отвечает.
// --------------------------------------
// i2c_scanner
//
// Версия 1
// Эта программа (или код, похожий на нее)
// можно найти во многих местах.
// Например, на форуме Arduino.cc.
// Первоначальный автор неизвестен.
// Версия 2, июнь 2012 г., использование Arduino 1.0.1
// Максимально упрощено адаптировано пользователем Arduino.cc Krodal
// Версия 3, 26 февраля 2013 г.
// V3 Луарнольда
// Версия 4, 3 марта 2013 г., Использование Arduino 1.0.3
// пользователем Arduino.cc Krodal.
// Изменения Луарнольда удалены.
// Адреса сканирования изменены с 0...127 на 1...119,
// согласно сканеру i2c Ника Гэммона
// http://www.gammon.com.au/forum/?id=10896
// Версия 5, 28 марта 2013 г.
// То же, что и версия 4, но теперь адрес сканируется до 127.
// Кажется, датчик использует адрес 120.
// Версия 6, 27 ноября 2015 г.
// Добавлено ожидание серийной связи Леонардо.
//
//
// Этот скетч тестирует стандартные 7-битные адреса
// Устройства с более высоким битовым адресом могут отображаться некорректно.
//
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Леонардо: дождитесь серийного монитора
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// i2c_scanner использует возвращаемое значение
// Write.endTransmission, чтобы узнать,
// устройство подтвердило адрес.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // ждем 5 секунд до следующего сканирования
}
Спасибо за код! Я припаял контакты немного криво, поэтому было сложно вставить их до упора. Когда я запустил ваш тест, он не смог найти ни одного устройства I2C, и, согласно некоторым результатам Google, эта проблема может быть вызвана различные проблемы с подключением контактов. Я отсоединил моторный щит от Arduino, выпрямил контакты, вставил моторный щит так плотно, как только мог, и все заработало!, @Pikamander2
@Pikamander2 :) Рад, что смог помочь!, @Accentrix
Согласно комментариям выше и документации Adafruit Батареи 9 В недостаточно для использования с двигателями, поскольку они не обеспечивают достаточного тока.
Ну, я пробовал и с 2 батарейками АА, но не повезло. Вот как это выглядит сейчас: http://i.imgur.com/IyTPnfx.jpg, @Pikamander2
2 AA составляет всего ~ 3 В, чего недостаточно. Согласно руководству Adafruit, зеленый светодиод должен гореть **ярко**, а на рисунке он не кажется таким ярким. Вам нужно будет использовать как минимум 4 батарейки АА, чтобы соответствовать порогу 5 В, и не более 8, чтобы оставаться ниже максимума 12 В., @Jake C
Вот он с батареей Tenergy 9.6V 2000mAh (полностью заряженной). Он горит намного ярче, но двигатель по-прежнему ничего не делает. http://i.imgur.com/Uursw2z.jpg, @Pikamander2
На этом этапе я бы обновил ваш первоначальный вопрос новыми деталями, и мои предыдущие комментарии будут применимы к нему. Проверьте соединения с двигателем (они все еще не очень хорошие). Возможно, используйте мультиметр, чтобы проверить выход платы., @Jake C
Кроме того, я добавил код в исходный пост. Это просто пример кода стандартного мотора Adafruit, без изменений., @Pikamander2
Мой мультиметр дает мне 0 со всех портов двигателя, поэтому моторный щит не выдает никакой мощности. Есть идеи, почему?, @Pikamander2
Я вижу, что это все еще не работает даже с подходящей батареей. Следующее мое предположение: вам нужно обновить свою библиотеку:
// Библиотека Adafruit Motor Shield // авторское право Adafruit Industries LLC, 2009 г. // этот код является общественным достоянием, наслаждайтесь! #include <AFMotor.h>
Судя по 2009
и AFMotor.h
у вас копия старой версии библиотеки. Я рекомендую получить последнюю версию и следовать официальное руководство.
Проблема оказалась в том, что мои изогнутые контакты не были полностью вставлены в Arduino, поэтому ответ Accentrix был наиболее полезным. Тем не менее, спасибо за ссылку, я не заметил, что использую старую библиотеку., @Pikamander2
Это была моя проблема. Для старой версии платы моторного шилда adafruit заголовок называется «AFMotor.h». У меня это моторный щит Adafruit v2, и правильный заголовочный файл называется «Adafruit_MotorShield.h». Если вы совершите эту ошибку, то проблема именно такая, как описано, все вроде бы должно работать, но ничего не происходит., @Self Dot
- Мой моторный щит сломан?
- Adafruit Motorshield v2.3 не работает
- Как заставить сервопривод вращаться на угол больше 180°
- Двигатель постоянного тока не вращается, издается звуковой сигнал, а также присутствует запах гари.
- Как подключить двойной редуктор Tamiya к Arduino Uno?
- Не могу скомпилировать скетч Arduino, когда удаляю функцию цикла void
- Серво не двигается
- Один порт моторного щита не работает с шаговым двигателем.
Вы сказали «этот учебник/код», но ничего нет. Ссылку не забыли добавить?, @Jake C
@JakeC - Спасибо, я скопировал это из своего поста на Reddit. Теперь это исправлено., @Pikamander2
Какие двигатели вы используете? Они рассчитаны на 9 вольт? Насколько хорошо соединение с двигателем? Судя по картинке, штырьки коротит на корпусе. У вас есть мультиметр? Вы проверили напряжение аккумулятора?, @Jake C
На самом деле, не обращайте внимания на вышесказанное, согласно Adafruit, вы не можете использовать 9-вольтовую батарею. См.: https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino/faq#faq-14., @Jake C
Как указывалось здесь бесчисленное количество раз ранее, «транзисторная» батарея на 9 В является **неправильным выбором** для большинства моторных проектов, поскольку она имеет минимальный ток. Не используйте его!, @Chris Stratton
микросервопривод SG90 также был подключен к моторному щиту., @rick chakraborty