Проблема с серво и моторами

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Кирилл Разыграев, 1 авг 2017.

  1. Всем привет.
    Помогите пж. При подключения к передним колесам(серво)
    (вот код)
    Код (Javascript):


    var servo = require('@amperka/servo');
    var l = servo.connect(P8);
    var r = servo.connect(P9);
    var speedf = 180;
    var speedb = 0;
    PrimarySerial.setup(9600);

    PrimarySerial.on('data', function (dataIn) {

      //print(dataIn);
     
      if (dataIn === 'F') {        //Если пришла команда "F"
       
        l.write(speedb);
        r.write(speedf);
       } else if (dataIn === 'B') {
         l.write(speedf);
         r.write(speedb);
         } else if (dataIn === 'L') {   //или если пришла команда "L"
           l.write(speedb);
           r.write(speedb);
         } else if (dataIn === 'R') {
           l.write(speedf);
           r.write(speedf);
         } else if (dataIn === 'S') {
          l.write(90);
           r.write(90);
         }
    });
    моторы через motor shield серво который подключен к P9 вращается сам по себе, а при настройке потенциометром снизу останавливается, пищит, и опять крутится.
    (код с моторами)
    Код (Javascript):

    var Motor = require('@amperka/motor');
    var M1 = Motor.connect(Motor.MotorShield.M1);
    var M2 = Motor.connect(Motor.MotorShield.M2);

    var servo = require('@amperka/servo');
    var l = servo.connect(P8);
    var r = servo.connect(P9);

    var defaultSpeed = 0.5; // это число мы будем использовать в логике поворотов
    var velocity = 4;
    var drive = function(m1, m2) {
      M1.write(-m1);
      M2.write(-m2);
    };

    PrimarySerial.setup(9600);

    PrimarySerial.on('data', function (dataIn) {

      //print(dataIn);
     
      if (dataIn === 'F') {        //Если пришла команда "F"
       
        l.write(0);
        r.write(180);
        drive(velocity, -velocity);
       } else if (dataIn === 'B') {
         l.write(0);
         r.write(180);
         drive(-velocity, velocity);
         } else if (dataIn === 'L') {   //или если пришла команда "L"
           l.write(0);
           r.write(0);
           drive(velocity, velocity);
         } else if (dataIn === 'R') {
           l.write(180);
           r.write(180);
           drive(-velocity, -velocity);
           } else if (dataIn === 'I') {   //или если пришла команда "I", едем вперёд и направо
       
       
       drive(-defaultSpeed + -velocity, -defaultSpeed - -velocity);
      } else if (dataIn === 'J') {   //или если пришла команда "J", едем назад и направо
        drive(defaultSpeed + -velocity, defaultSpeed - -velocity);
      } else if (dataIn === 'G') {  //или если пришла команда "I", едем вперёд и налево
        drive(defaultSpeed - -velocity, defaultSpeed + -velocity);
      } else if (dataIn === 'H') {  //или если пришла команда "H", едем назад и налево
        drive(defaultSpeed + -velocity, defaultSpeed - -velocity);
       
         } else if (dataIn === 'S') {
          l.write(90);
          r.write(90);
           drive(0, 0);
         }
    });
    Помогите пж кто шарит в javascript:(
     
  2. Тимати

    Тимати Нерд

    Я только в C++ шарю
     
  3. VMcastron

    VMcastron Нуб

    Всем здравствуйте. Такая у меня проблема. Собирая управление твердотопливного котла, столкнулся с тем что сервопривод в процессе работы поддергивается, хаотично. опытным путем были исключены проблемы с дуней с питанием подключением сервой и тд. Было установлено что на поддергивание влияет датчики температурв(18b20), сначала грешил на библиотеку Dallas так как при удалении библиотеки и всех ее корней и датчиков из скетча проблема уходит переписал скетч без библиотеки dallas , но с датчиками поддергивания вернулись, при том изменяя задержку времяни на опрос датчика изменяется характер (частота) поддергиваний. ВОПРОС: как это исправить, с чем может быть это связано, это конфликт датчиков создающая помехи на шим ?
    Скетч выложу позже.
     
  4. Тимати

    Тимати Нерд

    Проблема в том что, для хорошей работы с сервоприводами нужен multiservo shield. И ещё посмотрите видео Амперки про гексапод, там есть ответ на вашу проблему.
     
    VMcastron нравится это.
  5. vvr

    vvr Инженерище


    это называется джиттер, можите погуглить.
    самое простое решение - делать attach только когда нужно движение и после его окончания detach.
    библиотека имеет тормоза - в ней задержки для чтения температуры.
    обрабатывайте датчик без библиотеки, там ничего сложного нет, в гугле есть примеры.
     
    VMcastron нравится это.
  6. VMcastron

    VMcastron Нуб

    Да именно так я и сделал если серва нужна то работает если нет то пусть стоит и не дергантся отключенная. Я сделал скетч без библиотеки Даллас да реакция на кнопки пошустрее , но серва как дергалась так и дергается. Но detach решил эту проблему .Спасибо)
     
  7. vvr

    vvr Инженерище

    дёргаться может ещё если питание по напряжению на нижнем пределе (я всегда подаю по верхнему) или по току источник питания слабоват.