Tkinter (Python)でサーボモータの操作パネルを作る V2
- 2020.06.14
- Python Raspberry Pi
先日、下記の記事でサーボモータ用の操作パネルを作成しました。これはArduino用でPCとArduinoを繋いでシリアル通信で制御していましたが、
ラズパイでも同じように操作したかったので、少し改良してみました。
https://oki-lab.net/entry/2020-05-05-130644
ラズパイには下記の16チャンネルサーボHATを使います。
こちらのセットアップ方法についてはメーカのHPに記載されているのでこちらでは省略。
www.switch-science.com
目次
プログラム
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 |
import tkinter as tk from tkinter import * from tkinter import ttk from adafruit_servokit import ServoKit kit = ServoKit(channels=16) motor_num = 2 for i in range(16): kit.servo[i].set_pulse_width_range(500, 2400) kit.servo[i].angle=90 class PanelItem(): val=0 myval= 0 def __init__(self, val): self.val=val print ("MOTOR NO:"+str(self.val)) def SetItem(self): self.myval = DoubleVar(value=90) self.myval.trace("w", self.value_changed) # Label label = tk.Label(frame, text="MOTOR"+str(self.val)) label.pack(side="top") # Scale sc = tk.Scale( frame, variable=self.myval, orient=HORIZONTAL, length=200, from_=0, to=180) sc.pack(side="top") def value_changed(self, *args): kit.servo[self.val].angle=self.myval.get() print("No:" + str(self.val) + ", value = %d" % self.myval.get()) if __name__ == '__main__': root = tk.Tk() root.title("CONTROL PANEL") root.columnconfigure(0, weight=1); root.rowconfigure(0, weight=1); frame = ttk.Frame(root, padding=10) frame.pack() frame.columnconfigure(0, weight=1); frame.rowconfigure(0, weight=1); items=[] for i in range(motor_num): items.append(PanelItem(i)) items[i].SetItem() root.mainloop() |
プログラムは上記のとおりです。なお、こちらはPython3でのみ動きます。モータの数はmotor_numで指定します。
インターフェイスは先日のものと特に変えておらず、スライダで角度を操作します。
シールドにモーター用の電源を接続して上記のプログラムを起動すると、スライダでモータを動かすことができます。
ラズパイだとVNC接続で簡単に遠隔操作できるので、ロボットに組み込んだ後に動作を作るのが簡単で便利です。
-
前の記事
国土交通省のAPIから不動産情報を取得する 2020.05.17
-
次の記事
車輪付き4足歩行ロボット制作 2020.06.22