サーボモータ(LX-16A)の操作パネルを作る
- 2022.05.22
- Python
先日、AliExpressで買ったサーボモータを動かしてみましたが、今回はその操作パネルを作成しました。
プログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#!/usr/bin/env python3 import tkinter as tk from pylx16a.lx16a import * class PanelItem(): id = 0 servo = None def __init__(self, id): self.id = id print ("MOTOR ID:" + str(self.id)) try: self.servo = LX16A(self.id) self.servo.set_angle_limits(0, 240) except ServoTimeoutError as e: print(f"Servo {e.id_} is not responding. Exiting...") quit() def set_item(self): ini_val = 60 def send_cmd(): cmd = var_spinbox.get() print ("ID:" + str(self.id) +", Value:" + cmd) self.servo.move(int(cmd)) def upd_spinbox(event=None): lb2["text"] = "Value:" + var_spinbox.get() var_spinbox = tk.StringVar() lb = tk.Label(text="MOTOR" + str(self.id)) lb2 = tk.Label(text="Value:"+ str(ini_val)) spinbox = tk.Spinbox(root, from_=0, to=240, increment=1, textvariable=var_spinbox, command=upd_spinbox) var_spinbox.set(60) spinbox.bind("<Return>", upd_spinbox) bt = tk.Button(text="Send Cmd", command=send_cmd) [widget.pack() for widget in (lb,lb2, spinbox, bt)] if __name__ == '__main__': LX16A.initialize("/dev/ttyUSB0") root = tk.Tk() root.title("Control Panel") motor_id = [1, 2] items = [] for i in range(len(motor_id)): items.append(PanelItem(motor_id[i])) items[i].set_item() root.mainloop() |
モータを動作させる方法自体は以前の記事に記載しています。pythonのバージョンに注意が必要ですが、Ubuntu22.04なら問題ないはずです。
GUIはtkinterで作成しています。ボタンを押すとスピンボックスに入力された角度にモータを動かします。
操作画面
起動するとウインドウが立ち上がり、指定したモータの数だけ入力欄とボタンが表示されます。それぞれで角度を入力してボタンを押すとモータが動きます。 なお、エラー処理してないのでスピンボックスに文字も入れられますが、当然動きませんので注意が必要です。
-
前の記事
AliExpressで買ったサーボモータ(LX-16A)を動かす 2022.04.29
-
次の記事
Ubuntu22でVNCを使う 2022.11.06