Pi4j: SG90 не поворачивается на 180°

У меня есть этот серводвигатель SG90 (полностью функциональный и новый), который не поворачивается полностью на 180° (или 0°). Он останавливается на полпути, когда я пытаюсь заставить его двигаться справа налево (против часовой стрелки). Я проверил 4 раза проводку и оборудование, так что проблема в коде наверное. Пытаюсь управлять сервомотором через raspberry pi3 с Pi4j.

Я уже пробовал менять проводку, но я не думаю, что это проблема.

Код, который я пытался использовать, был моим, и он отправлял ШИМ с длительностью 1 мс и 2 мс.

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

public class xd {

    public static void main (String[] args) throws InterruptedException {

//creating the output

 final GpioController gpio = GpioFactory.getInstance();

        final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLED", PinState.HIGH);

//making the 1ms PWM
//this makes the servo go left but it stops halfway to the end
 for (int i=0; i<=100; i++){

             pin.pulse(1,true);
             Thread.sleep(19);
         }

Теперь о ШИМ на 2 мс.

//the servo goes right (clockwise) and it works fine
for (int i=0; i<=100; i++){

            pin.pulse(2,true);
            Thread.sleep(18);
        }



       gpio.shutdown();

}

}

возможно, вам следует сосредоточиться на том, как создать более надежные выходы сигнала ШИМ, прежде чем пробовать свой собственный

Akk 13.05.2019 17:38

Спасибо, вы про уже реализованные в библиотеке?

Akk 13.05.2019 17:40

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

Wolfgang Fahl 17.07.2019 10:27

Обычно сервоприводы вращаются на 180 градусов, от +90 до -90 градусов.

NomadMaker 06.05.2020 23:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
331
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

эй, я провел больше исследований, чем вы, и, по-видимому, вы можете напрямую выводить сигналы ШИМ без необходимости создавать свои собственные

Вот пример:

int n = 18;
System.out.println("Config Servo PWM with pin number: " + n);
com.pi4j.wiringpi.Gpio.pinMode(n, com.pi4j.wiringpi.Gpio.PWM_OUTPUT);
com.pi4j.wiringpi.Gpio.pwmSetMode(com.pi4j.wiringpi.Gpio.PWM_MODE_MS);
com.pi4j.wiringpi.Gpio.pwmSetClock(192);
com.pi4j.wiringpi.Gpio.pwmSetRange(2000);

for(int i = 0; i < 5; i++){
    System.out.println("Set Servo");
    com.pi4j.wiringpi.Gpio.pwmWrite(n, 50);

    Thread.sleep(1000);

    System.out.println("Change servo state...");
    com.pi4j.wiringpi.Gpio.pwmWrite(n, 250);

    Thread.sleep(1000);

}

Другие вопросы по теме