Как запрограммировать угол поворота сервы по приведённому графику?

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем avex, 7 май 2017.

  1. avex

    avex Нерд

    Привет мастерам!
    Подскажите, пожалуйста, как в коде обусловить поворот вала сервопривода от движения потенциометра джойстика в соответствии с нарисованным графиком?
    [​IMG]
    По вертикали - угол поворота в левую или правую сторону от центра (90 градусов), по горизонтали - значения одного из потенциометров джойстика (приблизительно).
    Если была похожая тема, подскажите, пожалуйста, где искать - сам не нашёл.
     
  2. rkit

    rkit Гуру

    Если нету формулы, то составьте таблицу по графику, и поворачивайте по ней.
     
  3. avex

    avex Нерд

    Как это сделать? Нужно добиться плавности движения сервы, без скачков.
     
  4. ostrov

    ostrov Гуру

    Сделайте массив (график) с точностью до градуса, будет весьма плавно. Для экономии ОЗУ используйте PROGMEM.
     
  5. rkit

    rkit Гуру

    Как я написал, так и сделать. Напишите в лоб, дальше подскажу как оптимизировать.
     
  6. avex

    avex Нерд

    Как-то длинно и не очень изящно -
    Код (C++):

    ...if (x = 600) {
    myServo.write (180)
    } else if ()...
     
    Думал, можно попроще и изысканней.
     
    Последнее редактирование: 7 май 2017
  7. avex

    avex Нерд

    Спасибо, что-то новое для меня.
     
  8. rkit

    rkit Гуру

    Изысканно? Ну напишите стихов в комментариях, я не знаю.
     
  9. avex

    avex Нерд

    Благодарю за ценные подсказки.
     
  10. Tomasina

    Tomasina Сушитель лампочек Модератор

  11. rkit

    rkit Гуру

    А в школе рассказываю, как из графика получить параметры параболы?
     
  12. Tomasina

    Tomasina Сушитель лампочек Модератор

    Точки пересечения с осями (600, 2400, 90) есть, 1500 берем за ноль координат, и подбираем коэффициенты, хоть в ардуино, хоть в Excel.
     
  13. rkit

    rkit Гуру

    Не учат, понятно. Без специализированный методов, вроде градиентного спуска, точный подбор по нескольким параметрам займет вечность.
     
  14. Tomasina

    Tomasina Сушитель лампочек Модератор

    А точный и не надо, у ТС сказано: "приблизительно" ;)
     
  15. ostrov

    ostrov Гуру

    Зачем индусский код? Есть двухмерный массив, его в цикле прогоняют и ищут соответствие. Строки три - четыре на всю процедуру. И можно хоть параболу, хоть гиперболу, хоть факториал.
     
  16. avex

    avex Нерд

    Не очевидно, что это график [части] параболы - нет доказательств равенства фокального радиуса расстоянию от соответствующей точки параболы до директрисы.
     
  17. avex

    avex Нерд

    Вот бы еще и на схожие примеры посмотреть.
     
  18. mcureenab

    mcureenab Гуру

    Тут скорее эллипс. Только я сомневаюсь, что и джойстик и серва так вот строго будут кодировать улы.

    На затравку посмотрите калькулятор:

    https://planetcalc.ru/5992/

    Но у этого подхода есть плохой момент, нет возможности указать через какие точки должна проходить кривая.
     
  19. mcureenab

    mcureenab Гуру

    http://math.semestr.ru/line/ellipse.php

    a = (2400 - 600)/2 = 900;
    b = 90;

    Код (C++):
        long x = joystick - 1500; // калибровка 0
        float serv = sqrt( 8100.0f - x*x / 100.0f );
     
    Последнее редактирование: 8 май 2017
    avex нравится это.
  20. mcureenab

    mcureenab Гуру