Raspberry Pi Mouseでサーボモータ(SG90)を動かす
Raspberry Pi Mouse上でのGPIOの配線
SG90はラズパイ上のGPIOポートを用いて制御しますが,ラズパイマウスではそのポートは覆い隠されてしまいます。
しかし,外のデバイスを繋げないかというとそうでもなく,以下の写真の箇所に接続可能なポイントがあります。
ここに書かれている英字は以下のGPIO番号(ピン番号ではない)と対応しています。
- SDA → GPIO2
- SCL → GPIO3
- TXD → GPIO14
- RXD → GPIO15
従って,先程の写真のようにオスのピンヘッダをはんだ付けすれば外部出力用として使えます。
ラズベリーパイでSG90を制御する
SG90とは安価に手に入るお手軽なサーボモータです。 可動域は180degでトルクは1.8kgfcm出ます。これは見かけよりはパワーが有ると思って良いです。
- 出版社/メーカー: 梅本合同会社
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
VCCとGNDに加えて制御用の信号が1つの計3つの信号線が必要です。信号はduty比を変えた矩形波を入力しますが詳しい説明に関してはこちらのサイトがわかりやすいと思います。
私はSDA,すなわちGPIO ポート2を信号線用に使うことにしました。
- 以下補足情報
本来求められるPWM信号は4.8VくらいでGPIOは3.3Vしか出ないのですが,一応直挿しでも動きはします。ただ,時々ちょっと振動的な挙動を示すので精度が必要ならちゃんとやるべきかも(サンプル数1)
SG90用コントローラ クラス
初期化などの処理をまとめたかったのでクラスで実装しました。 最新版はここで管理しますが,現在は以下のような感じに書いています。
大まかな挙動は
- ポート番号を渡して初期化
- 角度をdegreeで渡して制御
- stop()関数でサーボ状態から抜ける
となっています。
import RPi.GPIO as GPIO class SG90servo(): def __init__(self,motorport=2): self.port = motorport GPIO.setmode(GPIO.BCM) GPIO.setup(self.port, GPIO.OUT) self.servo = GPIO.PWM(self.port, 50) self.servo.start(0.0) # set duty cicle to 0-100 self.minlim = -90 self.maxlim = 90 def servo_deg(self,deg): if deg > self.maxlim: print("Exceed max degree!") return elif deg < self.minlim: print("Exceed min degree!") return cycle = 7.25+4.75*deg/90.0 self.servo.ChangeDutyCycle(cycle) def stop(self): self.servo.start(0.0)
宣伝枠
ラズパイマウス,ちょっと高いですが手軽に勉強できるので教育的にはいいのかなと思います。
- 出版社/メーカー: 株式会社アールティ
- メディア:
- この商品を含むブログを見る
- 作者: 上田隆一
- 出版社/メーカー: 日経BP社
- 発売日: 2017/03/30
- メディア: 単行本
- この商品を含むブログ (1件) を見る