サーボモーターをジジジジっと希望の角度に動かすプログラム
頭部分は角度指定とランダムの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()
次のステップ
サーボモーターが正常に動作したら、角度を広げてみよう。
コメント欄を読み込み中
