Программирование Сервопривода Как Получить -90 Градусов

как говорится в названии вопроса, как я буду поворачивать сервопривод на 90 градусов?

Я написал свой код как таковой;

  // Turn servo to the right
  if(x > 520 && y < 510 && y > 490){
  servo.write(0);
  delay(50);

  //Turn left
  }else if(x < 490 && y < 510 && y > 490){
    servo.write(180);
    delay(50);

 //Turn backwards
} else if(y < 490 && x < 520 && x > 490){
  servo.write(-90);
  delay(50);

Очевидно, что -90 на самом деле не является градусом на сервоприводе, и он будет поворачиваться только между 0 и 180. Поэтому мне было интересно, есть ли какой-нибудь другой способ закодировать его?

Сервопривод соединен с джойстиком, и план состоит в том, чтобы построить что-то вроде 360-градусной вертикальной и 180-градусной горизонтальной турели. Любая другая команда работает, и когда я заменяю -90 на 90 градусов, она тоже работает. Значит, он подключен правильно.

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

, 👍-1

Обсуждение

Нет такой вещи, как -90°. Просто измените свое представление о том, что находится "прямо перед вами"..., @Majenko

Непонятно, как джойстик соединен с сервоприводом и какие именно движения вам нужны на джойстике., @chrisl

@chrisl На самом деле я хочу, чтобы сервопривод имитировал джойстик. Но поскольку я впервые программирую с помощью сервоприводов и джойстика, я просто хочу иметь простой верхний, нижний, левый, правый, верхний левый и правый углы, а затем нижний правый и левый углы. Я основываю это на системе, где направления зависят от того, находятся ли x и/или y выше или ниже среднего значения 510-иш. Когда вы перемещаете джойстик по вертикали слева направо, он увеличивается с 0 до 1320, и то же самое происходит по горизонтали вниз и вверх. Переменные x и y в моей программе основаны на этих значениях., @GeorgeWTrump

Смотрите мой отредактированный ответ. Вам нужны два сервопривода для управления 2-осевым джойстиком., @Duncan C


3 ответа


1

Обычные сервоприводы имеют диапазон только 180°. Вы можете дать себе "смещение", так что у вас есть от -90° до 90°, но вы всегда получаете диапазон только 180°. Вы не можете идти от -90° до 180°.

Используя механику (за пределами этого сайта), вы можете умножить свое движение (подумайте о передачах), чтобы ваш диапазон был больше.

,

Это кажется мне слишком продвинутым с точки зрения механического аспекта. Можно ли использовать двигатель постоянного тока для базы и функцию, которая воспроизводит движение джойстика? Или вы видите в этом какие-то непосредственные проблемы?, @GeorgeWTrump

Вы можете получить специальные сервоприводы с более широким диапазоном, и вы можете получить сервоприводы "непрерывного вращения", которые вращаются по кругу, но вы указываете не угол, а скорость. Если вы хотите использовать что-либо, кроме "обычного" сервопривода, вам понадобится какая-то форма обратной связи, чтобы знать, под каким углом вы стоите., @Majenko

Спасибо, эти сервоприводы "широкого диапазона" называются чем-то особенным? Когда я гуглю "360-градусный сервопривод", я просто получаю рекламу обычных сервоприводов., @GeorgeWTrump

@GeorgeWTrump, я бы рекомендовал шаговый двигатель. Также изучите двигатели с квадратурными энкодерами и индексными импульсами. Их можно использовать для установки положения. Любое из вышеперечисленного может непрерывно вращаться в любом направлении, все еще зная, что это угол от 0 до 360 градусов или от -180 до +180, или как вы хотите об этом подумать. С помощью правильного алгоритма управления и PID-цикла вы также можете управлять точным положением. Однако это более продвинутый подход., @Gabriel Staples


1

Вы говорите: "Сервопривод подключен к джойстику, и план состоит в том, чтобы построить своего рода башню на 360 градусов по вертикали и 180 градусов по горизонтали. "

Это не имеет смысла. Как джойстик может поворачиваться на 360° в одном измерении и на 180° в другом измерении?

Джойстику не нужен угол, превышающий 180°. Он установлен на плоской поверхности и может перемещаться только на 180° в двух разных измерениях, X и Y. (И на самом деле, вероятно, больше похоже на 120° в каждом измерении).

Используйте два сервопривода на 180 градусов, один для оси X и один для оси Y.

Установите "нейтральное" положение в 0

Вы можете сопоставить диапазон от 0-1320 до -90-90 с помощью оператора map. (или отрегулируйте по мере необходимости, поскольку диапазон движения джойстика, вероятно, составляет менее 180 градусов - более 120°, как сказал Крисл в своем комментарии.)

эту статьюСмотрите для получения информации о том, как работает 2-осевой джойстик. В частности, посмотрите на раздел под названием "Механизм карданного подвеса" немного ниже в этой статье.

,

Я не уверен, что понимаю? Сам джойстик уже перемещается на 360 градусов? Что мне нужно для перемещения на 360 градусов, так это платформа для турели. Конечно, я всегда мог бы переместить его против того, на что он должен быть направлен, а затем переместить наклон назад (т. е. на 180 градусов), но лично мне это кажется неудобным. Но отображение его от -90 до 90 все равно приведет только к 180 градусам. Это означает, что цель может просто переместиться за турель., @GeorgeWTrump

Какой у вас тип джойстика? Обычный джойстик (как на контроллерах игровых консолей) поворачивается примерно на 120 градусов по осям x и y. Оси независимы. Таким образом, вам понадобятся 2 сервопривода, каждый из которых движется на 120 градусов. Где ваш джойстик движется на 360 градусов?, @chrisl

Вам не нужен один поворот на 360°. Вы хотите наклонить его по отдельным осям X и Y на ±90° каждая (на самом деле, вероятно, больше похоже на ±60 градусов, как сказал Крисл в своем комментарии)., @Duncan C

О, но у меня было бы 2 джойстика. Один обычный джойстик с обычным кодом, который будет выводить нормальный диапазон наклона 0-180 градусов. Между тем, другой джойстик будет иметь отдельные оси "x" и "y". Конечно, я мог бы просто использовать ось y для всех градусов, обращенных назад, по "y = y-выход + 180". Так что, если y = 1, это будет 181, и, следовательно, в обратном направлении. И для градусов, направленных вперед (т. е. 0-180) Я могу просто вывести значение x., @GeorgeWTrump

Теперь это мой ход мыслей, меняет ли это ваше предложение? Насколько я понимаю, вы считаете, что я ограничен общим диапазоном 180 градусов (на самом деле 120 градусов), поэтому вы предлагаете использовать только 180 градусов движения? Или я ошибаюсь?, @GeorgeWTrump

Почему теперь есть 2 джойстика? Это полностью то, что именно вы пытаетесь сделать. Может быть, вам следует нарисовать схематические изображения, как все связано и где находятся ваши 360 и 180 градусов, @chrisl


1

Если я правильно понимаю, вам нужно всего лишь переместить сервопривод на 180 градусов, от одного предела к другому, но вы хотите, чтобы -90 означало один из пределов, а +90-противоположный предел? Если это так, просто добавьте 90 к углу сервопривода, прежде чем отправлять его:

servo.write(angle+90);

Это превращает -90 в 0, 0 в 90 и 90 в 180. Вы можете использовать те координаты, которые вам нравятся (-90 - +90), а сервопривод видит нужные ему координаты (0 - 180).

Это простой случай сопоставления; существует функция map (), которая может сделать это за вас для всех сопоставлений всех видов диапазонов, один в другой. Преобразование (-90 - 90) в (0 - 180) настолько просто, что функция карты действительно ничего не добавляет, но в других случаях об этом удобно знать.

,