Y Doll PROJECT 3プログラムテスト編

Y Doll PROJECT 3プログラムテスト編

はじめに

さて前回、サーボーモータをテストを行いました。
今回は、サーボーモータをラズベリーパイを使って制御します。

使用したプログラム言語はpythonです(ver 3.6)

プログラムの前に。。。

配線を行います。GNDと制御端子のGPIO12,13に配線します。
GPIO12,13の理由は、ラズベリーパイ内にあるハードウェアpwmに対応をしている2チャンネルをこの端子から利用できるからです。
pwmによる制御はソフトウェアで行うソフトウェアpwmもありますが、試した結果動作の安定感がなかったので不採用となりました。

ピン配置
参考:https://elinux.org より

配線の仕方わかりにくいかもしれません。すいません🙇‍♂️。より詳細は後日追記するかも??

コード

とりあえずコードです。

解説

GPIO端子の初期設定

GPIOのメッソドを使用してGPIO.setup()とGPIO.PWM()を設定します。
メッソド:オブジェクト指向プログラム言語で定義されたオブジェクト(クラスや構造体など)で定義された関数と同じような書き方をされたもの

    # GPIO 12番を使用
    # GPIO 13番を使用
    pwms =[]
    GPIO_12 = 12
    GPIO_13 = 13
    GPIO.setmode(GPIO.BCM)
    #######################
    GPIO.setup(12, GPIO.OUT)
    s = GPIO.PWM(12, 50)
    s.start(0.0)
    pwms.append(s)
    #######################
    GPIO.setup(13, GPIO.OUT)
    s = GPIO.PWM(13, 50)
    s.start(0.0)
    pwms.append(s)
    #######################

サーボの制御を関数にした

GPIO.PWM()のメッソドのChangeDutyCycle()に 決められたduty比を入れることにより角度を調整します。
duty比は角度により計算します。servo_angle()関数で行っています。
今回は、サーボの速度の関係もあり、
0.25秒で角度を変化させます。(0.5秒間隔での制御コマンドとなりました。)
暫定で9コマンドを実装しました。

def move_servo_A1(pwms,times):
    times = int(times/0.5)
    for t in range(times):
        d1 = servo_angle(0)
        d2 = servo_angle(0)
        pwms[0].ChangeDutyCycle(d1)
        pwms[1].ChangeDutyCycle(d2)
        time.sleep(0.25)
        d1 = servo_angle(0)
        d2 = servo_angle(0)
        pwms[0].ChangeDutyCycle(d1)
        pwms[1].ChangeDutyCycle(d2)
        time.sleep(0.25)

サーボの制御

関数を呼びます。

        move_servo_A1(pwms,4)
        move_servo_A2(pwms,4)
        move_servo_A3(pwms,4)
        move_servo_B1(pwms,4)
        move_servo_B2(pwms,4)
        move_servo_B3(pwms,4)
        move_servo_C1(pwms,4)
        move_servo_C2(pwms,4)
        move_servo_C3(pwms,4)

コマンド表

目と口を動かす想定でこんなコマンド表になりました。

おわり

サーボのプログラムはpythonのGPIOを利用すると意外に簡単に制御することができます。
次は実際の台本を実装するプログラムについてです。

Y Doll PROJECTカテゴリの最新記事