AliExpressで買ったサーボモータ(LX-16A)を動かす
- 2022.04.29
- Python Raspberry Pi

もはや昨年の話ですが、AliExpressでサーボモータを購入しました。まだロボットに組み込んで使ってはいませんが、とりあえず動作方法についてまとめます。
ライブラリ
ライブラリがgithubで公開されています。pipでインストールできると書かれていますが、どうやってもエラーが解消できなかったため、諦めてまるごとコピーしました。
なお、こちらはpython3.10が必要なので、入っていない場合はインストールする必要があります。起動時はpython3.10 hello-world.pyという風にバージョンも指定します。
hello-world.py
hello-world.pyはライブラリのインポート指定がこのままでは動かず、from lx16a import *に変えて動くようにしました(同じフォルダにlx16a.pyがある前提)。ライブラリの中身を見なくても初期化の仕方や動かし方はすぐ分かると思います。
IDスキャン
各モータにはIDが設定されていますが、そのIDを調べるなら下記のようなプログラムで可能です。初期化したときにエラーが返ってくるかどうかという簡単な手法です。
1 2 3 4 5 6 7 8 9 10 11 12 |
from lx16a import * LX16A.initialize("/dev/ttyUSB0", 0.1) for id in range(0, 128): try: servo = LX16A(id) except ServoError as err: print ("id:", id ," Servo not found") else: print ("id:", id ," Servo found") del servo |
ID設定
IDの設定はそのまんまのメソッドがあるので下記のように設定します。
1 2 3 4 5 6 7 8 9 |
from lx16a import * LX16A.initialize("/dev/ttyUSB0", 0.1) current_id = 1 new_id = 2 servo = LX16A(current_id) servo.set_id(new_id) |
角度取得
角度が取得できるメソッドも用意されています。下記のプログラムを実行すると90°に動かす指令に対して、実行後の角度は89°でした。実際にそのくらいの角度なのか、エンコーダの誤差なのかは不明です。
1 2 3 4 5 6 7 8 9 10 11 12 |
from lx16a import * import time LX16A.initialize("/dev/ttyUSB0", 0.1) servo = LX16A(1) servo.set_angle_limits(0, 240) servo.move(90) time.sleep(1) print (servo.get_physical_angle()) |
動作
動かすとこんな感じです。デイジーチェーンだとケーブルがかなりスッキリします。
Ali Expressで買ったモータ、ちゃんとデイジーチェーンで動いた pic.twitter.com/aIwVfpEM2h
— Ken@エンジニア投資家 (@Ken_okinawan) January 30, 2022
-
前の記事
UbuntuでBluetooth接続のコントローラを使う 2021.09.26
-
次の記事
サーボモータ(LX-16A)の操作パネルを作る 2022.05.22