サーボモータを動かす

・pythonスクリプトでサーボを動かしてみましょう。
・ラズパイにサーボドライバーボードを接続し、pythonスクリプトに「bezelie.py」ライブラリをインポートすれば、簡単にサーボを扱うことができます。

事前準備

・ラズパイとサーボドライバーボードが接続されていることをご確認ください。

sample_servo1.py

機能

・ランダムでべゼリーに感情アクションをさせます。

実行方法
$ python sample_servo1.py
ソースコード
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Bezelie Sample Code for Raspberry Pi : ランダムでサーボを動かす
# ラズパイにサーボドライバーとサーボを接続してから実行してください。

# ライブラリの読み込み
from time import sleep                # ウェイト処理
import bezelie                        # べゼリー専用モジュール

# Setting
bez = bezelie.Control()               # べゼリー操作インスタンスの生成
bez.moveCenter()                      # サーボをセンタリング
sleep(0.5)

# Main Loop
def main():
  try:
    print "開始します"
    while True:
      bez.moveRnd()                   # 7種のアクションをランダムで発生
      bez.stop()                      # サーボ停止命令
      sleep (0.5)
  except KeyboardInterrupt:
    print "  終了しました"

if __name__ == "__main__":
    main()
解説

・8行目でべゼリー専用のモジュールを読み込んでいます。
・11行目でサーボを動かす準備をしています。

・ランダムなのでどんな動きをするのか予想できませんが、なんでもいいからとりあえずべゼリーにアクションさせたいときは、この「moveRnd()」をご利用ください。


sample_servo2.py

機能

・べゼリーの7つの感情アクションを順番に実行します。

実行方法
$ python sample_servo2.py
ソースコード
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Bezelie Sample Code for Raspberry Pi : べゼリーの基本アクション
# ラズパイにサーボドライバーとサーボを接続してから実行してください。

# ライブラリの読み込み
from time import sleep                # ウェイト処理
import bezelie                        # べゼリー専用モジュール

# Setting
bez = bezelie.Control()               # べゼリー操作インスタンスの生成
bez.moveCenter()                      # サーボをセンタリング
sleep(0.5)

# Main Loop
def main():
  try:
    print "開始します"
    while True:
      print "happy"
      bez.moveAct('happy')            # しあわせ
      bez.stop()
      sleep (0.5)
      print "nod"
      bez.moveAct('nod')              # うなづき
      bez.stop()
      sleep (0.5)
      print "why"
      bez.moveAct('why')              # 首かしげ
      bez.stop()
      sleep (0.5)
      print "around"
      bez.moveAct('around')           # 見回し
      bez.stop()
      sleep (0.5)
      print "up"
      bez.moveAct('up')               # 見上げ
      bez.stop()
      sleep (0.5)
      print "wave"
      bez.moveAct('wave')             # くねくね
      bez.stop()
      sleep (0.5)
      print "etc"
      bez.moveAct('etc')              # ETC
      bez.stop()
      sleep (0.5)
  except KeyboardInterrupt:
    print "  終了しました"

if __name__ == "__main__":
    main()
解説

・bez.moveAct()のカッコの中に「happy」「nod」などのキーワードを記入することで、特定の感情アクションを行うことができます。

・べゼリーに特定の感情アクションをさせたい時は、この「bez.moveAct()」を使ってみてください。


sample_servo3.py

機能

・感情アクションは使わず、サーボを個別に動かします。

実行方法
$ python sample_servo3.py
ソースコード
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Bezelie Sample Code for Raspberry Pi : サーボを個別に動かす
# ラズパイにサーボドライバーとサーボを接続してから実行してください。

# ライブラリの読み込み
from time import sleep                # ウェイト処理
import bezelie                        # べゼリー専用モジュール

# Setting
bez = bezelie.Control()               # べゼリー操作インスタンスの生成
bez.moveCenter()                      # サーボをセンタリング
sleep(0.5)

# Main Loop
def main():
  try:
    print "開始します"
    while True:
      print "Head 上回転"
      bez.moveHead(10)                # 頭の上下
      sleep (0.5)
      print "Head 下回転"
      bez.moveHead(-10)               # 頭の上下
      sleep (0.5)
      print "Head 中央"
      bez.moveHead(0)                 # 頭の上下
      sleep (1)
      print "Back 右回転"
      bez.moveBack(20)                # 頭の左右
      sleep (0.5)
      print "Back 左回転"
      bez.moveBack(-20)               # 頭の左右
      sleep (0.5)
      print "Back 中央"
      bez.moveBack(0)                 # 頭の左右
      sleep (1)
      print "Stage 右回転"
      bez.moveStage(30)               # 体の左右
      sleep (0.5)
      print "Stage 左回転"
      bez.moveStage(-30)              # 体の左右
      sleep (0.5)
      print "Stage 中央"
      bez.moveStage(0)                # 体の左右
      sleep (1)
  except KeyboardInterrupt:
    print "  終了しました"

if __name__ == "__main__":
    main()
解説

・Headサーボは頭の上下、Backサーボは頭の左右回転、Stageサーボは体の左右回転を行います。サーボじたいの回転最大角度は±90度ですが、べゼリーのパーツどうしが干渉してしまうので、Headは±15度程度、Backは±20度程度、Stageは±30度ぐらいまでしか回りません。
・サーボを真上から見下ろした場合、時計回りなら正の値、反時計回りなら負の値を指定してください。

応用

・3つのサーボを駆使して、自分なりの感情アクションを作ってみてください。