QT4でサーボモータ(SG90)の操作パネルを作成
- 2017.08.26
- Python Raspberry Pi
ネットで安価なサーボモータを探してまとめ買いしたのですが、動きをテストするのにプログラムを書き換えるとか、キーボードで角度を入力するのは面倒だったので、GUIで操作できるようにしました。
GUIはQT4で作成するので、まずはそのインストールから。
なお、動作環境はRaspberry Pi 3でOSはUbuntu mateです。
QT4インストール
ターミナルに以下のコマンドを入力し、QT4をインストールします。
1 |
sudo apt-get install python-pyqt4 |
プログラム
GUIはQT4ですが、モータの動作はRPi.GPIOで行います。
今回使用するサーボモータはSG90という型式のもので、動作範囲は-90~90度であり、
これをDuty cycleで指定します。
また、PWM周波数の50HzはGPIO.PWMで指定します。
GUIの方は、角度の表示パネルとスライダーで構成しています。
このスライダーを動かすとその角度にモータが動きます。
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 |
from PyQt4 import QtGui,QtCore import RPi.GPIO as GPIO servo=None def initialize(): gp_out=2 GPIO.setmode(GPIO.BCM) GPIO.setup(gp_out,GPIO.OUT) global servo servo=GPIO.PWM(gp_out,50) servo.start(0.0) def change_detect(val): global servo #input 2~12 (-90~90 deg) servo.ChangeDutyCycle((val+90)*9.5/180+2.5) print (val) if __name__ == '__main__': initialize() app=QtGui.QApplication(sys.argv) w=QtGui.QWidget() w.resize(320,240) w.setWindowTitle("Motor Test") disp=QtGui.QLCDNumber() slider=QtGui.QSlider(QtCore.Qt.Horizontal) slider.setRange(-90,90) slider.setValue(0) slider.valueChanged.connect(disp.display) slider.valueChanged.connect(lambda:change_detect(slider.value())) vbox=QtGui.QVBoxLayout() vbox.addWidget(disp) vbox.addWidget(slider) w.setLayout(vbox) w.show() sys.exit(app.exec_()) GPIO.cleanup() |
実行結果
動画は撮っていないので、載せられませんが、プログラムを実行すると、下記の画像のような
ウィンドウが表示されます。下のスライダーを動かすと、
-90~90度の範囲でモータが動きます。
今回地味にハマった点は、スライダーの動きを検出する関数にどうやって数値を渡すか、です。
lambdaを使ったことは無かったですが、色々とググって試してみると上手くいきました。
-
前の記事
GPU版TensorFlowをWindowsにインストール 2017.07.24
-
次の記事
プログラミング不要のNeural Network Consoleを試す 2017.10.29