【補足説明】Simulink Support Package for Arduino Hardware と RASPLib をインストールして MinSegShield を動かしてみる

# <font color="#33CC33">1. はじめに</font>

　本記事では，[MinSeg.com](https://minseg.com/) が販売している [<b>MinSegShield M2V5 Dual Axis Balancing Kit</b>](https://minseg.com/products/minsegshield-m2v5-dual-axis-balance-minseg-kit-new) に含まれるマイコンボード（<b>Arduino Mega 2560 互換ボード</b>）とシールド（<b>MinSegShield M2V5</b>）の使用方法を説明します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/284bfb57-23dd-239b-669a-22f1693ae4d3.png)

https://youtu.be/S9cCmVLb3j8

https://youtu.be/l4cLZnz4gJw

　そのために，まず，

* [<b>Simulink Support Package for Arduino Hardware</b>](https://jp.mathworks.com/matlabcentral/fileexchange/40312)
* [<b>Rensselaer Arduino Support Package Library (RASPLib)</b>](https://jp.mathworks.com/matlabcentral/fileexchange/62702)

のインストール方法と，初期設定について説明します．ついで，実際に使用するための手順について説明します．

　なお，配布する Simulink モデルは以下のとおりです．

> <b>【配布する Simulink モデル】</b>
> * <b>互換ボード <font color="#0070C0">"MinMega"</font>（新型 MinSegShield M2V5 Dual Axis Balancing Kit に包含）用</b>
>   * [R2018a](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2022a_BaudRate_921600_com6.zip)
>   * [R2020a](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2020a_BaudRate_921600_com6.zip)
>   * [R2020b](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2020b_BaudRate_921600_com6.zip)
>   * [R2021a](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2021a_BaudRate_921600_com6.zip)
>   * [R2021b](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2021b_BaudRate_921600_com6.zip)
>   * [R2022a](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2022a_BaudRate_921600_com6.zip)
> 1. <b>COM ポートを 6</b> に設定しています．必要に応じて設定を変更してください．<b>Automatically</b> でも動作するはずです．
> 1. 新型の MinSegShield M2V5 Dual Axis Balancing Kit に含まれる Arduino Mega 2560 互換ボード <font color="#0070C0"><b>"MinMega"</b></font> ([MinSeg.com 社](https://minseg.com/)) を想定しています．この場合，Simulink の <b>External mode での BaudRate は標準の値 921600 のまま</b>であり，変更する必要はありません．
> 
> * <b>互換ボード <font color="#0070C0">"RobotDyn Mega"</font>（旧型 MinSegShield M2V5 Dual Axis Balancing Kit に包含）用</b>
>   * [R2018a](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2018a_BaudRate_115200_com3.zip)
>   * [R2020a](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2020a_BaudRate_115200_com3.zip)
>   * [R2020b](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2020b_BaudRate_115200_com3.zip)
>   * [R2021a](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2021a_BaudRate_115200_com3.zip)
>   * [R2021b](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2021b_BaudRate_115200_com3.zip)
>   * [R2022a](https://github.com/Prof-Carter/example_MinSegShield_M2V5/blob/main/R2022a_BaudRate_115200_com3.zip)
> 1. <b>COM ポートを 3</b> に設定しています．必要に応じて設定を変更してください．
> 1. 旧型の MinSegShield M2V5 Dual Axis Balancing Kit に含まれる Arduino Mega 2560 互換ボード <font color="#0070C0"><b>"RobotDyn Mega"</b></font> ([RobotDyn 社](https://robotdyn.com/)) を想定しています．この場合，後述のように，Simulink の <b>External mode での BaudRate の値を 115200 に変更</b>する必要があります．


# <font color="#33CC33">2. 動作環境</font>

　私が試した環境は以下のとおりです．
* PC: HP ENVY x360 13-ay1000
    * Microsoft Windows 11 Home Version 10.0 (Build 22000)
    * AMD Ryzen 7 5800U with Radeon Graphics 1.90 GHz
    * RAM: 16.0 GB
* MATLAB R2018a, R2020a, R2020b, R2021a, R2021b, R2022a
    * Simulink
    * Control System Toolbox
    * Symbolic Math Toolbox
    * ほかにもいくつかのツールボックスが入っていますが，今回は関係ないので省略
* Simulink Support Package for Arduino Hardware
    * R2018a: Ver.18.1.3
    * R2020a: Ver.20.1.5
    * R2020b: Ver.20.2.4
    * R2021a: Ver.21.1.4
    * R2021b: Ver.21.2.2
    * R2022a: Ver.21.1.2
* Rensselaer Arduino Support Package Library (RASPLib) Ver.2.13 (2021/12/31)

>　Simulink Support Package for Arduino Hardware は 2022/06/11 時点での各リリースの最新バージョンです．

　MATLAB のリリース（バージョン）による操作の違いは以下のとおりです．

 <table border="1">
    <tr>
      <th>リリース</th>
      <th>エクスターナル実行</th>
      <th>スタンドアロン実行</th>
      <th><b><font color="#E84746">注意事項</font></b></th>
    </tr>
    <tr>
      <td>R2015aSP1</td>
      <td rowspan="2">「エクスターナル」を選択して「実行」ボタンを押す</d>
      <td rowspan="2">「ハードウェアに展開」を選択</d>
      <td>　　</d>
    </tr>
    <tr>
      <td>R2018a</td>
      <td>　　</d>
    </tr>
    <!-- *************************************** -->
    <tr>
      <td>R2020a</td>
      <td rowspan="5">「ハードウェア」のタグから「監視および調整」を選択<br> (R2019b から）</d>
      <td rowspan="5">「ハードウェア」のタグから「ビルド，配布および開始」を選択 <br>(R2019b から）</d>
      <td>　　</d>
    </tr>
    <tr>
      <td>R2020b</td>
      <td>　　</d>
    </tr>
    <tr>
      <td>R2021a</td>
      <td rowspan="2"><b><font color="#E84746">付録 A.1</font></b></d>
    </tr>
    <tr>
      <td>R2021b</td>
    </tr>
    <tr>
      <td>R2022a</td>
      <td><b><font color="#E84746">付録 A.2</font></b></d>
    </tr>
  </table>

* <b>エクスターナル実行</b>：<br>Simulink モデルをビルドしたプログラムが Arduino に書き込まれた後，USB ケーブルを介してパソコンと Arduino との間で信号の送受信を行いながら実行されます．このモードでは，信号の観測，データの保存，Manual Switch での操作など，Simulink 側で様々な操作ができます．また，「コンフィギュレーションパラメータ」の「終了時間」で実行する時間を設定できます（ずっと実行する場合は inf に設定）．

* <b>スタンドアロン実行</b>：<br>Simulink モデルをビルドしたプログラムが Arduino に書き込まれると，Arduino がスタンドアロンで動作します．プログラムを書き込んだ後，パソコンとの接続は不要です（意味をなしません）．電源が ON のとき，プログラムの実行が続きます（「終了時間」は設定できない）．プログラムを再実行する場合は Arduino 側のリセットボタンを押します．

# <font color="#33CC33">3. Simulink Support Package for Arduino Hardware のインストール</font>

　[MathWorks 社](https://jp.mathworks.com/)さんから提供されている，Simulink を利用して Arduino を動かすためのパッケージ

* <b><font color="#0CA274">Simulink Support Package for Arduino Hardware</font></b>

をインストールしてみましょう．このパッケージは，ありがたいことに，<b><font color="#0070C0">無償</font></b>です．ここでは，R2021b を例に，インストール手順を説明します（MATLAB のリリース（バージョン）によって少し異なりますが…）．

　MATLAB のメニューで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/15a9ad9b-4687-a664-b4b6-7e6ab6d51610.png)
のように「<b>ホーム / アドオン / ハードウェアサポートパッケージの入手」</b>を選択し，<b>「アドオン エクスプローラー」</b>を起動し，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/fd8615c0-b67f-d701-fe6a-887a1f876a42.png)
のように，<b><font color="#0CA274">Simulink Support Package for Arduino Hardware</font></b> を選択します．
　つぎに，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/8f1c4b87-3309-bb0e-e19c-4399a2d8ca39.png)
のように，<b>「インストール」</b>を選択すると，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/98723b54-6445-78dc-2803-a7643a164fbb.png)
のように，<b><font color="#E84746">MathWorks アカウント</font></b>に登録した<b>メールアドレス</b>の入力が要求されます．もし，MathWorks アカウントがない場合は，ここで，アカウントを作成してください．
　<b>メールアドレスを入力</b>して<b>「次へ」</b>を選択すると，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/b6847462-d088-bde9-b385-458ea8a0cdec.png)
のように，MathWorks アカウントの<b>パスワード</b>の入力が要求されますので，パスワードを入力し，<b>「サインイン」</b>してください．
　その後，ライセンスの注意項目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/bd96f310-81fb-cb0a-cd42-45f0dc69b4f5.png)
を確認して<b>「承諾する」</b>を選択し，サードパーティのソフトウェア
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/086e49a6-e049-bb26-2c11-035f98b3a2da.png)
の確認をし，<b>「次へ」</b>を選択します．
　以上の操作を行うと，インストール作業が実行されます．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/1bbfa27b-077e-e721-e585-61e9f96834bf.png)
インストールが完了した後，<b>「今すぐセットアップ」</b>か<b>「後でセットアップ」</b>を選択します．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/70e4e36d-82d7-ab11-af13-a675ae9b4310.png)
　<b>「今すぐセットアップ」</b>を選択した場合，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/1dddcbef-8456-05f7-e581-e0e72eaafe97.png)
のように，MATLAB のバージョンによってはサードパーティのソフトウェアの追加が要求されます．このような場合，<b>「Install」</b>を選択してください．そして，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/19fb0a22-0f28-7a30-c2e4-bce073ab1d44.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/ad93770f-ad8c-d970-2ba6-a5254c25ed25.png)
のように，インストールが終了したことを確認してから<b>「次へ」</b>を選択します．

　つぎに，<b>「ハードウェア セットアップ」</b>の作業
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/88405f89-6caa-7fa8-38eb-b24c31e0c336.png)
に移行します．<b>Arduino MEGA 2560 互換ボード</b> とパソコン（USB Type-A のポート）を <b>USB ケーブルで繋ぎ</b>，<b>「次へ」</b>を選択します．

　この後の作業は，<b><font color="#0070C0">Arduino Mega 2560 互換ボードの種類によって異なります</font></b>．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/3d42f60b-0f1f-37c6-b0eb-168f109e3b32.png)


---
#### <font color="#0070C0">Arduino Mega 2560 互換ボード "MinMega" の場合</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/e4dab054-980a-930c-1966-e3146a57d444.png)

　最近の <b>MinSegShield M2V5 Dual Axis Balancing Kit</b> に含まれている Arduino Mega 2560 互換ボードは <font color="#0070C0"><b>"MinMega"</b></font> (MinSeg.com) です．

　私の環境下では，USB ケーブルでパソコンに接続すると，<b>「デバイスマネージャー」</b>の<b>「ポート（COM と LPT）」</b>では
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/adf2d193-e782-789f-f24f-bf6630437363.png)
のように，<b>「コントロールパネル」</b>の<b>「デバイスとプリンター」</b>では
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/f0dc4551-1cd0-e08e-b236-bbb53615bbf2.png)
のように，Arduino Mega 2560 として COM6 に接続されていることが認識できました（一般には，COM ポートの番号は 6 とは限りません）．

　<b>「Connect an Arduino Board」</b>で
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/6eb4df19-dd58-6b9d-8a11-d7e18af724c8.png)
のように<b>「次へ」</b>を選択します．すでに，COM6 に接続されている Arduino Mega 2560 として認識されているので，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/585a4a33-e49b-031b-4615-cd08753c1503.png)
のように<b>「Board」</b>が<b>「Arduino Mega 2560 (COM6)」</b>と表示されますので，<b>「次へ」</b>を選択します．そして，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/e08c2a3b-892d-2269-db7e-d4ccd1d7c0f5.png)
のように，<b>「Yes」</b>と<b>「次へ」</b>を選択してセットアップの検証をすることにします．最後に，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/0ab1bf9f-43cf-5e1a-10ba-b75b5320cdc1.png)
のように，<b>「Test Connection」</b>を選択します．ビルドとダウンロードのテストが実行され，正常に動作をしている場合，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/d0617165-7387-c2b3-1fca-e643bd0569c3.png)
のように緑色のチェックが表示され，<b><font color="#E84746">Arduino MEGA 2560 互換ボードのオレンジ色 LED がチカチカと点滅</font></b>します（以下の動画を参照）ので，確認後，<b>「次へ」</b>を選択してくだい．

https://youtu.be/y19qGpeYFvw

最後に，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/c472ccaf-6f3f-3c61-e6c9-ae108af453c0.png)
のように，<b>「終了」</b>を選択してください．


---
#### <font color="#0070C0">Arduino Mega 2560 互換ボード "RobotDyn Mega" の場合</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/a891e0d6-a679-ea9e-f3d7-d25742c8b8b5.png)

　以前の <b>MinSegShield M2V5 Dual Axis Balancing Kit</b> に含まれていた Arduino Mega 2560 互換ボードは <font color="#0070C0"><b>"RobotDyn Mega"</b></font> (RobotDyn) です．

　すでに，このパソコンで Arduino を使用したことがある場合，<b>「デバイスマネージャー」</b>の<b>「ポート（COM と LPT）」</b>で
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/a6cf2ed8-cdf6-b94b-a04e-225c2111f844.png)
あるいは，<b>「コントロールパネル」</b>の<b>「デバイスとプリンター」</b>で
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/3975d23e-e498-e36c-0041-b7a8d911d6ae.png)
のように，Arduino が COM3 に接続されていることが確認できます（COM ポートの番号は 3 とは限りません）．このような場合，ドライバがすでにインストールされているので，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/ea7912c6-d533-749c-1ffe-404dbc73a40d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/09710e01-f3c9-e9f4-8772-cb0cf63bf907.png)
のように，<b>「Skip driver installatuin」</b>にチェックを入れ，「次へ」を選択してください．もし，ドライバのインストールをしたい場合は，<b>「Install Drivers」</b>を選択して進んでください．

　その結果，確かに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/bf083043-28c3-8cdc-0c13-d1576b680023.png)
のように，「デバイスマネージャー」で確認した COM ポート (この例では COM3) に接続されていることがわかります．つぎに，<b>「Supported boards」</b>のなかから
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/9a0d124f-8a9f-2805-4675-4f1c9cd41891.png)
のように<b>「Mega 2560」</b>を選択し，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/a7166b94-84a8-87d8-9dec-918873b46d0e.png)
で<b>「次へ」</b>を選択してください．そして，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/faf8dfab-e28d-12f4-badd-25fd939bf240.png)
のように，<b>「Test Connection」</b>を選択すると，ビルドとダウンロードのテストが実行されます．正常に動作をしている場合，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/f1392630-9df4-1ce7-e82f-bc9ea306f7b8.png)
のように緑色のチェックが表示され，<b><font color="#E84746">Arduino MEGA 2560 互換ボードの青色 LED がチカチカと点滅</font></b>します（以下の動画を参照）ので，確認後，<b>「次へ」</b>を選択してくだい．

https://youtu.be/XJp--WgT9s8

最後に，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/c472ccaf-6f3f-3c61-e6c9-ae108af453c0.png)
のように，<b>「終了」</b>を選択してください．


# <font color="#33CC33">4. Rensselaer Arduino Support Package Library (RASPLib) のインストール</font>

## <font color="#33CC33">4.1　RASPLib ってどんなことができるの？</font>

　MinSeg.com は，自社のマイコンボード MinSegMega やマイコンシールド MinSegShield を使用するための Simulink ライブラリ

* <b><font color="#E84746">Rensselaer Arduino Support Package Library (RASPLib)</font></b>

を<b><font color="#0070C0">無償</font></b>で提供しています．<b><font color="#0070C0">すばらしい！！</font></b>．<b><font color="#E84746">RASPLib</font></b> は <b><font color="#E84746">Simulink Support Package for Arduino Hardware</font></b> がインストールされている環境下で使用できます．

　<b><font color="#0070C0">Simulink モデルを作成する</font></b>だけで，以下のことを簡単に行うことができます．

* RASPLib で提供される Simulink ブロックで <b><font color="#0070C0">DC モータを動かす</font></b>ことができる．
* RASPLib で提供される Simulink ブロックで<b><font color="#0070C0">エンコーダのパルス信号をカウントする</font></b>ことができる（4 逓倍）．
* RASPLib で提供される Simulink ブロックで<b><font color="#0070C0">ジャイロ / 加速度 / 方位センサのアナログ信号を読み取る</font></b>ことができる．
* エクスターナル実行では，Simulink ブロック "Scope" でセンサ信号等を<b><font color="#0070C0">リアルタイムで観測する</font></b>ことができる．
* エクスターナル実行では，Simulink ブロック "To Workspace" でセンサ信号等の<b><font color="#0070C0">データを保存する</font></b>ことができる（オフラインでのデータ処理）．

ちなみに，PWM 出力，エンコーダやジャイロ / 加速度センサの信号入力くらいの操作であれば，<b><font color="#0070C0">サンプリング周期は 10 [ms] でも大丈夫</font></b>です（もう少し短く設定しても大丈夫そうですが）．ただ，Simulink モデルのビルドに時間を要するのが玉に瑕（きず）です．これは，Simulink Support Package 側の問題ですが… 

> 【注意】
> 方位センサを利用する場合は，サンプリング周期をもっと大きくする必要があります．

　具体的な使用方法は <b>6 章</b>で説明します．


## <font color="#33CC33">4.2　インストール手順</font>

### <font color="#33CC33">4.2.1　ダウンロード</font>

　RASPLib の入手先は，[MathWorks 社](https://jp.mathworks.com/)さんの [File Exchange](https://www.mathworks.com/matlabcentral/fileexchange/) にある

* [Rensselaer Arduino Support Package Library (RASPLib)](https://jp.mathworks.com/matlabcentral/fileexchange/62702/)

です．2022/06/11 時点での最新バージョンは Ver.2.13（2021/12/31 リリース）です．作者は，Joshua Hurst さんです．R2015a から R2021a までが動作保証されていますが，R2021b, R2022a でも動作します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/d0ceea12-0ca3-b73d-8ac6-203d99c38fc4.png)

> [Joshua Hurst](https://jp.mathworks.com/matlabcentral/profile/authors/1240615) さんは Raspberry Pi でエンコーダやジャイロ / 加速度センサを利用するための Simulunk ブロックも公開しています．興味がある人は利用してみてください．

　File Exchange からダウンロードすると，<b>github_repo.zip</b> という名前の zip ファイルとして保存されます．これを適当なフォルダに移動して，解凍してください．

### <font color="#33CC33">4.2.2　パスの設定（管理者権限を持っている場合）</font>

　<b>github_repo.zip</b> を解凍すると，「github_repo」というフォルダが生成されますが，私の場合，<b>フォルダ名を「github_repo」から「RASPlib_2.13」に変更</b>し（Ver. 2.13 なので），

* C:&yen;Programs&yen;MATLAB_toolbox&yen;<b><font color="#0070C0">R2021b</font></b>&yen;RASPlib_2.13
* C:&yen;Programs&yen;MATLAB_toolbox&yen;<b><font color="#0070C0">R2018a</font></b>&yen;RASPlib_2.13

のように MATLAB のバージョンごとにフォルダを配置しています．

　解凍したフォルダ（以下，<b>「RASPlib_2.13」</b>とします）に含まれる<b>「RASPlib」</b>にパスを通します．

　まず，設定するユーザが<b><font color="#E84746">管理者権限を持っている場合</font></b>について，説明します．

> 　個人で MATLAB ライセンスを所有している場合は，個人ユーザ自身が管理者権限を持っているはずです．学校や職場のパソコンにインストールされている MATLAB は，管理者がいるはずですので，可能なら，以下のパス設定を管理者に依頼してみてください．無理な場合は，後述の方法で，管理者権限を持たないユーザがパスの設定することができます．

　以下，<b><font color="#0070C0">MATLAB R2021b</font></b> が

* C:&yen;Programs&yen;MATLAB&yen;<b><font color="#0070C0">R2021b</font></b>

にインストールされているとします．このとき，

* C:&yen;Programs&yen;MATLAB&yen;<b><font color="#0070C0">R2021b</font></b>&yen;toolbox&yen;local

にある M ファイル "<b><font color="#E84746">matlabrc.m</font></b>" を開いてください．そして，M ファイル "<b><font color="#E84746">matlabrc.m</font></b>" の最下部に
```matlab:M ファイル "matlabrc.m" の最下部に追加

% --- RASPlib Ver.2.13 ---------
addpath(genpath('C:\Programs\MATLAB_toolbox\R2021b\RASPlib_Ver.2.13\RASPlib'))
```
を追加して，上書き保存してください．

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/af26ec96-09bc-e5df-5c69-d094a8284e29.png)|
|:-:|
|M ファイル "matlabrc.m" の最下部に追加|

　最後に，MATLAB を再起動してください．そして，<b>「Simulink ライブラリ ブラウザ」</b>を起動すると，

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/17e38842-8a10-7281-bb6f-f0aec7764140.png)

のように，<b><font color="#E84746">Rensselaer Arduino Support Package (RASPLib)</font></b> が表示されているはずですので，確認してください．また，すでにインストール済みである <b><font color="#0CA274">Simulink Support Package for Arduino Hardware</font></b> も表示されているはずです．

　ちなみに，パスを確認すると，以下のようになります．
```matlab:
>> path

		MATLABPATH

	C:\Programs\MATLAB_toolbox\R2021b\RASPlib_Ver.2.13\RASPlib
	C:\Programs\MATLAB_toolbox\R2021b\RASPlib_Ver.2.13\RASPlib\BalanceApp
	C:\Programs\MATLAB_toolbox\R2021b\RASPlib_Ver.2.13\RASPlib\blocks
	C:\Programs\MATLAB_toolbox\R2021b\RASPlib_Ver.2.13\RASPlib\examples
	C:\Programs\MATLAB_toolbox\R2021b\RASPlib_Ver.2.13\RASPlib\examples\archive
	C:\Programs\MATLAB_toolbox\R2021b\RASPlib_Ver.2.13\RASPlib\include
	C:\Programs\MATLAB_toolbox\R2021b\RASPlib_Ver.2.13\RASPlib\src
	＜以下，省略＞
```


### <font color="#33CC33">4.2.3　パスの設定（管理者権限を持っていない場合）</font>

　以下に該当する場合は，別の方法でパスを設定します（<b>github_repo.zip</b> に含まれる "Install Instructions.txt" や "README.txt" に記載されている方法です）．

* 管理者権限を持っていない
* 管理者に M ファイル "<b><font color="#E84746">matlabrc.m</font></b>" の修正を依頼することができない

　まず，MATLAB を起動したときの<b>初期作業フォルダ</b>を，たとえば，

* <b><font color="#E84746">C:&yen;Users&yen;<font color="#0070C0">carter</font>&yen;Documents&yen;MATLAB&yen;<font color="#0070C0">R2021b</font></font></b>

に設定します（フォルダはここである必要はありませんが…）．

> 「C ドライブ」
> 　$\Longrightarrow$　「ユーザー」
> 　$\Longrightarrow$　「<b><font color="#0070C0">carter</font></b>」
> 　$\Longrightarrow$　「ドキュメント」
> 　$\Longrightarrow$　「MATLAB」
> 　$\Longrightarrow$　「<b><font color="#0070C0">R2021b</font></b>」

このフォルダがない場合は，あらかじめ，作成しておいてください．ここで，

* "<b><font color="#0070C0">carter</font></b>" の部分には<b><font color="#0070C0">ユーザ名</font></b>を記述する
* "<b><font color="#0070C0">R2021b</font></b>" の部分には <b><font color="#0070C0">MATLAB のバージョン (R20***)</font></b> を記述する

に注意して，適宜，読み替えてください．

　つぎに，<b>github_repo.zip</b> に含まれる

* M ファイル "<b><font color="#E84746">startup.m</font></b>"
* フォルダ "<b><font color="#E84746">RASPlib</font></b>" 

を，<b><font color="#E84746">C:&yen;Users&yen;<font color="#0070C0">carter</font>&yen;Documents&yen;MATLAB&yen;<font color="#0070C0">R2021b</font></font></b> にコピーしておきます．

　そして，MATLAB の基本設定で「一般」を選択し，<b>初期作業フォルダ</b>を

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/b79fbeab-1e27-fe52-0ae2-c3b48350dc5b.png)

のように設定し，<b>「OK」</b>を選択してください．

　最後に，MATLAB を再起動してください．そして，<b>「Simulink ライブラリ ブラウザ」</b>を起動すると，<b><font color="#E84746">Rensselaer Arduino Support Package (RASPLib)</font></b> が表示されているはずです．

　ちなみに，<b>"<font color="#E84746">startup.m</font>" という名前の M ファイルを初期作業フォルダに置いておくと，MATLAB の起動時にこの M ファイルが自動的に実行</b>されます．M ファイル "<b><font color="#E84746">startup.m</font></b>" の内容は

```matlab:M ファイル "startup.m"
addpath([fileparts(mfilename('fullpath')) '\RASPlib'],...
		[fileparts(mfilename('fullpath')) '\RASPlib\src'],...
		[fileparts(mfilename('fullpath')) '\RASPlib\include'],...
		[fileparts(mfilename('fullpath')) '\RASPlib\examples'],...
		[fileparts(mfilename('fullpath')) '\RASPlib\blocks'])
   
%cd CompileFolder % move to CompileFolder on start (optional)
```
のように記述されており，<b>初期作業フォルダ</b> にコピーしたフォルダ "<b><font color="#E84746">RASPlib</font></b>" に含まれるすべてのファイルにパスを通すという命令になっています．したがって，MATLAB 起動後にパスを確認すると，

```matlab:
>> path

		MATLABPATH

	C:\Users\carter\Documents\MATLAB\R2021b\RASPlib
	C:\Users\carter\Documents\MATLAB\R2021b\RASPlib\src
	C:\Users\carter\Documents\MATLAB\R2021b\RASPlib\include
	C:\Users\carter\Documents\MATLAB\R2021b\RASPlib\examples
	C:\Users\carter\Documents\MATLAB\R2021b\RASPlib\blocks
	＜以下，省略＞
```

となっています．

# <font color="#33CC33">5. Simulink モデルの初期設定</font>

　私が試した MATLAB のバージョン（リリース）は R2018a, R2020a, R2020b, R2021a, R2021b, R2022a です．

## <font color="#33CC33">5.1　<font color="#0070C0">R2021b</font> / <font color="#0070C0">R2021a</font> / <font color="#0070C0">R2020b</font> / <font color="#0070C0">R2020a</font></font>

### <font color="#33CC33">5.1.1　Arduino Mega 2560 互換ボード <font color="#0070C0">"MinMega"</font> の場合</font>

　以下の動画を参考に，Simulink モデルの初期設定を行ってください．

https://www.youtube.com/watch?v=YQJX2pYgE8k


### <font color="#33CC33">5.1.2　Arduino Mega 2560 互換ボード <font color="#0070C0">"RobotDyn Mega"</font> の場合</font>

　以下の動画を参考に，Simulink モデルの初期設定を行ってください．

https://www.youtube.com/watch?v=pYdxDLM_2Aw

　動画の後半部分では，MATLAB のコマンドウィドウで

```matlab:
>> codertarget.arduinobase.registry.setBaudRate(gcs)
```

と入力して，Arduino Mega 2560 互換ボード用の設定をした Simulink モデルの <b>シリアル通信によるエクスターナル実行のボーレート</b>の値を確認しています．その結果，

```matlab:
Baud rate is 921600
```

と出力され，デフォルトの設定値が 921600 であることが確認できます．ちなみに，ボーレート (Baud Rate) とは，「デジタルデータを 1 秒間に何回だけ変復調できるかを示す値」だそうです．しかし，今回，使用した <b>Arduino Mega 2560 互換ボードの場合，デフォルトの設定値 921600 のままでエクスターナル実行すると，</b>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/160042e6-ca52-302a-5c81-c6be99b48414.png)

のように<b>エラーが表示され，実行できません</b>でした．そこで，

```matlab:
>> codertarget.arduinobase.registry.setBaudRate(gcs,115200) 
Baud rate has been set to 115200
```

と入力して，<b>シリアル通信によるエクスターナル実行のボーレート</b>の値を 115200 に変更しました．このように，面倒ですが，<b>MATLAB コマンドウィンドウでのコマンド入力により値を変更</b>する必要があります．
　なお，値が変更されていることは，再度，

```matlab:
>> codertarget.arduinobase.registry.setBaudRate(gcs)
```

と入力することで確認できます．その結果，

```matlab:
Baud rate is 115200
```

と出力され，エクスターナルモードでエラーなく実行できます．



## <font color="#33CC33">5.2　<font color="#0070C0">R2022a</font></font>

### <font color="#33CC33">5.2.1　Arduino Mega 2560 互換ボード <font color="#0070C0">"MinMega"</font> の場合</font>

　以下の動画を参考に，Simulink モデルの初期設定を行ってください．

https://www.youtube.com/watch?v=AiRfAoxv3tI

ただし，<b><font color="#0070C0">R2022a</font></b> では，<b><font color="#E84746">マイコンボードを接続した状態</font></b>で Simulink モデルの設定をするようにしてください．<b><font color="#E84746">マイコンボードを接続していない状態</font></b>で，<b><font color="#E84746">「ハードウェアボード」を選択</font></b>すると，

https://youtu.be/BYMTP6_Iaqg

のように<b><font color="#E84746">エラーが発生</font></b>してしまいますので，注意してください．

### <font color="#33CC33">5.2.2　Arduino Mega 2560 互換ボード <font color="#0070C0">"RobotDyn Mega"</font> の場合</font>

　以下の動画を参考に，Simulink モデルの初期設定を行ってください．

https://www.youtube.com/watch?v=ZhUnkABg4g8

　<b><font color="#0070C0">R2022a</font></b> では，Simulink モデルの <b>シリアル通信によるエクスターナル実行のボーレートの値を，コンフィギュレーションパラメータで設定</b>できます．

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/109e1c91-28bb-1552-b413-8f780cd041ea.png)|
|:-:|
|External Mode over Serial communication の Baudrate を 115200 に変更|

ただし，<b><font color="#0070C0">R2022a</font></b> では，互換ボード <b><font color="#0070C0">"RobotDyn Mega"</font></b> の場合であっても，<b><font color="#E84746">マイコンボードを接続した状態</font></b>で Simulink モデルの設定をするようにしてください．


## <font color="#33CC33">5.3　<font color="#0070C0">R2018a</font></font>


### <font color="#33CC33">5.3.1　Arduino Mega 2560 互換ボード <font color="#0070C0">"MinMega"</font> の場合</font>

　以下の動画を参考に，Simulink モデルの初期設定を行ってください．

https://www.youtube.com/watch?v=8ItSmX9aMm4

　<b><font color="#0070C0">R2018a</font></b> の場合，忘れずに，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/94645657-a8ba-1eb1-3337-eed708c447cc.png)
のように，「ノーマル」を<b>「エクスターナル」に変更</b>してください（<font color="#0070C0">"RobotDyn Mega" の場合</font>も同様です）．

### <font color="#33CC33">5.3.2　Arduino Mega 2560 互換ボード <font color="#0070C0">"RobotDyn Mega"</font> の場合</font>

　以下の動画を参考に，Simulink モデルの初期設定を行ってください．

https://www.youtube.com/watch?v=DVRvDD5AuyE

　<b><font color="#0070C0">R2021b</font></b> / <b><font color="#0070C0">R2021a</font></b> / <b><font color="#0070C0">R2020b</font></b> / <b><font color="#0070C0">R2020a</font></b> と同様，

```matlab:
>> codertarget.arduinobase.registry.setBaudRate(gcs,115200) 
Baud rate has been set to 115200
```

と入力して，<b>シリアル通信によるエクスターナル実行のボーレート</b>の値を 115200 に変更してください．



## <font color="#33CC33">5.4　補足</font>

#### 【終了時間の設定】
　動画の説明では，
* 終了時間：「inf」

と設定しています．この場合，Simulink モデルの停止ボタンを押さない限り，エクスターナル実行が継続されます．もし，エクスターナル実行で 5 秒間だけ実行したい場合は
* 終了時間：「5」

と設定してください．

#### 【ソルバの設定】

　動画の説明では，
* ソルバ：「<b>離散（連続時間なし）</b>」

と設定しています．この場合，<b>Simulink ライブラリ "Continuous"</b> に含まれる<b>連続時関系</b>の Simulink ブロック（連続時関系の微分器 "Derivative" や積分器 "Integrator"，伝達関数 "Transfer Fcn"，状態空間表現 "State-Space" など）を使用することができません．その代わりに，<b>Simulink ライブラリ "Discrete"</b> に含まれる<b>離散時関系</b>の Simulink ブロック（離散時関系の微分器 "Discrete Derivative" や積分器 "Discrete-Time Integrator"，伝達関数 "Discrete Transfer Fcn"，状態空間表現 "Discrete State-Space" など）を使用します．
　<b>連続時関系</b>の Simulink ブロックを使用したい場合は，

* ソルバ：「<b>ode1 (Euler)</b>」

と設定してください．このとき，数値微分や数値積分は<b>後退差分近似</b>に基づいて実装されますが，近似の精度が不十分である可能性があります．



# <font color="#33CC33">6. MinSegShield M2V5 Dual Axis Balancing Kit の DC モータとセンサを動かそう！</font>

## <font color="#33CC33">6.1　DC モータとエンコーダ</font>

### <font color="#33CC33">6.1.1　はじめに</font>

　MinSegShield M2V5 は，エンコーダ付 DC モータを 2 個，接続することができます．DC モータへの電力供給の方法は，以下の三種類があります．

* <b>パソコンから USB を介して電力供給する場合</b>：<b><font color="#E84746">3.9 [V]</font></b>
* <b>単三電池 6 本 (6AA batteries) により電力供給する場合</b>：充電池のエネループ (eneloop) だと 1 本 1.2 [V] なので，合計 <b><font color="#E84746">7.2 [V]</font></b>
* <b>外部電源により電力供給する場合</b>：購入した AC アダプタは <b><font color="#E84746">9 [V]</font></b>

今回はパソコンから USB を介して電力供給するため，MinSegShield M2V5 のスイッチを以下のように切り替えます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/1cf5688e-8b38-90b5-3b39-1ffff69dc817.png)


> <b>【エンコーダに関する注意事項】</b>
> 　MinSegShield M2V5 の販売時期によって，エンコーダ信号の極性が異なります．


### <font color="#33CC33">6.1.2　モータとエンコーダの動作確認</font>

　MATLAB のコマンドウィンドウで
```matlab:
>> polarity = -1;
```
あるいは
```matlab:
>> polarity = 1;
```
と入力してから，以下の <b>Simulink モデル "sample_motor_encoder.slx"</b> を実行してみてください．

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/f4189f38-07a3-3edd-3112-351e82fa5243.png)|
|:-:|
|<b>Simulink モデル "sample_motor_encoder.slx"</b>|

　R2019b 以降のリリースでは，「ハードウェア」のタグから「監視および調整」を選択し，

https://youtu.be/rNjvdvF--C8

のように実行してください．

　R2019a 以前のリリースでは，「エクスターナル」を選択してから「実行」ボタンを押し，

https://youtu.be/K7AtzOxtQLg

のように実行してください．


### <font color="#33CC33">6.1.3　モータ角度の比例制御</font>

　MATLAB のコマンドウィンドウで
```matlab:
>> polarity = -1;
```
あるいは
```matlab:
>> polarity = 1;
```
と入力してから，以下の <b>Simulink モデル "sample_pcont.slx"</b> を実行してください．

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/97eb60f9-5994-e265-e5c4-f176c1872915.png)|
|:-:|
|<b>Simulink モデル "sample_pcont.slx"</b>|


|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/a8001f22-9018-88ca-3be7-bf12028e3ea4.png)|
|:-:|
|<b>"Subsystem (Motor)"</b>|

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/76099efb-fe14-4123-7647-f56f7201eff0.png)|
|:-:|
|<b>"Subsystem1 (Motor)"</b>|

たとえば，R2019b 以降のリリースでは，「ハードウェア」のタグから「監視および調整」を選択し，

https://youtu.be/AGB1HIsPR_E

のように実行してください．polarity の符号が間違っていると発散しますので，注意してください．



## <font color="#33CC33">6.2　ジャイロセンサ</font>

　以下の <b>Simulink モデル "sample_gyro.slx"</b> を実行してください．

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/3d025409-a8ef-30b5-d636-3bc41e3cd3e1.png)|
|:-:|
|<b>Simulink モデル "sample_gyro.slx"</b>|

たとえば，R2019b 以降のリリースでは，「ハードウェア」のタグから「監視および調整」を選択し，

https://youtu.be/2pSMELy2A5Y

のように実行してください．x, y, z 軸方向に回転させると，その回転方向に応じてジャイロセンサの値が変化することが確認できます．


## <font color="#33CC33">6.3　加速度センサ</font>

　以下の <b>Simulink モデル "sample_acceleration.slx"</b> を実行してください．

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/59c0d48e-49b1-0bbe-95b4-80a5485af15e.png)|
|:-:|
|<b>Simulink モデル "sample_acceleration.slx"</b>|

たとえば，R2019b 以降のリリースでは，「ハードウェア」のタグから「監視および調整」を選択し，

https://youtu.be/UITVTMTBuDY

のように実行してください．x, y, z 方向に動かすと，その方向に応じて加速度センサの値が変化することが確認できます．





# <font color="#33CC33">付録</font>

## <font color="#33CC33">A.1 <font color="#E84746">【重要！】</font><font color="#0070C0">R2021a</font> / <font color="#0070C0">R2021b</font> を使用する場合の注意</font>

 (2022/06/11 時点)
　<b><font color="#0070C0">R2021a</font></b> や <b><font color="#0070C0">R2021b</font></b> では，Simulink モデルをビルドすると，
![crash.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2552191/9b88a266-099a-577c-0cfd-887832264b89.png)
が表示されて，<b><font color="#E84746">強制的に MATLAB が終了（クラッシュ）してしまう</font></b>かもしれません．この不具合は，MATLAB のリリースバージョンとサポートパッケージで使用される DLL ファイルのバージョンが不一致であることが原因だそうです．

https://youtu.be/y43MKaPm0C8

　この問題の対処方法は，

* "Why does Simulink crash when I start it (with Arduino Support Package installed)?"

に対する [MATLAB Anser](https://jp.mathworks.com/matlabcentral/answers/1676384-why-does-simulink-crash-when-i-start-it-with-arduino-support-package-installed) を参照してください．そこに記されているように，<b><font color="#E84746">MATLAB がクラッシュした後</font></b>，

* <b><font color="#0070C0">R2021a</font> の場合</b>：<br>C:\ProgramData\MATLAB\SupportPackages\R2021a\bin\win64\simulink_plugins\hardwaresupportpkgs\targets\targetHiddenBlkInsert
* <b><font color="#0070C0">R2021b</font> の場合</b>：<br> C:\ProgramData\MATLAB\SupportPackages\R2021b\bin\win64\simulink_plugins\hardwaresupportpkgs\targets\targetHiddenBlkInsert

にある <b><font color="#E84746">DLL ファイル</font></b>

* <b><font color="#E84746">libmwtargetHiddenBlkInsert.dll</font></b>

<b><font color="#E84746">を削除</font></b>し，<b><font color="#E84746">MATLAB を再起動</font></b>してください．



## <font color="#33CC33">A.2 <font color="#E84746">【重要！】</font><font color="#E84746"></font><font color="#0070C0">R2022a</font> を使用する場合の注意<font color="#E84746">《解決済》</font></font>

 (2022/09/26 時点)

<b><font color="#E84746">【解決されていました！】</font></b>

　Simulink Support Package for Arduino Hardware （「2022/9/14」のバージョン）を再インストールすると，下記の問題は解決されました．古いバージョンをインストールしている場合は，再インストールしてください！

---

 (2022/06/11 時点)


　<b><font color="#0070C0">R2022a</font></b> では，<b><font color="#E84746">マイコンボードを接続した状態</font></b>で Simulink モデルの設定をするようにしてください．

　また，<b><font color="#0070C0">R2022a</font></b> で <b><font color="#E84746">Scope の表示させると，途切れ途切れ</font></b>となってしまいます．

https://www.youtube.com/watch?v=Q3kaBLmi1dg

リアルタイムで表示させるには，たとえば，Simulink の<b><font color="#E84746">データインスペクター</font></b>の機能を利用するなどしてください．