サーボモーターをジジジジっと希望の角度に動かすプログラム

頭部分は角度指定とランダムの2つの方式とした。角度指定の場合は「python servo4.py angle 4」というように数字の部分に2.0から6.0の間の数字を指定する[小数点で細かく指定も可]。ランダムの場合は、「python servo4.py random」で動きます。これを他のpythonプログラムにimportして、音声認識でコマンドを与えてアクション動作をさせてみる。

 

新しいディレクトリとファイルを作成する。例えば

~/servo/servo4.py

を作る。

$ cd python
$ mkdir servo
$ cd servo
$ vi servo4.py

#!/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 )

####################
# サーボの移動(角度指定)
####################
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()
  

 

次のステップ

サーボモーターが正常に動作したら、角度を広げてみよう。

 

 


コメント欄を読み込み中