【3】サーボモーターを制御
前回、DCモーターをモータードライバー経由でPWMを使用し
加速・減速を行いました。
今回はハンドルの操作に使用する
サーボモーター
DualSenseにはアナログトリガーがあるので
モーターの回転スピードを調整する制御まで進めます。
目次
- 【1】Raspberry pi の、GPIOをTypescriptから操作
- 【2】DCモーターをPWMで速度制御
- 【3】サーボモーターを制御
- 【4】DualSenseをブラウザに接続
- 【5】DualSenseの情報をRaspberryPiに飛ばす
- 【6】DualSenseのチャタリング?問題対応
- 【7-1】RaspberryPiから低遅延で映像を飛ばす
- 【7-2】RaspberryPiから低遅延で映像を飛ばす
- 【8】ThreeJSでVRもどきを作成
- 【9-1】iPhoneの加速度から頭の向きをVRに反映
- 【9-2】スマホVRゴーグル向けデザインに変える
- 【10】ラジコン本体の製作
- 【11】パワーアップとバッテリー問題の解決
サーボモーター
サーボを使った工作でおなじみのSG90を使用します。
RaspberryPiのGPIOに直接つなぐだけで使えるので
注意点も何も無く、挿してコードを動かすだけで使えます。
このサーボの仕様では、初期位置の0度に対して
-90度~+90度まで180度回転
piggpio経由では、Hz換算で500~2500の範囲に収まるそうで
直感的に分かりにくいこと、この上ないのと
初期位置からマイナス方向に回らないっぽい?
試験コード
使い方が根本的に違う、という可能性をハラミつつも
初期位置=500となっているようなので
ラジコンへの取り付け位置から、手探りで初期位置を調整し
位置 | PWM出力 |
---|---|
イニシャル | 850 |
左 | 550 |
右 | 1150 |
という割り振りを前提に
試験コードを書いた全容が下記になります。
const gpio = require('./gpio.service')
const MotorPorts = {
HANDLE: 17,
INITIAL_ANGLE: 850,
}
// PWM信号出力ポート追加
gpio.addPort({port: MotorPorts.HANDLE, mode: 'out'})
await gpio.initGpio()
// 初期位置にサーボを動かす。
gpio.searvoWrite(MotorPorts.HANDLE, MotorPorts.INITIAL_ANGLE)
const angle = [550, 1150]
let p = 0
// 1秒毎に、左・右の角度にサーボを動かす。
while (true) {
console.log(gpio.searvoWrite(MotorPorts.HANDLE, angle[p]))
p = (p === 0) ? 1 : 0
await new Promise((resolve) => setTimeout(resolve, 1000))
}
サーボ駆動試験
試験コードを動かすと、こんな感じでサーボモーターがかくかく動きます。
サーボモーターを動かすだけ、の場合こんな感じでかなり簡単に済みます。
誰でも簡単に使えるように
規格化、体系化されたありがたみを感じる部分です。
UZAYA
Uzayaでは、多分仕事を求めています。
何かの役に立ちそうでしたら、是非お知らせを。