Simulink OnlineからRaspberry Piに接続したサーボモーターを動かす
前回はSimulink OnlineでGPIO Read/Writeブロックをつかって、Raspberry PiのGPIOを制御してラズパイに接続したタクトスイッチ(ボタン)押したらブザーを鳴るようなシステムを作ってみた。
今回は、Servoブロックを使ってSimulink OnlineからRaspberry Piに接続したサーボモーターを動かしてみる。ちなみに使ったサーボモーターは以下のキットに入っていたSG90。おもちゃとかでよく使われるやつ。
サーボモーターの情報は以下を参照。
https://docs.sunfounder.com/projects/davinci-kit/ja/latest/1.3.2_servo.html
実行環境
Raspberry Pi 4 Model B
Raspberry Pi OS (Buster)
MATLAB online (MATLAB R2022a)
Simulink online
ラズベリーパイとサーボモーターの接続
今回はブレッドボードは使わず、サーボとラズパイを直繋ぎする。
キットのメーカーのwebサイトに記載通りに、サーボのVCCをラズパイの3.3Vピンに、サーボのGNDをラズパイのGNDピンに、サーボのSIGピンをGPIO18ピンに接続した。
※追記:SG90って5V駆動じゃなかったっけ?と思ったが、秋月で同じ型番のもののデータシートを見ると3.3V〜になっていた(模造品が大量にあるようなのでこのキットの部品の素性は不明だが)。ただ、ラズパイの3.3Vから引ける電流はかなり少ないので、サーボに負荷をつなげて動かすならVccはラズパイとは別の電源と繋げる必要あると思うので注意。
Simulink Onlineから動かす
GPIOのモデルをつくったときと同様に、まずMATLAB Onlineを開いて
open_system('raspberrypi_gettingstarted')
を実行して、raspberrypi_gettingstartedを開き、これを「raspberrypi_servo」という名前で保存して改造していく。
まずPulse Generator以外は削除したうえで、ライブラリブラウザーから「servo」で検索すると、Standard Servo Writeブロックが出てくるので、ドラッグ&ドロップする。これをPulse Generatorと接続して、Standard Servo Writeブロックをダブルクリックしてパラメーターを設定する。
今回はGPIO18を使うのでPinは18にする。また、今回つかったサーボのMinimum pulse durationは0.5msec、Maximum pulse durationは2.5msecなので、以下のように設定する。
また、Pulse Genearatorをダブルクリックして、サーボに与える信号を設定する。Standard Servo Writeブロックには角度0~180度を入力する必要がある。今回は、以下のように設定して90度と0度を1秒ごとに繰り返すような信号でサーボを動かしてみる。
あとはいつも通りConnected IOを使って実行する。以下が実際に実行した結果。1秒ごとにモーターが90度動いて、また0度に戻っていることがわかる。
Simulink Onlineからサーボモーターを動かすという目的は達成できた。次回はまた違うブロックを試してみよう。
参考文献
この本のMATLAB/Simulink 6か月ライセンスを使ってやってます↓
Interface 2022年 9月号
MATLAB/Simulink記事まとめ
MATLABとSimulinkの記事は以下にまとめてます。