Как остановить вращение сервопривода?
У меня есть непрерывный серводвигатель, подключенный к моему 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
@Emmet Smith, 👍0
Обсуждение2 ответа
Лучший ответ:
В отличие от обычного серводвигателя, где аргумент метода Arduino servo.write(angle) представляет положение , серводвигатель непрерывного действия использует аргумент скорости и направления. Большинство серводвигателей непрерывного действия интерпретируют остановку примерно как 90 градусов. Полный, скажем, задний ход как 0 градусов. А полный, скажем, вперед на 180 градусов. Как указано в приведенной выше ссылке:
Для сервопривода с непрерывным вращением это задает скорость сервопривода. (где 0 — полная скорость в одном направлении, 180 — полная скорость в другое, а значение около 90 означает отсутствие движения).
Также интересно, что большинство серводвигателей непрерывного действия имеют регулировку для установки «положения 90 градусов» (полная остановка). То есть сигналы управления серводвигателем аналоговые, а не цифровые! Из этого следует, что интерпретация процессором «положения 90 градусов» может не совпадать с интерпретацией сервоприводами «положения 90 градусов». Отсюда и возможность настроить интерпретацию сервоприводов.
Это изображение взято с веб-сайта, посвященного параллаксным сервоприводам. показывает, как это делается:
Большое спасибо за твою помощь. Я не знал о калибровке, и у меня все заработало с небольшими изменениями в коде., @Emmet Smith
Я публикую информацию, которая может помочь другим в будущем. У меня есть серводвигатели MG996R, этот двигатель, когда я открыл и внутри, я не нашел БЛОКИРОВКИ на главном колесе, и я предполагаю, что это 360 градусов.
У меня похожая проблема: во время тестирования робота-манипулятора мой двигатель терял положение и вращался на 360 градусов. Я пробовал всевозможные средства, но не нашел решения.
МОЕ РЕШЕНИЕ: подключите сервопривод к внешнему источнику питания 5 В, даже подключение 5 В к плате Arduino с круглым контактом не решает проблему. как только я подключился к внешнему источнику питания с питанием 5 В, моя проблема была решена, и двигатели сохраняли свое положение
- Использование VS1838B с Arduino
- Tone() конфликтует с библиотекой IRremote (множественное определение `__vector_7')
- Почему Arduino сбрасывается во время управления двигателями?
- Arduino IRremote перестает работать
- Использование ИК-пульта с Arduino
- ИК приемник принимает только 0
- 2 Моторное управление роботом с радиоуправляемым радио
- Переключение между циклами Arduino ИК-пульт дистанционного управления
Вы никогда не говорите ему остановиться. Я предполагаю, что написание степеней остановит это., @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