LoginSignup
2

More than 3 years have passed since last update.

posted at

updated at

obnizとMATLAB/Simulinkをつなげてみた(Websocket使用)

この記事で行うこと

  • 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で使用する現在のフォルダに一式を丸ごとコピーしてすぐ捨てられる使い方のほうがいいかも。

使い方としては、こんな感じ。

sample.m
% とりあえずワークスペースを初期化しよう 
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で使用できる形にする。ファンが唸りを上げるのは大体これのせい。

Simulink側から呼び出すとこんな感じ。
Simulink例.png

手前にあるやつがケースに入ったObnizで可変抵抗が刺さっております。この可変抵抗の値を変えると、
Obniz2MATLABが数ms刻みで書き込みにかけているMATファイルの値をSimulinkが読み込み、その結果を
scopeに反映している。
...とはいいつつも、ネットを介している分レイテンシは存在するため注意すること。

まとめ

  • ObnizとMaTLAB/Simulinkをつなげてみた。
  • ファンが回って怖い。
  • MATLAB/Simulinkはいいぞ。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2