DRV2605Lのサンプルコードを動作させる

触覚/振動ドライバのDRV2605Lを使ってみる。
現状、日本語の情報が公式ドキュメント以外なく、まだあまり使われていないのかもしれない。

DRV2605Lのブレークアウト基板がAdafruitとSparkFunから出ているが、
私はAdafruitのものを用いている。

f:id:yusuke_ujitoko:20190817142329j:plain (左手前がDRV2605L。奥に見えるのがHaptuator Mark Ⅱ)

ArduinoとDRV2605Lをつないでいく。

  • Arduino電源(3-5V)をDRV2605LのVIN
  • ArduinoGNDをDRV2605LのGND
  • ArduinoSCLをDRV2605LのSCL
  • ArduinoSDAをDRV2605LのSDA

アクチュエータとDRV2605Lもプラスマイナス間違えずにつなぐ。
アクチュエータはERMとLRAに対応している。

あとはgithubからArduino用のライブラリを落として、 exampleを動かすだけ。
Force ReactorやHaptuator MarkⅡは動くのを確認した。

Anaconda環境にMATLABエンジンをインストールする

先人たちのブログを見てもなかなかうまくいかなかったのでメモ。

Mathworkspython用のmatlab APIを提供している。
これを使えば、pythonからmatlabの機能を呼び出せるようになる。

  • 環境
    • Windows10
    • MATLAB R2018b
    • Anaconda3

手順

まずいきなり使用可能なpythonバージョンに制約がある。
MATLAB R2018だとpython2.7, 3.5, 3.6しか使えないので、
condaでいずれかのバージョンでpython環境を整えておく。
このバージョンの指定はMATLABのバージョンに依存しているので注意。

MATLABのコマンドウィンドウでmatlabrootと打って、
MATLABのインストールフォルダを見つける。
私の場合は'C:\Program Files\MATLAB\R2018b'だった。
インストールしているMATLABのバージョンによって異なるはず。

次に、コマンドプロンプト(Anaconda prompt)を管理者権限で起動する。
管理者権限でないとインストールの時にうまくいかないので注意。

MATLABインストールディレクトリの中の以下のフォルダに移動し、
そこにあるpython.exeを削除し、
Anacondaのインストールフォルダを指定した上でsetup.pyを実行する。

cd "matlabroot\extern\engines\python"
rm python.exe
python setup.py install --prefix="<anacondaのインストールフォルダ>"

これでインストール完了。
使うときに<anacondaのインストールフォルダ>を環境変数に入れればOK.

import sys 
sys.path.append("<anacondaのインストールフォルダ>\\lib\\site-packages")
import matlab.engine
eng = matlab.engine.start_matlab()
tf = eng.isprime(37)
print(tf)

Sweep信号をpythonで扱う

ちょっと前にM系列信号を扱った.
M系列信号と同じくシステム同定に用いられるSweep信号を,
pythonで生成できるライブラリがあるので試しに生成してみる.

scipy.signal.chirpでは4種類の形状(linear, quadrantic, logarithmic, hyperbolic)を指定できる.

f:id:yusuke_ujitoko:20190721172439p:plain

SimulinkからArduinoの出力ピンを制御する

MATLAB/Simulink 2013aあたりからArduinoの入出力ピンを制御することができるらしい。
相変わらずの異常な拡張性を実現するMathworksすごい。

使い方としては、

  1. Arduino UNOをWindowsへ接続
  2. MATLABでアドオンインストール
  3. Simulinkモデル上でArduinoの制御モデル作成
    • ライブラリブラウザでSimulink Support Package for Arduino Hardwareの
      各種ライブラリブロックを探せる
  4. 実行

というステップを経ていく。

上記の3.のステップで配置できるライブラリブロックとしては以下のものが標準部品として用意されている。 f:id:yusuke_ujitoko:20190720212823p:plain

上記の4.のステップはSimulinkのシミュレーション中にArduinoも同期的に実行できるのかなと思ったが、そうではなくてSimulinkモデルからArduinoで実行できるコードを生成しそれを実行してくれるだけだった。

注意が必要なのは、MATLAB起動後にArduinoを再接続すると、 Simulink内でArduinoが認識なされなくなること。 そのときにはSimulinkの"モデルコンフィグレーションパラメータ"で"ハードウェア実行"タブのところでCOMポート等の再設定することで認識させられる。

一番単純なサンプルは以下のようなもので、 指定したデジタル出力ピンにパルスを出力することを確認した。

f:id:yusuke_ujitoko:20190720213633p:plain