GPIOにサーボモーターを繋いで、何か動かす
サーボモータは[+5V][GND][GPIO出力]の3本をラズパイに接続する
サーボモータを操作する python プログラム
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# servo4.py
import RPi.GPIO as GPIO
import sys
import time
import os
import random
contPIN = 18
GPIO.setmode( GPIO.BCM )
GPIO.setup( contPIN, GPIO.OUT )
servo = GPIO.PWM( contPIN, 50 ) #50Hz
servo.start( 0.0 )
####################
# サーボの初期化
####################
def init():
servo.ChangeDutyCycle( 0.0 ) # to be stable
####################
# サーボの移動(角度指定)
####################
def move( intAng ):
try:
servo.ChangeDutyCycle( intAng ) # angle
print(str(intAng))
time.sleep(0.3)
servo.ChangeDutyCycle( 0.0 ) # to be stable
except KeyboardInterrupt:
print("\nStop servo4.")
servo.ChangeDutyCycle(2.0)
servo.stop()
GPIO.cleanup()
sys.exit(0)
####################
# サーボの移動(ランダム)
####################
def rand():
intAng = random.randint(2,6)
servo.ChangeDutyCycle( intAng ) # random angle
time.sleep(0.3)
servo.ChangeDutyCycle( 0.0 ) # to be stable
####################
# スタート:処理の分岐
####################
if __name__ == '__main__':
if (len(sys.argv) <=2):
print("Syntax: servo4.py [cmd] [var]")
print(" cmd = 'angle', var = [angle from '2.0' to '6.0']")
print(" cmd = 'random', var = [times from 1 to 10]")
sys.exit()
strCMD = sys.argv[1]
floatVAR = float(sys.argv[2])
if ( strCMD == "angle" ):
if ( floatVAR < 2 or floatVAR > 6 ):
init()
else:
move(floatVAR)
elif ( strCMD == "random" ):
rand()
実行方法1.角度を指定するとき
$ python servo4.py angle 3.0
実行方法2.秒数でランダムな角度に動かす
$ python servo4.py random 5