RaspBerryPi3에서 서보 모터 제어 (Pi4j)

\def\textlarge#1{%
  {\rm\Large #1}
}
\def\textsmall#1{%
  {\rm\scriptsize #1}
}

1, 서보 모터 제어!



지난번의 「RaspBerryPi3로 LED를 PWM으로 빛나게 한다(Pi4j)」로 PWM을 조종할 수 있었으므로, 드디어 모터의 제어입니다.
입문 키트※1 에 있는 SG90을 PWM 제어로 제어합니다. 이 제어를 통해 임의의 각도를 유지할 수 있습니다.


주의
・나는 전자 기기에 대해서는 전압=저항×전류가 아는 정도의 전혀 아마추어입니다.

$\textsmall{ ※1「Kuman 35개 Raspberry Pi에 적용 초보자 전자 공작 1602 액정 디스플레이+온도/습도 센서+BMP180 디지털 기압 센서}$
$\textsmall{0+HC-SR501 적외선 모션 센서 모듈 어린이 놀이 Raspberry Pi 3 2 model B A A+ + 에 대응 전자공작 입문 키트 라즈베리 파이 K71」}$

2, 주제



 (1) 접속



서보 모터를 접속하고 있습니다.
 ①전체 화상


 ②상세


(2) Raspberry pi 설정



직렬을 활성화하면 핀을 제어 할 수 있습니다.


 (3) 실행 프로그램



180도, 1초 대기, 90도, 1초 대기, 0도, 1초 대기를 반복합니다.

TestPwmServoMotor.java
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinPwmOutput;
import com.pi4j.io.gpio.Pin;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.util.CommandArgumentParser;




public class TestPwmServoMotor {

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


    /**
     * 100Hzで出力
     * @param args
     * @throws InterruptedException
     */
    public static void pwm(String[] args) throws InterruptedException{

        final GpioController gpio = GpioFactory.getInstance();

        Pin pin = CommandArgumentParser.getPin(
        RaspiPin.class,    
        RaspiPin.GPIO_00,  
        args);             
        GpioPinPwmOutput pwm = gpio.provisionSoftPwmOutputPin(pin);
        pwm.setPwmRange(100);//出力時間を100分割


        int sleep = 1000;
        for(int i = 0 ;i<10;i++){
            //180度
            pwm.setPwm(25);//デューティー比25
            System.out.println("PWM rate is: " + pwm.getPwm());
            Thread.sleep(sleep);


            //90度
            pwm.setPwm(15);//デューティー比15
            System.out.println("PWM rate is: " + pwm.getPwm());
            Thread.sleep(sleep);

            //0度
            pwm.setPwm(6);//デューティー比6
            System.out.println("PWM rate is: " + pwm.getPwm());
            Thread.sleep(sleep);

        }
        gpio.shutdown();        

        System.out.println("pwm end");


    }
}

javaDoc의 설명을 보면 아무래도 100Hz의 신호를 내고있는 것 같습니다.
측정해 보면 확실히 거의 100Hz!


 (4)실행 결과



3단계의 각도를 제어할 수 있습니다.


3, 결론



모터가 제어할 수 있으면 여러가지 할 것 같고 꿈이 퍼집니다!
언젠가 해보고 싶었던 로봇 만들기를 할 수 있을지도.

이번 테스트에서 두 가지 과제가 있습니다.
1개는 지정할 수 있는 듀티비가 0~100이기 때문에 미묘한 각도를 표현할 수 없습니다.
두 번째, 사실은 하드웨어 PWM을 사용하고 싶었지만 왜 잘 작동하지 않았습니다.
하드웨어라면 지정할 수 있는 듀티비가 0~1024인데!
java로부터 제어가 되어 있지 않은 것 같아요. 권한의 문제입니까?

참고
모터 제어에 빠뜨릴 수 없는 기술 “PWM”은 무엇?
PWM 제어가 굉장히 알기 쉽게 해설되고 있었습니다.

좋은 웹페이지 즐겨찾기