ラズパイ+サーボモーター

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

コメントを残す