Подскажите какие постоянные моторы лучше использовать для Робота?

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Димач, 29 сен 2013.

  1. Димач

    Димач Нерд

    Потому что покупал моторы с редуктором, в желтом корпусе такие как в примере "мобильный двухколесный робот" только не буквой Г, а прямые с валом с обеих сторон, в итоге, при подключение их к Мотор Шелд как в прмере скорость разная у них и робот едет не прямо, а косо, к тому же почему то так же калеса и вал ходят восьмеркой, Что делать есть что получше посоветовать?
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Для синхронизации скорости используют энкодеры. Колёса могут ходить восьмёркой, если неправильно закреплены. Какие колёса использовали?
     
  3. Димач

    Димач Нерд

    Точно такие же желтые как в примере!
    Изначально у них резинкой не очень, нет закрепил я колеса ровно относительно друг друга паралельно и крепко, именно сам вал двухсторонний ходит! Колеса это Бог с ними!
     
  4. Димач

    Димач Нерд

    Спасибо, за экодоры!
    Можете скинуть пример проги как их использовать, для контроля 2х моторов?
     
  5. nailxx

    nailxx Официальный Нерд Администратор

    Код (C):

    // пины, к которым подключён энкодер
    #define ENCODER_PIN_A  2
    #define ENCODER_PIN_B  4

    // Состояние пина A энкодера при предыдущем
    // вызове прерывания
    volatile boolean aValueOld = false;

    // Число шагов энкодера
    volatile int pulseCount = 0;

    // Направление вращения (вперёд по умолчанию)
    volatile boolean isForward = true;
    void setup()
    {
      // Иницииализация последовательного порта
      Serial.begin(9600);

      // Инициализация энкодера
      initEncoder();
    }
    void loop()
    {
      // Посылаем в последовательный порт
      // число шагов (импульсов) энкодера
      Serial.print("Pulse count: ");
      Serial.println(pulseCount);
      delay(100);
    }
    void initEncoder()
    {
      // Вращение вперед по умолчанию
      isForward = true;

      // Настраиваем пины с энкодером как входы
      pinMode(ENCODER_PIN_A, INPUT);
      pinMode(ENCODER_PIN_B, INPUT);

      // Определяем к прерыванию INT0 подпрограмму
      // onEncoderChange, которая запускается в
      // случае изменения значения на пине 2
      attachInterrupt(INT0, onEncoderChange, CHANGE);
    }
    // Подпрограмма обработки прерывания INT0
    // Запускается при любом изменении значения
    // на порту 2
    void onEncoderChange()
    {
      int aValue = digitalRead(ENCODER_PIN_A);

      if (aValue && !aValueOld)
      {
        // Произошёл переход от логичекого нуля к
        // единице на пине A. По значению B в этот
        // момент можно понять направление вращения
        int bValue = digitalRead(ENCODER_PIN_B);
        isForward = !bValue;
      }

      // Сохраняем значение на пине A для следующего
      // вызова прерывания
      aValueOld = aValue;
      // В зависимости от направления вращения
      // увеличиваем или уменьшаем число шагов
      // (импульсов) энкодера
      if (isForward)
          pulseCount++;
      else
          pulseCount--;
    }
     
     
  6. Димач

    Димач Нерд

    Не совсем понятно, но постараюсь разобраться, спасибо!!!
     
  7. Димач

    Димач Нерд

    http://amperka.ru/collection/mechanics/product/tamiya-double-gearbox
    Скажите я смогу использовать эти моторы для робота, при этом не использовав энкодера?
    Или все же они хоть и в одном корпусе но работают по разному?
    И как я прочел они не очень то и долговечные и мне кажется не такие уж и мошные как остальные?
    Просто программный код энкодера пугает, и наверное нельзя его сделать более компактным и разборчивым?
     
  8. nailxx

    nailxx Официальный Нерд Администратор

    Нет, с этими моторами всё то же самое. Чудес не бывает: для уверенности в скорости вращения вам так или иначе нужен энкодер в каком бы то ни было его проявлении.
     
  9. Kosss

    Kosss Нерд

    А как происходит определение направления движения? Протестировав данные сенсоры я даже представить себе не могу как это возможно.
    Если один сенсор выдает 0, то другой 1. И не важно какой из них А, а какой В
     
  10. Димач

    Димач Нерд

    Повидемому считает количество прерываний сигнала за промежуток времени и тем самым наверное выдает инфу о том что один быстрее другого двигается и после толи выравнивает, толи мы прописываем выравнивание на основе его данных! Может я и лгу потому как у меня нет на руках энкодера и я в прогу не углублялся, поэтому не считайте мое предположение за истину )
     
  11. Unixon

    Unixon Оракул Модератор

    Энкодеры обычно выдают три сигнала: один тактовый + два фазосмещенных A и B, по первому определяется скорость вращения, по двум другим - направление.

    optical-encoder-450px.jpg
     
  12. Kosss

    Kosss Нерд

    Но тот энкодер, который представлен в магазине, выдает 2 сигнала
     
  13. nailxx

    nailxx Официальный Нерд Администратор

    Да, это сигналы A и B. Как с ними управиться, чтобы всё определить описано в скетче
     
  14. Димач

    Димач Нерд

    Плохо что нужно подбирать колеса и моторы чтобы установить энкодер и он смог считывать инфу, так же плохо что он считывает перпендикулярно относительно своей платы, и это не удобно если хочешь установить моторы или колеса по другому или вообще другого типа.
    Что делать в такой ситуации? Только наверное подстраиваться под энкодер!
     
  15. nailxx

    nailxx Официальный Нерд Администратор

    Это вечная проблема. Для промышленных моторов существует ряд удобных решений, а для DIY-мира их мало.

    Бывают моторы сразу с энкодерами, бывают энкодеры-пропеллеры, которые ставятся на заднюю часть мотора. Однако пока у нас ни того, ни другого нет.
     
  16. Димач

    Димач Нерд

    Спасибо)