Как управлять 1 сервоприводом с помощью 2 потенциометров?

Я собирал радиоуправляемый самолет с нуля, используя Arduino, но я в этом новичок.

По сути, я смог заставить две мои Arduino общаться друг с другом таким образом, что при перемещении одного джойстика активируется бесколлекторный двигатель, а при перемещении другого джойстика вверх или вниз активируются 2 сервопривода, толкающие мой самолет. закрылки вверх или вниз. Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, как управлять одними и теми же серводвигателями, когда я перемещаю джойстик влево и вправо. В идеале при перемещении влево один сервопривод толкал бы закрылок вверх, а другой вниз, и наоборот.

Самое близкое, с чем я столкнулся в Интернете, — это использование кнопки для переключения между двумя методами управления, но в идеале я хотел бы, чтобы все работало более плавно без кнопки, если это имеет смысл.

Если у кого-то есть идеи, что написать в моем коде, дайте мне знать или если мне нужно что-то уточнить.

Заранее большое спасибо за помощь.

, 👍-1

Обсуждение

Джойстик вверх-вниз и джойстик влево-вправо — это два отдельных независимых элемента управления., @jsotola

попробуйте прочитать на конечной машине. В таких простых программах это поможет вам управлять различными состояниями. https://create.arduino.cc/projecthub/tolentinocotesta/let-s-learn-how-to-use-finite-state-machine-with-arduino-c524ac?ref=part&ref_id=8233&offset=13, @Tomas

вы, вероятно, пытаетесь сделать чтение джойстика1, перемещение сервопривода1... чтение джойстика2, перемещение сервопривода1 как-то..... вместо этого используйте переменные... чтение джойстика1, установка значения переменной... чтение джойстика2, настройка значения переменной. .. использовать конечное значение переменной для перемещения servo1, @jsotola

Закрылки или элероны? https://www.youtube.com/watch?v=XxrdhJanotw, @VE7JRO


1 ответ


1

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

Ваш джойстик вверх-вниз устанавливает положение закрылков (как вы уже закодировали). Затем джойстик влево-вправо только создает отклонение от этого положения. Вы можете закодировать это следующим образом (в псевдокоде):

Read up-down joystick
Map value from analog value to range 0 to 180 and save in variable "flap_pos"
Read left-right joystick
Map value from analog value to range -90 to 90 and save in variable "flap_deflection"
Write servo1 value as "flap_pos+deflection"
Write servo2 value as `flap_pos-flap_deflection"

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

Как видите, в приведенном выше псевдокоде нет оператора if или подобного ему. Вся магия заключается в отображении считанных аналоговых значений и сложении и вычитании.

,

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

Настоящей магии нет, это простая математика. :-D В «старые добрые времена» аналоговые микшеры делали то, что вы описываете, в цифровом виде. В любом случае, хороший ответ, даже если он показывает, что (молодые) разработчики сегодня потеряли много знаний., @the busybee