この記事で行うこと
- ObnizとMATLABをつなげる。
- MATLABコードをSimulink側で呼び出して、SimulinkとObnizをつなげてみる。
注意点
- PCのファンがガンガン回ります。
- 非公式ライブラリを使用します。
- ソースコードの使用は自己責任で。
用意するもの
- Obniz Board(私はBasic Licenseを使ってるけども、LANで何とかするのならHobby Lite Licenseでもいいかな?)
- MATLAB R2019b (Home License)
- 使う人はSimulinkも導入
- ネットにつながるWifi環境(ポートがふさがれていないような優しい世界)
-
MatlabWebSocket
- 導入方法はOverviewのGithubを参照すること。本記事ではこのライブラリのインストール方法は割愛します。
使い方
公開しているソースコードをローカルに持ってくる。zipをダウンロードしても、cloneして手元に持ってきてもどちらでもOK。
https://github.com/henjin0/ObnizforMATLAB
matlabrcに追記してツールボックスみたいに使ってもいいのだけれども、個人的には一発ネタなプログラムと受け取っているのでMATLABで使用する現在のフォルダに一式を丸ごとコピーしてすぐ捨てられる使い方のほうがいいかも。
使い方としては、こんな感じ。
% とりあえずワークスペースを初期化しよう
clear
% ObnizのIDをコンストラクタに入れます。
ows = ObnizWS('XXXX-XXXX');
% Obnizと実際につなぎます。
ows = ows.connect();
% Obnizの液晶に文字を表示します。
ows = ows.displayChar('Hello, Obniz!',true);
% 2番のGPIOに5Vを出力します。
ows = ows.gpioOutput(2,true);
% 0番のGPIOをGndにします。
ows = ows.gpioOutput(0,false);
% pwmも可能。ちなみに複数のピンでpwmをする際には、
% pwmNumを0から5の範囲でユニークな値を入れる。
% その他パラメータは https://obniz.io/ja/doc/sdk/doc/websocket/pwm 参照
%ows = ows.pwm(pwmNum,outputPin,freq,pulse,groundPin);
% AD変換値を取得します。
ows = ows.adStream(1);
% AD変換値の取得を終了します。
%ows = ows.deinitAd(1);
% ObnizWSを終了します。
%ows = ows.close();
本ライブラリは中に入っているクラスを呼び出して、Websocket経由でObnizに様々な命令を投げていく。
また、A/D変換値に関しては取得した値をMATファイルに書き込んでいく感じで、欲しいタイミングでMATファイルへ
load関数を呼び出してMATLAB/Simulinkで使用できる形にする。ファンが唸りを上げるのは大体これのせい。
手前にあるやつがケースに入ったObnizで可変抵抗が刺さっております。この可変抵抗の値を変えると、
Obniz2MATLABが数ms刻みで書き込みにかけているMATファイルの値をSimulinkが読み込み、その結果を
scopeに反映している。
...とはいいつつも、ネットを介している分レイテンシは存在するため注意すること。
まとめ
- ObnizとMaTLAB/Simulinkをつなげてみた。
- ファンが回って怖い。
- MATLAB/Simulinkはいいぞ。