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