MATLAB&SimulinkでArduinoを使い始める (電子工作初心者のLED点滅まで)

# はじめに
これは「ArduinoとMATLABで制御系設計をはじめよう」を参考にしながら, 電子工作をほとんどしたことがない大学生がArduinoに初めて触れて, LEDを点滅させた記録です.

> [平田光男, ArduinoとMATLABで制御系設計をはじめよう, TechShare株式会社](https://jp.mathworks.com/academia/books/book102451.html)

使っているマシンのOSはWindows10 Home, MATLABはR2021aです.

## 購入したもの
今回用意したのは, "Arduino Uno R3" を含むスターターキットです. (今後もArduinoと末永くお付き合いしたいと考えて, いっぱい遊べそうなものを選んじゃいました..)

> https://www.elegoo.com/collections/uno-r3-starter-kits/products/elegoo-uno-most-complete-starter-kit
![arduino.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1635383/aa9e2aac-bc58-3fe8-bcfe-2db7aba13d46.png)


LEDの点滅のみを行いたい人は, キットではなく,

* Arduino本体 (Arduino Uno R3 / Arduino Mega 2560 R3)
* ブレッドボード
* ジャンパワイヤ
* LED
* 220[$\Omega$]抵抗

があれば十分だと思います..


## LED点滅実験

### Support Packageによる連携 (今回行ったもの)
参考書では, ArduinoIOを使っている(後述)が, ここでは,

* [MATLAB Support Package for Arduino Hardware](https://jp.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware?s_tid=srchtitle)
* [Simulink Support Package for Arduino Hardware](https://jp.mathworks.com/matlabcentral/fileexchange/40312-simulink-support-package-for-arduino-hardware?s_tid=srchtitle)

を用いる. 

まず, MATLABを開いて[ホーム]->[アドオン]->[アドオンの入手]から上記二つをインストールする.
インストールの後, 両方とも「ハードウェアセットアップ」があり, [Arduino Uno]と[COM3]を選ぶ以外は[次へ]を押してセットアップを完了しました.

### LED点滅実験
#### Simulinkからの実験
[MathWorksサイトに書かれている例](https://jp.mathworks.com/help/supportpkg/arduino/examples/getting-started-with-arduino-hardware.html)を用いて, SimulinkによるLED点滅実験を行った. 作成した回路は以下である. (今回用いているのはArduino Unoなので, ボードの形状が少し違うが, Pin9およびGNDにジャンパワイヤを刺すことは変わらない.)
**(注) LEDの足が短いほうがGND(右)側です!!**
![led_example_circuit.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1635383/28bf0a9e-8928-32ec-d770-68b93d4d2c24.png)

そして, Simulinkで空のモデルを開き, [ライブラリブラウザー]から

* Simulink/Sources/Pulse Generator
* Simulink Support Package for Arduino Hardware/Common/Digital Output(Pin: 9)

を追加し, つなげる. ここでPulse Generatorをダブルクリックし, **パルスタイプ**を[サンプルベース], **サンプル時間**を0.1とした.


![simulink_model_example_led.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1635383/4c2f3a21-1a3e-651c-bc2f-abd7022641e3.png)

この後の作業は,

* [シミュレーション(左上)]->[準備下矢印]->[モデル設定]->[ハードウェア実行]にて[ハードウェアボード]で[Arduino Uno]を選択
* [OK]をクリック
* [ハードウェア]->[ハードウェアで実行]で点滅が開始される. (開始まで20秒ほどかかる場合もあった.)

#### MATLABコードからの実験
次にArduinoを使ったLED点滅をMATLABコードから行った. コードは参考書のプログラム3-1を参考に, 以下を作成した. そして, 通常のMATLABコードを実行するのと全く同じように[実行]をクリックした. (MATLABでいつも通り実行するだけで, Arduinoが動いてしまうので, とても楽チン.)

```code:matlab
clear a
a = arduino();
for i=1:10
    writeDigitalPin(a,'D9',1);
    pause(1);
    writeDigitalPin(a,'D9',0);
    pause(1);
end
```

ここまででLEDの点滅をMATLABおよびSimulinkから行えることが確認できました.

### ArduinoIOによる連携 (参考書に書かれていた方法)
結果的にうまくいきませんでした...
#### Arduino IDEのインストール
参考書に書かれていた通り, [Arduinoのホームページ]->[Softaware]から[**Windows** ZIP File]を選択し, ダウンロードを行いました.
私がダウンロードを行った際のVersionは1.8.15でした.

> https://www.arduino.cc/en/software
![arduino_ide_download.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1635383/cce60a40-16ea-dda9-b93d-c642b83ee3aa.png)

ダウンロードしたZIPファイルを解凍し, 自分の好みの場所に移動して, Arduino IDEのインストールは完了です.

#### デバイスドライバのインストール
最初に, Arduino Uno R3をUSBによりパソコンとつなぎました.
そして[コントロールパネル]->[ハードウェアとサウンド]->[デバイスとプリンター/デバイスマネージャー]->[ほかのデバイス]と進んでいくと, パソコンがArduinoを認識していました. 
![ardino_device_driver.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1635383/0c8eb82e-1a18-6c20-703d-0be3d90c4d4d.png)
ここで[USBシリアルデバイス(COM3)]上で, [右クリック]->[ドライバーの更新]->[コンピューターを参照してドライバーをい検索(R)]->[参照]から, 先ほどダウンロードしたArduino IDEの中にある**arduino-1.8.15/drivers**をインストールしました.
![arduino_device_driver_finish.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1635383/fe71794c-6add-6ec2-804d-6f396db58da9.png)
これで, Arduino デバイスドライバのインストールは終了!!


#### Arduinoの動作確認
参考書に倣い, Arduinoの動作確認のためのLED点滅実験を行った.
まず, arduino-1.8.15/arduino.exeを起動します.
![arduinoexe_start.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1635383/8f1cb1ae-59e5-b30b-2d8e-32aed9f44592.png)

そして, 設定を行いました. 

* [ツール]->[ボード]->[Arduino Uno]
* [ツール]->[シリアルポート]->[COM3]

次に, サンプルコードを実行します. サンプルコードは[ファイル]->[スケッチ例]->[01.Basics]->[Blink]にありました. 新規ウィンドウで開かれたコードに対して, 右矢印マークの「マイコンボードに書き込む」を実行しました.
![arduinoexe_example.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1635383/65c5a066-e652-3a78-0c95-a084b6d0dbd1.png)
Arduino本体を見ると, オレンジ色のLEDが点滅していることが確認できました.

#### ArduinoIOのインストール
MATLABとArduinoを連携させるために, ArduinoIOが必要になる.
これは以下からダウンロードできる.
> [Legacy MATLAB and Simulink Support for Arduino](https://jp.mathworks.com/matlabcentral/fileexchange/32374-legacy-matlab-and-simulink-support-for-arduino)

そして, 解凍したZIPファイルを移動し, その中で, 

```script:matlab-script
>> install_arduino
```

とコマンドラインに打つことで, 連携できるようになる.

![arduino_matlab.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1635383/00329b92-1a8e-a751-bbf9-273544b39a8f.png)

ここで, SimulinkのライブライブラウザーにArduinoIO Libraryが現れるはずだったのですが, 現れずに断念してしまいました...


# おわりに
ここまでが電子工作をやったことのない大学生が, 3時間かけてMATLABとSimulinkを使ってLEDを点滅させるまでの記録です. Qiitaを書きながら作業をしたり, ArduinoIOを断念したりしたので, **Support PackageをインストールしてArduinoを動かすだけだったら1時間以内でできそうな気がします**.. 

これから, いろいろなセンサやモーターを使い始めていければと思っています. その記録もQiitaに投稿していくつもりです.