「璃奈ちゃんボード」をつくろう！要件定義編

# はじめに
はじめまして、はまと申します。Qiitaには初投稿となります！どうぞよろしくお願いします。

次回：[「璃奈ちゃんボード」をつくろう！設計編](https://qiita.com/hamahamabe/items/f2a5497aea395eb9699d)
次々回：[「璃奈ちゃんボード」をつくろう！プログラム解説編](https://qiita.com/hamahamabe/items/6612540a72b915410b99)

## つくるもの

ラブライブ！シリーズの第3作目にあたる「ラブライブ! 虹ヶ咲学園スクールアイドル同好会」に登場するスクールアイドル・天王寺璃奈ちゃん。自分の表情に顔に出すことが苦手な彼女は、「璃奈ちゃんボード」を用いてその気持ちを周りに伝えています。
<img width="150" alt="3-1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547023/f6050b5c-8478-bcc1-946a-7b69699bbde1.png">

しかしスケッチブックを用いた「璃奈ちゃんボード」を持ったままではスクールアイドルとしてライブなどの活動を行うことは困難です。
その欠点を解消するために虹ヶ咲学園のコンピュータ部や情報処理科の人たちの助けを借りて開発されたのが、デジタル式の璃奈ちゃんボード。その名を「オートエモーションコンバート璃奈ちゃんボード」といいます。
<img width="400" alt="955.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547023/9e7f6cdf-5287-8b7e-ab85-88367dafeb27.png">

というわけで、今回はこの「オートエモーションコンバート璃奈ちゃんボード」を制作しました。

## つくったもの

すでに制作は完了しており、おおまかな制作過程はYouTubeに公開しています。
もしよければ御覧ください。完成品披露は動画の８分あたりからです。
[璃奈ちゃんボードの作り方【ラブライブ！虹ヶ咲学園スクールアイドル同好会】](https://youtu.be/0yT_qYHqlOU)

<img width="400" src="http://img.youtube.com/vi/0yT_qYHqlOU/0.jpg">

## 説明する箇所、しない箇所

全制作工程はおおよそ以下の通りとなっています。※画像は上記動画内より引用
![vlcsnap-2020-06-17-14h50m38s835.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547023/09aa0a84-8f51-7753-4774-2db388af41d6.png)


その中でも今回は、Arduino周辺（特にスケッチ）に焦点を絞って解説を行っていく予定です。よって、解説内容はおおよそ以下のとおりとなります。

|  工程  |  解説内容  |
| :--- | :--- |
|  設計  |  必要な部分のみ  |
| ソフトウェア制作 | ここがメイン（予定） |
|  ハードウェア制作  |  簡単に説明  |
|  外装制作  |  さわり程度  |

## その他補足など

今回の璃奈ちゃんボード制作はおおよそ以下のような期間で行いました。

|  日付  |  やったこと  |
| :---: | ---- |
|  12月中旬  |  構想開始  |
| ： |  設計～部品見繕い  |
|  12/23  |  初めてのArduino購入  |
| ： |  プログラム作成（初めてのArduino言語＆初めてのGAS）<br>※GASをどこで使ったかについては次回以降に…  |
|  1/2  |  初めての3Dソフト(Fusion360)  |
|  1/3  |  3Dプリンタ購入  |
| ： |  外装試行錯誤、回路作成、プログラム修正  |
|  1/13  |  ほぼ完成  |
| ： |  微調整&動画作成  |
|  2/5  |  動画投稿  |

Arduinoを触るのもGASを触るのも3Dモデリングもすべてが初めて、電子工作は少しはんだ付けしたことある程度、設計を行うのも初めて、という状況の中で制作を開始、さらに仕事をしながら必要な知識を勉強しつつの制作でしたが、構想～完成まで約1ヶ月という、我ながらなかなかのスピード感あふれる制作だったと思います。

なにが言いたいのかというと、「電子工作初心者でも熱意と努力でなんとかなる（なんとかなった）」ということと「素人の設計なので細かい部分は甘くみてね」ということです。

初心者の方はぜひ参考にしていただいて「自分にもなにか作れる！」という喜びを知る一助になれれば良いな、と思います。
また、諸先輩方には甘くみてもらいつつも、こうしたほうが良いのではという助言や内容の間違い等あればどんどんご指摘いただけると幸いです。どうぞよろしくお願いします！

# 要件定義

設計するにあたって、まずは完成品を想像することからはじめます。
完成品を想像することで、「どうやって実装するのか」はさておき、「どんな機能を実装するのか」を整理することができます。
「どんな機能を実装するのか」を決定することを **「要件定義」** と言い、これが設計における最上流工程にして最も重要な工程となります。
要件定義がうまくできてようやく、ではその機能を実装するために必要な技術は何か、自分のスキルで実現できるのか、あるいは勉強すればいけるのか、厳しいならどのように妥協するのか。。。などというように具体的な設計のステップに進めるわけですね。

## 操作モード

実際のオートエモーションコンバート璃奈ちゃんボードは虹ヶ咲学園のコンピュータ部や情報処理科の人たちの圧倒的な技術力によって璃奈ちゃんの感情を画面に表示される感情がリンクしているようですが、さすがにその技術は持ち合わせていないため、必然的に手動での操作方法を考えることになります。

なんだかんだと考えた結果、以下の3つの操作モードを実装することにしました。

* マニュアルモード
手動で表示する表情を選択するモード
* ランダムモード
登録した表情をランダムに切り替えるモード
* 再生モード
設定した表情変化パターンを再生するモード

## プリセット機能

また、表情を切り替えるにあたって、**プリセット機能**のようなものがあると便利ではないかと思いました。具体的には以下のようなイメージです。
![preset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547023/c12a02a9-c162-b1a5-868c-e082e649c90b.png)

このように表情のジャンルごとにプリセット登録しておけば、例えば操作モードをランダムに、かつプリセットをSADNESSに設定すると悲しい表情だけをランダムに切り替えて表示する、ということができるようになります。
このプリセット機能をうまく使えば、擬似的に**オートエモーションコンバート**できているように見せかけることもできそうです。

## 機能切り分け

ここまでに挙げた機能を、**PC上（プログラム作成時点）で設定する機能**と**璃奈ちゃんボード上で操作する機能**に分けて整理してみましょう。すると以下のとおりになります。

* PC上（プログラム作成時点）で設定する機能
  + 表情の登録
  + 表情プリセットの登録
  + 再生モード用の表情変化パターンの登録

* 璃奈ちゃんボード上で操作する機能
  + 操作モードの切り替え（マニュアル・ランダム・再生）
  + マニュアルモード時の表情切り替え（進む・戻る）
  + 表情プリセットの切り替え（進む・戻る）
  + 再生モードの表情パターン切り替え（進む・戻る）
  + 再生モードの表情パターン再生・停止

頭がこんがらがってきましたね。
では次は、これらの機能のうち**「璃奈ちゃんボード上で操作する機能」**についてを実際の操作方法ベースで整理していきます。

## 操作方法

各種操作を璃奈ちゃんボード上で行う方法として、単純に考えられるの以下の２つです。

* 物理的なスイッチによる操作
* 無線通信による操作

無線操作のほうがイケてるのでしょうが、電子工作初心者ということもありますのでまずは簡単そうな物理的なスイッチによる操作を実装することにします。

※その後無線操作機能も実装したのですが、今回は上記動画の段階での機能に沿って説明するので無線操作機能については説明しません。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">そういえば我が家の璃奈ちゃんボード、遠隔操作に対応しつつあります👌📡 <a href="https://t.co/mVU1cPmmNH">pic.twitter.com/mVU1cPmmNH</a></p>&mdash; はま (@ybybybmh) <a href="https://twitter.com/ybybybmh/status/1259419595019976704?ref_src=twsrc%5Etfw">May 10, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

話を戻しまして、スイッチによる操作ついて検討します。
回路を自由に設計できるのでスイッチの数も操作方法も自由に決められるわけですが、スイッチの数や操作方法についての検討は以外と難しいものでした。

たとえば多くのオタクにとって馴染みの深いアイテムである**光る棒**は、わずか２ボタンで電源操作、色の切り替え、色の並び順の変更（メモリー機能）、設定のリセットなどの操作が行えるようになっています。ボタン数が少ないことで少し操作が煩雑にはなっていますが、２ボタンでこれだけの操作（特にメモリー機能）ができるのって実はかなり考えられてる設計なんだな～、なんてことを考えるいい機会になりました。

というわけで、ああでもないこうでもないと検討した結果、操作用のスイッチは璃奈ちゃんボードの内側に4つ設置することにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547023/c8c05f11-bf42-d1dd-c42e-bcafc3e768fe.png)
4つのボタンのうち3つは操作モードによって動作が変化するようにし、残りの1つのボタンは全モードで共通の操作ボタンとします。また、一部のスイッチには短押し/長押しで別の動作を割り当てています。



最終的に実装した操作方法を以下の表に示します。いくらでも改善の余地はありそうですが、そもそもユーザーが自分しかいないためとりあえずこれで良しとします。もしもこれを参考に自分で作成する方が居れば、そのときはあなたの理想の操作方法を実装すると良いでしょう！
また、ここまでに説明していない機能がちょこちょこ入っていますが、そこはなんかうまいこと流してください。

| モード  |  スイッチ  |  動作  |
| :---: | :---: | ---- |
|  全モード共通  |  SW4  |  短押し : 明るさを１段階上げる <br> 長押し : モードを１つ進める  |
|  ランダムモード  |  SW1  |  プリセットを１つ進める  |
|  ランダムモード  |  SW2  |  プリセットを１つ戻す  |
|  ランダムモード  |  SW3  |  表情が切り替わる間隔を変更する（等間隔 or ランダム間隔）  |
|  マニュアルモード  |  SW1  |  表情を１つ進める  |
|  マニュアルモード  |  SW2  |  表情を１つ戻す  |
|  マニュアルモード  |  SW3  |  短押し : プリセットを１つ進める <br> 長押し : プリセットを初期値（全表情）に変更する  |
|  再生モード  |  SW1  |  再生待機の表情を１つ進める  |
|  再生モード  |  SW2  |  再生待機の表情をランダムに変更する  |
|  再生モード  |  SW3  |  短押し : 何もしない（誤操作防止） <br> 長押し : パターン再生開始  |

これにて、おおよそ実装したい機能と操作方法についてのイメージが固まりました。


# まとめ
ここまで、実装方法の話は完全無視で機能についてを説明してきました。
ようやく次回から具体的な実装方法について説明していきます。
以上、ここまでお読みいただきありがとうございました！次回の更新をお待ち下さい。

次回：[「璃奈ちゃんボード」をつくろう！設計編](https://qiita.com/hamahamabe/items/f2a5497aea395eb9699d)
次々回：[「璃奈ちゃんボード」をつくろう！プログラム解説編](https://qiita.com/hamahamabe/items/6612540a72b915410b99)