Непрерывный серводвигатель не перестанет вращаться

Я хотел использовать Bluetooth для управления моим непрерывным серводвигателем для вращения на 360° на этот раз, и я использовал MIT app inventor для пользовательского интерфейса, чтобы управлять им Также, мой непрерывный серводвигатель не перестанет вращаться, даже если я попробовал myservo.write(90). Мне было интересно, если что-то не так с моим оборудованием, или проблема была в моем коде, так как я был новичком в кодировании, и я поставил различные функции, которые я нашел в Интернете ( я пытался заставить MIT отправлять письма в код arduino, где письмо активировало бы команду сервопривод).

Вот мой код:

#include <SoftwareSerial.h> // TX RX software library for bluetooth

#include <Servo.h> // servo library 
Servo myservo; // servo name

int bluetoothTx = 10; // bluetooth tx to 10 pin
int bluetoothRx = 11; // bluetooth rx to 11 pin

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()
{
  myservo.attach(9); // attach servo signal wire to pin 9
  //Setup usb serial connection to computer
  Serial.begin(9600);
  myservo.write(90);  // set servo to mid-point

  //Setup Bluetooth serial connection to android
  bluetooth.begin(9600);
}

void loop()
{
  //Read from bluetooth and write to usb serial
  if(bluetooth.available()> 0 ) // receive number from bluetooth
  {
    int servopos = bluetooth.read(); // save the received number to servopos
    Serial.println(servopos); // serial print servopos current number received from bluetooth

    char c = Serial.read();
    if(c == 'a'){
      myservo.write(180);
      delay(1000);
      myservo.write(90);
    }
    else if(c == 'b'){
      myservo.write(90);
    }
  }
}

Here's how i set my arduino board And the MIT App inventor code

Было бы очень здорово, если бы вы могли помочь

, 👍0

Обсуждение

Я не знаком с классом Servo, но каково его состояние по умолчанию? Что произойдет, если ни один из ваших кодов в loop() не существует? Сервопривод все еще вращается? Есть ли команда, которую вам нужно отправить, чтобы сказать сервоприводу не вращаться? Если есть, то должны ли вы посылать эту команду, когда Bluetooth недоступен, или когда c не является a или b? (Надеюсь, это имеет смысл), @Code Gorilla

проведите проверку по всем значениям ... надеюсь, сервопривод остановится на какое-то время., @jsotola


1 ответ


3

"Непрерывный сервопривод" - это тот, в котором он перестает вращаться, когда угол установлен на 90 градусов, вращается вперед, когда угол больше 90 градусов, и вращается в обратном направлении, когда угол меньше 90 градусов. Чем дальше от угла 90 градусов, тем быстрее будет вращаться непрерывный сервопривод.

Вы не можете контролировать угол наклона непрерывного сервопривода. Нет никакой обратной связи, чтобы узнать, когда он повернулся, скажем, на 360 градусов.

Вы можете только догадываться о времени и посылать команду типа "перейти на угол 100", чтобы начать медленно вращать непрерывный сервопривод вперед, а затем посылать команду типа "перейти на угол 90", чтобы остановить его после того, как вы "угадали", сколько времени потребовалось, чтобы пройти, скажем, четверть обратный путь уже прошел.

Вот аналогичный вопрос Stack Exchange, где также обсуждаются непрерывные сервоприводы.

,

Разве угол в библиотеке сервоприводов не изменяется от 0 до 180, так что значение остановки для сервопривода непрерывного вращения будет равно 90, как и в ОП? Основная проблема, по-видимому, заключается в том, что сервопривод не останавливается даже при запуске программы., @chrisl

Угол, посылаемый нормальному сервоприводу, управляет положением. Но угол установлен на НЕПРЕРЫВНУЮ скорость и направление сервопривода. Например, вы бы использовали обычный сервопривод для управления рулевым управлением сумо-бота. И вы бы использовали НЕПРЕРЫВНЫЕ сервоприводы, чтобы привести в движение сумо-бота., @st2000

Я не это имел в виду. ОП написал, что сервопривод не перестает вращаться, но при использовании Servo.write(90) он должен это сделать, так как обычно это значение для нулевой скорости для cont. сервоприводы вращения. В вашем ответе это звучит так, как будто выполнение "Servo.write(0)" остановит сервопривод., @chrisl

О, я понимаю, о чем ты говоришь, @chrisl. Из того, что я помню, написание 0 остановило мои непрерывные сервоприводы. Может быть, я что-то не так помню. Если запись 90 останавливает непрерывный сервопривод, то запись, скажем, 45 заставит их идти назад, а запись, скажем, 135 заставит их идти вперед. Дайте мне знать, если это правильно, и я изменю свой ответ. Спасибо!, @st2000

. Нашел еще один вопрос Stack Exchange, который согласен с тем, что вы сказали. Я изменю свой ответ и сошлюсь на другой ответ., @st2000