Arduinoでモデルベース開発 Lチカしてみよう

# 概要
　この投稿は電子工作でよく使われるマイコンボード「Arduino」とモデルベース開発環境「MATLAB、Simulink」を使い、「Lチカのモデル」の作り方、動作確認方法について書いています。


# モデルのファイルについて
　この連載で紹介しているモデルのファイルをGitHubで公開しました。必要に応じて活用ください。

・[GitHub URL](https://github.com/grace2riku/MBDFirstStudy)
gitを使える方はgitクライアントソフトより活用ください。
gitって何?よくわからない方は上記GitHub URLにアクセスし、下記の操作をしてファイルをダウンロードしてください。
・ページ右側の【Clone or download】ボタンを押下し【Download ZIP】を選択する。zipファイルがダウンロードできる。

　拡張子*.slxがSimulinkのモデルです。MATLAB, Simulinkを持っていない方は拡張子*.htmlを参照下さい。Webブラウザでこの連載で作るモデルが確認できます。
今回のLチカモデルの対象ファイルは下記になります。
- led_switch/led_switch.slx
- led_switch/led_switch.html

# 想定する読者
・モデルベース開発とはどのような開発手法なのかざっくり知りたい人
・MATLAB, Simulinkの基本的な使い方を知りたい人
・Arduinoでモデルベース開発する手順を知りたい人
・その他、興味ある人全般

# 投稿者について
投稿者の技術的な背景を紹介します。
・従来の開発手法(C言語)で組込みソフトウェア製品開発に関わり17年。
・モデルベース開発の設計を実務で担当した経験なし。自動車サプライヤーでモデルベース開発の作業補助(ちょっとしたモデル修正、検証)をしたことはある。
・2018年12月にMATLAB、Simulinkを個人で買えるライセンス(Homeライセンス)で購入し、自己学習を始めた。
・Arduino、Simulinkで外部機器を制御することができたので、そのノウハウを共有したく投稿した。

# モデルベース開発とは???
~~モデルベース開発全体概要が分かりやすい資料がWebにあるので紹介します。
[モデルベース開発概要参考資料リンク](https://www.meti.go.jp/committee/kenkyukai/shoujo/daiyoji_sangyo_skill/pdf/002_06_00.pdf)
モデルベース開発を推進する背景、従来の開発手法との違いを図解で説明していてわかりやすいです。~~
わかりやすいと思っていたWebページのリンク、切れていました。


# 開発環境について
今回の使用するツールは下記です。

## モデリングツール
- MATLAB バージョン 9.7 (R2019b)
- Simulink バージョン 10.0 (R2019b)
- Simulink Support Package for Arduino Hardware&nbsp;バージョン19.2.3(※)&nbsp;※Simulinkがサポートしているハードウェアのパッケージ のこと。今回使用するArduino以外のハードウェアとしては下記がある。&nbsp;
Raspberry Pi、Android、iPhone、LEGO MINDSTORMS EV3、etc・・・&nbsp;

## マイコンボード
- Arduino MEGA Arduino UNOの方が安いですが、後述するシミュレーションができないためArduino MEGAを選択します。

# モデル作成の流れ
モデル作成は下記の手順で作業を行います。

1. 部品(ブロック)を配置する。
1. ブロック同士を接続する。
1. ブロックの設定をする。
1. シミュレーション・または実機動作確認する。&nbsp;

シミュレーション:&nbsp;
マイコン基板とPCをUSB接続し、モデルの動作をPCで確認する。&nbsp;

実機動作確認:&nbsp;
マイコン基板とPCをUSB接続しない。マイコン基板に外部電源を供給し動作させる。&nbsp;

# モデルの概要
- スイッチ押下でLED点灯・消灯する。

# ハードウェアの要件
実習する場合、下記の機材を準備し、ブレッドボード配線図の通りに配線します。

## 実習する場合に必要な機材
- Arduino MEGA
- ブレッドボード
- ジャンパー線(オス-オス)
- タクトスイッチ
- 抵抗 10kΩ、510Ω
- LED
- USBケーブル
- AC-DCアダプタ12V　※実機動作確認する場合に必要。

## ブレッドボード配線図
![キャプションを入力できます](https://camo.elchika.com/af56713a3c2a22ad34e25d29433c808d2b8d0744/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f64653364633862342d616631352d343166322d386566382d326461323465616230663631/)

# モデル作成手順
## MATLAB, Simulinkの起動
1. MATLABを起動し、 Simulinkを選択します。
![キャプションを入力できます](https://camo.elchika.com/670ae44adb891c56a028db6f043e3019ae6474a3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f63646662653364642d343262322d346632662d396236632d653264346535613561383333/)

2. 空のモデルを選択する。
![キャプションを入力できます](https://camo.elchika.com/f02763b5df2d782d439c5aa7b713c7aa06beaf88/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f37666336336334302d306561622d346465612d616337382d383161656663326131656634/)

## ハードウェア設定
1. モデル設定を選択する。
![キャプションを入力できます](https://camo.elchika.com/56cc340d9ff041d07ac665c2c58f4ecde72b9b01/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f39636166666366302d383666392d343130642d613263662d373339396135643662343932/)

2. 下図の設定画面となる。
![キャプションを入力できます](https://camo.elchika.com/8e9489e513c77217022c9290c272a55110528d8a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f31356137646238342d326337372d343664342d623638662d313430376438386462316166/)

3. 終了時間をinfに設定する。
停止指示するまでシミュレーションを実行します。
![キャプションを入力できます](https://camo.elchika.com/f7d5626f1e07d4e354fe0212b924dadd935fd535/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f62333732646637342d613539362d343864342d393039332d383664333364356164326661/)

4. ソルバーの選択で固定ステップを選択する。
![キャプションを入力できます](https://camo.elchika.com/eee43400fe830100aebb5d5502b4746f24630a6f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f38666636336336362d306131322d343266662d386231342d643132643438336663666537/)

5. ハードウェア実行の選択メニューに移動する。
![キャプションを入力できます](https://camo.elchika.com/defef983a6ff6ce3937f016fc1a33a32d1ec3f07/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f30353137356639352d643032352d343738322d623863312d343264376564633961313562/)

6. Arduino MEGA 2560を選択する。
![キャプションを入力できます](https://camo.elchika.com/610321a6873aaebe66e4e6f59fc92096e1fb208b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f35653935396635372d396331362d343562642d383936642d623534666137313537333837/)

7. OKボタンを押下し、設定を終了する。
![キャプションを入力できます](https://camo.elchika.com/83f9158a61ac8849aa7b1d8674a095b778487f10/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f66616562656434612d363966382d343365332d613639652d356665343932343664643166/)


## モデル作成
1. ライブラリブラウザを選択する。

2. Simulink Support Package for Arduino HardwareのCommonからDigital Input、Digital OutputをSimulink画面にドラッグ&amp;ドロップする。&nbsp;
![キャプションを入力できます](https://camo.elchika.com/e77fc00965ce415f9761418406ced9e73f43d0ca/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f34383038313437312d333332632d343739652d613135612d616362656632356464313265/)

3. ドラッグ&amp;ドロップで下図のようになる。
![キャプションを入力できます](https://camo.elchika.com/6644ae3e10185550377683559c380871ae3ac80a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f36396562623264612d636664652d343437392d623665382d316566303866316563636636/)

4. Digital InputとDigital Outputを接続する。
![キャプションを入力できます](https://camo.elchika.com/c1bca1b01197db9b1ba0a408c78df61550bfd8ab/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f36396330383034312d366265612d346538332d386432652d396334393666643034613861/)

5. Digital Inputをダブルクリックし、Sample timeを0.01に設定する。
![キャプションを入力できます](https://camo.elchika.com/c0b678c6e27906c8f7c2db8fdab9ced86891fa2f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f64353531656365312d316162652d343134362d626263312d626230373539613732613762/)

6. ライブラリブラウザのSimulink/Sinks からDisplay・ScopeをSimulink 画面にドラッグ&amp;ドロップする。
![キャプションを入力できます](https://camo.elchika.com/a58716bba6bef84ac917661e40f481d74302202d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f34373365656437652d343762652d343563332d393031652d643163333663653035613463/)

以上でモデル作成は完了です。お疲れ様でした。次はシミュレーションしてみます。

# シミュレーションの確認手順
1. USBケーブルをArduinoとPCに接続する。
実行ボタンを押下し、シミュレーションを開始する。
![キャプションを入力できます](https://camo.elchika.com/3569647d076044df06c5f8aee7a1e41685cbab36/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f38653637653864372d636566612d343362322d623031382d343033323337653131353262/)

2. スイッチ押下していない時はDisplayが1になりLEDは点灯する。スイッチ押下している時はDisplayが０になりLEDは消灯する。
![キャプションを入力できます](https://camo.elchika.com/851db3337a7517bd483fe9af9e7c4d6a0de637c2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f34346162373862632d613337332d346463372d613464652d623064386431373462393832/)

3. Scopeブロックをダブルクリックするとグラフィカルに信号状態をモニタリングできる。
![キャプションを入力できます](https://camo.elchika.com/b650a164931642172f8e5c3309f3fe26a0afa2a8/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f37646338366538612d363433652d343066342d386434312d663934343662643935346265/)

シミュレーションの説明でした。次はPCを接続せずArduinoに電源供給し単体で動かしてみましょう。


# 実機動作の確認手順
1. 実機動作確認時はUSBケーブルをArduinoとPCに接続し【ビルド、配布及び開始】を実行する。
これでモデルをArduinoに書き込みます。

2. ビルドプロセスが正常に完了と表示されていれば、ビルド・Arduinoへの書込みは正常に終了している。
![キャプションを入力できます](https://camo.elchika.com/2a83e706e684162193078f372a8ff909c41aea3d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62623132653039642d323165662d346333322d616533382d3838656632613734373430662f62663638653830332d653237362d343433382d396531392d393064303532393034626664/)

3. USBケーブルを取り外し、ACアダプタで12VをArduinoに供給する。
シミュレーションと同じ動作をしていればOKです。


# 最後に
　Arduinoとモデルベース開発によるLチカは如何でしたでしょうか?
少しでもモデルベース開発についてイメージが湧けば嬉しいです。
最後まで読んでいただきありがとうございました。