Почему 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);
}

, 👍5

Обсуждение

Вы сказали «этот учебник/код», но ничего нет. Ссылку не забыли добавить?, @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


3 ответа


Лучший ответ:

5

Я вижу пару вещей...

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


3

Согласно комментариям выше и документации 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


2

Я вижу, что это все еще не работает даже с подходящей батареей. Следующее мое предположение: вам нужно обновить свою библиотеку:

// Библиотека 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