Simulink OnlineからRaspberry PiのGPIOにWriteして動かす
前回はSimulink OnlineからRaspberry Piに接続したサーボモーターを動かしてみた。今回は、Simulink OnlineからラズパイをPWM制御してみる。具体的には、入力する方形波の周波数によって音が変わるパッシブザーをラズパイに接続して、パッシブブザーへの入力する方形波をPWM制御で変えて遊んでみる。
PWM制御については、MathWorks社の以下のページを参照して進める。
https://jp.mathworks.com/help/supportpkg/raspberrypi/ref/pwm.html
ちなみにパッシブブザーは以下のキットのものを使っている。
実行環境
Raspberry Pi 4 Model B
Raspberry Pi OS (Buster)
MATLAB online (MATLAB R2022a)
Simulink online
ラズベリーパイに接続する回路
回路はブレッドボードに組んでラズパイと接続するが、回路図&ブレッドボード上の接続は以下の記事で書いたものをそのまま流用しているので、以下を参照。
回路図だけ再掲しておく。今回はGPIO19ピンをPWM制御する。
実際に接続したのが以下の写真。
Simulink Onlineから動かす
次に、Simulink Onlineでモデルを作っていく。まずは前回同様にMATLAB Onlineを開いて
open_system('raspberrypi_gettingstarted')
を実行して、raspberrypi_gettingstartedを開く。今回はこれを「raspberrypi_pwm」という名前で保存して改造していく。まず、ConvertとLEDブロックは今回使わないので削除して、ライブラリーブラウザーから「pwm」とかで検索して、Raspberry Pi用のPWMブロックをドラッグ&ドロップして、Pulse Generatorと接続する。今回はGPIO19ピンを使うので、Pinは19にして、周波数は500Hzにした。
つぎにPulse Generatorをダブルクリックして、ラズパイに与える信号を変える。PWMブロックの入力は0~1の正のスカラー値で、値によってPWM信号のDuty比が変わるようになっている。今回はPulse Generatorから出す信号を0.5にして、Duty比50%で動かしてみることにした。ずっと鳴りっぱなしだとちょっとうるさいので、2.5秒ごとに振幅0.5の信号を出すようにしている。
これで準備完了。あとはいつも通り「IOを使って実行」から実行してみる。以下が実行した動画。PWM制御によって音が変わる様子を確認するため、動画の前半は上で書いたようにPWMブロックの設定を500Hzにした様子、後半はPWMブロックの設定を1kHzにした様子を撮影している。音を聞くと、周波数が高い方が高い音が出ていることがわかる。
本当はハンディのオシロスコープでPWM制御の波形も見てみようと思っていたのだが、充電が切れていたので面倒くさくなってやめた…笑
ひとまずSimulink OnlineからPWM制御してみるという目的は達成できた。
参考文献
この本のMATLAB/Simulink 6か月ライセンスを使ってやってます↓
Interface 2022年 9月号
MATLAB/Simulink記事まとめ
MATLABとSimulinkの記事は以下にまとめてます。