Как остановить вращение сервопривода?

У меня есть непрерывный серводвигатель, подключенный к моему Arduino UNO. Я хочу, чтобы он реагировал на шестнадцатеричный код, полученный инфракрасным пультом. Я хочу, чтобы двигатель вращался один раз в одном направлении, а затем один раз вращался в обратном направлении, а затем останавливался до тех пор, пока снова не будет запущен пульт дистанционного управления. На данный момент пульт дистанционного управления заставит двигатель вращаться один раз в одну сторону, но затем он будет непрерывно вращаться в обратном направлении. Будем признательны за любую помощь!

#include "IRremote.h"
#include <Servo.h>

int receiver = 11; // Сигнальный контакт ИК-приемника на цифровой контакт Arduino 11

Servo servoMain;
IRrecv irrecv(receiver);
decode_results results;

void setup()
{
  Serial.begin(9600);
  Serial.println("IR Receiver Button Decode");
  irrecv.enableIRIn(); // Запускаем приемник
  servoMain.attach(10);
}


void loop()
{
  if (irrecv.decode(&results)) // получили ли мы ИК-сигнал?

  {
    translateIR();
    irrecv.resume(); // получаем следующее значение
  }
}

void translateIR() // выполняет действие на основе полученного IR-кода

// описание удаленных ИК-кодов
{

  switch (results.value)

  {

    case 551520375: servoMain.write(180); delay(1000); servoMain.write(0);     delay(1000); break;
    default: break;

  }

  delay(500); // Не получать немедленный повтор


} // КОНЕЦ перевода IR

, 👍0

Обсуждение

Вы никогда не говорите ему остановиться. Я предполагаю, что написание степеней остановит это., @Majenko

Вы проверили связанные и [связанные вопросы](http://arduinoprosto.ru/q/4076/what-is-commonly-done-to-stop-a-servo-after-reaching-desired-position) Похоже, этот вопрос может дублировать некоторые из них, @James Waldby - jwpat7

http://arduinoprosto.ru/q/4076/what-is-commonly-done-to-stop-a-servo-after-reaching-desired-position, @dhimaspw


2 ответа


Лучший ответ:

2

В отличие от обычного серводвигателя, где аргумент метода Arduino servo.write(angle) представляет положение , серводвигатель непрерывного действия использует аргумент скорости и направления. Большинство серводвигателей непрерывного действия интерпретируют остановку примерно как 90 градусов. Полный, скажем, задний ход как 0 градусов. А полный, скажем, вперед на 180 градусов. Как указано в приведенной выше ссылке:

Для сервопривода с непрерывным вращением это задает скорость сервопривода. (где 0 — полная скорость в одном направлении, 180 — полная скорость в другое, а значение около 90 означает отсутствие движения).

Также интересно, что большинство серводвигателей непрерывного действия имеют регулировку для установки «положения 90 градусов» (полная остановка). То есть сигналы управления серводвигателем аналоговые, а не цифровые! Из этого следует, что интерпретация процессором «положения 90 градусов» может не совпадать с интерпретацией сервоприводами «положения 90 градусов». Отсюда и возможность настроить интерпретацию сервоприводов.

Это изображение взято с веб-сайта, посвященного параллаксным сервоприводам. показывает, как это делается:

,

Большое спасибо за твою помощь. Я не знал о калибровке, и у меня все заработало с небольшими изменениями в коде., @Emmet Smith


1

Я публикую информацию, которая может помочь другим в будущем. У меня есть серводвигатели MG996R, этот двигатель, когда я открыл и внутри, я не нашел БЛОКИРОВКИ на главном колесе, и я предполагаю, что это 360 градусов.

У меня похожая проблема: во время тестирования робота-манипулятора мой двигатель терял положение и вращался на 360 градусов. Я пробовал всевозможные средства, но не нашел решения.

МОЕ РЕШЕНИЕ: подключите сервопривод к внешнему источнику питания 5 В, даже подключение 5 В к плате Arduino с круглым контактом не решает проблему. как только я подключился к внешнему источнику питания с питанием 5 В, моя проблема была решена, и двигатели сохраняли свое положение

,