ジャパリオルゴールを作ってみた（未来編）

🎄**この記事は [けものフレンズ Advent Calendar 2018](https://adventar.org/calendars/3071) 22日目の記事です**🎄

**前の記事: [ジャパリオルゴールを作ってみた（ソフトウェア編）](https://qiita.com/nanase/items/4e9c46f154fed15ac1bd)**

ここまで3記事に分けて紹介してきたジャパリオルゴール。
今回は締めくくりとして、これからジャパリオルゴールをどう改良していくかを紹介していきます。

# ATmega328Pの使用

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">見た目は相当ダサいけど、ATmega328Pをいちいちソケットから外さなくても、ジャパリオルゴールのスケッチの書き込みができるようにしてみた。 <a href="https://t.co/lFI81p3CsV">pic.twitter.com/lFI81p3CsV</a></p>&mdash; 七瀬 (@nanase_coder) <a href="https://twitter.com/nanase_coder/status/1065634326958637056?ref_src=twsrc%5Etfw">2018年11月22日</a></blockquote>

これまでは Arduino Nano を使ってジャパリオルゴールの制御を行ってきました。機能は申し分ありませんが、完成後はスケッチを頻繁に書き込むことはないため、ATmega328P を使うほうが費用も面積も削減できます。

ただ、ATmega328P にスケッチを書き込む際にICソケットから都度取り外すのも面倒であるため、基板表面には ICSP のテストランドを設けておきます。ICSP として 5V, GND, MOSI, MISO, SCK, RESET の 6本のテストランドがあれば十分です。

ところで、Arduino Nano では内蔵されていた 16MHz のクリスタルも ATmega328P では外付けになるため、クリスタルとコンデンサも必要になります。コンデンサは 22pF を 2つ 使います。

# 電源コネクタの変更

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">microUSBのソケットもバッチリ適合<br>はんだ付けしないと浮いちゃうけどね <a href="https://t.co/VIlSgTaMm7">pic.twitter.com/VIlSgTaMm7</a></p>&mdash; 七瀬 (@nanase_coder) <a href="https://twitter.com/nanase_coder/status/1065192392448344064?ref_src=twsrc%5Etfw">2018年11月21日</a></blockquote>

Arduino Nano から乗り換えることで、これまで MiniUSB で供給されていた電源コネクタも用意しなくてはなりません。これには MicroUSB を使います。秋月電子から[**電源専用の MicroUSB コネクタ**](http://akizukidenshi.com/catalog/g/gC-10398/)単体が入手できるためこれを使います。

また、Arduino Nano に搭載されていた 5V のレギュレータは使えなくなるため、DCジャックで9V電池を使うことはできなくなります。

# LCDで曲名表示

ジャパリオルゴールを屋外で使用したところ、現在の状態や曲名がわからないことが多々ありました。演奏に特化したジャパリオルゴールだったため、LED以外の表示がなかったのは想定内でした。
ただ、ジャパリオルゴールについて知らない方々が LED の点滅だけ眺めていても楽しくはないだろうと考え、少しでも見どころを増やす目的で曲名の表示を行うことにしました。

入手性を考え、OLED（有機ディスプレイ）か LCD（液晶ディスプレイ）か検討しました。秋月電子で手頃な [**グラフィック OLED**](http://akizukidenshi.com/catalog/g/gP-12031/) を見つけたのですが、以下の問題があり採用を断念しました。

- **表示部が小さすぎる**
  - 対角線が 0.96 インチ（= 2.43 cm）しかありません。屋外で使うにはかなり小さく、覗き込む必要があります。逆に、ブレッドボード上で使うにはちょうどいいサイズだと思います。
- **I<sup>2</sup>Cが遅すぎる**
  - 演奏中に映像を更新すると演奏が止まるレベルで遅いです。I<sup>2</sup>C が遅いという理由より、常に 8px 単位で表示を更新する必要があります。画面は 128x64 ピクセルのため、仮に画面全体を更新したい場合は **1,024回** の更新処理が必要になります。
- **データを用意するのが面倒**
  - グラフィック表示のため、ピクセル単位でデータを用意する必要があります。当然、それ専用のデータを作る必要があります。
  - この OLED は座標方向が特殊で、ピクセルの方向が横方向ではなく、縦方向になっています。何も考慮せずにラスタ画像からデータを作ると、90度回転したような表示になってしまいます。

問題ばかり列挙しましたが、I<sup>2</sup>C の配線数を少なくできるというメリットは享受できます。電源を除けば、ATmega328P と OLED はたった **2ピン** 分の接続で表示ができてしまいます。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">キャラクタLCDで「水曜ジェーンかわいいね！」<br>　+<br>LCDのバックライト色が滑らかに変わっていくだけ <a href="https://t.co/vmERRn1wRz">pic.twitter.com/vmERRn1wRz</a></p>&mdash; 七瀬 (@nanase_coder) <a href="https://twitter.com/nanase_coder/status/1069101144595546113?ref_src=twsrc%5Etfw">2018年12月2日</a></blockquote>

そこで、今回は LCD を使うことにしました。
Adafruit の [**RGB backlight negative LCD 16x2**](https://www.adafruit.com/product/399) です。キャラクタLCDですが、制御ICが HD44780 互換です。そのため、カタカナがデフォルトで入っています。バックライトは3色のLEDになっており、PWM でフルカラー表示を実現できます。ちなみに [千石電商](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-54SF) で入手可能です。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">LCDとジャパリオルゴール、同時使用できてる・・・！<br>配線が禍々しいけど！ <a href="https://t.co/MS3fOoYypH">pic.twitter.com/MS3fOoYypH</a></p>&mdash; 七瀬 (@nanase_coder) <a href="https://twitter.com/nanase_coder/status/1069127551883272193?ref_src=twsrc%5Etfw">2018年12月2日</a></blockquote>

ATmega328P とは **9ピン** も接続が必要ですが、ATmega328P 側のピンアサインを変えることでギリギリ間に合いました。Arduino には標準ライブラリに LiquidCrystal クラスがあるため、プログラムも難なく組むことができました。

キャラクタLCDのため表示パターンが限られ、グラフィックOLEDよりもデータ作成が単純になるメリットもあります。

# 電源とスピーカーの内蔵

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">試作基板とはいえ、外部電源や外部スピーカーなしでまともに演奏できるようになった意義は大きいな。<a href="https://twitter.com/hashtag/%E3%81%91%E3%82%82%E3%81%AE%E3%83%95%E3%83%AC%E3%83%B3%E3%82%BA?src=hash&amp;ref_src=twsrc%5Etfw">#けものフレンズ</a><a href="https://twitter.com/hashtag/%E3%82%B8%E3%83%A3%E3%83%91%E3%83%AA%E3%82%AA%E3%83%AB%E3%82%B4%E3%83%BC%E3%83%AB?src=hash&amp;ref_src=twsrc%5Etfw">#ジャパリオルゴール</a> <a href="https://t.co/nUJbssAwIr">pic.twitter.com/nUJbssAwIr</a></p>&mdash; 七瀬 (@nanase_coder) <a href="https://twitter.com/nanase_coder/status/1065584085744009216?ref_src=twsrc%5Etfw">2018年11月22日</a></blockquote>

ジャパリオルゴール構想当時から課題としていた、電源とスピーカーの内蔵も本気で取り組むことにしました。

電源は入手のしやすい単4電池を3本使用し、基板上に [**電池ボックス**](http://akizukidenshi.com/catalog/g/gP-02670/) を置くことで対応することにしました。単4電池3本で 4.5V のため、5V に昇圧するためのモジュールも使います。

[**スピーカー**](http://akizukidenshi.com/catalog/g/gP-10366/) はネジ穴があり基板にはめ込みができるくらいの大きさのものを選定しました。この大きさのスピーカーを駆動させるには YMF825 の出力だけでは足りないため、アンプ回路も作って増幅させます。5V 駆動のため、7W スピーカーの割にはそこまで大きな音は出せませんが、それでも騒がしい屋外であっても十分に聞こえる音量を確保できます。

# 最後に

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Ver.2.0b 進捗です！<a href="https://twitter.com/hashtag/%E3%81%91%E3%82%82%E3%81%AE%E3%83%95%E3%83%AC%E3%83%B3%E3%82%BA?src=hash&amp;ref_src=twsrc%5Etfw">#けものフレンズ</a><a href="https://twitter.com/hashtag/%E3%82%B8%E3%83%A3%E3%83%91%E3%83%AA%E3%82%AA%E3%83%AB%E3%82%B4%E3%83%BC%E3%83%AB?src=hash&amp;ref_src=twsrc%5Etfw">#ジャパリオルゴール</a> <a href="https://t.co/KargX4eBgu">pic.twitter.com/KargX4eBgu</a></p>&mdash; 七瀬 / リカオンのやべーやつ (@nanase_coder) <a href="https://twitter.com/nanase_coder/status/1075430632442871808?ref_src=twsrc%5Etfw">2018年12月19日</a></blockquote>

YMF825Board を手にし、[サファリメロディーを響かせて](https://qiita.com/nanase/items/93df2fbb3dbb86da5b97)から1年が経ちました。持ち出しやすさと扱いやすさの両立を目指したジャパリオルゴールは佳境に入りました。

ハードウェア編、ソフトウェア編で紹介した Ver.1.1 を改良し、現在 Ver.2.0 を製作中です。部品の変更やピンアサインの変更、LCD対応化による演奏データの更新などがあり、両バージョンの互換性は失われる見込みです。しかし機能は変わらず、いつでもどこでも鳴らすことのできる電子オルゴールであることには変わりありません。

昨年に引き続き、今年も [けものフレンズ Advent Calendar 2018](https://adventar.org/calendars/3071) を作らせていただきました。エンジニア僅少のけもフレ界では参加者が少なく、実質自分だけになってしまいましたが、また一年後、5記事くらい書けるような変化があれば開催したいと思います。

2019年も けものフレンズと、けものフレンズを愛する皆さんにとって実り多き一年となることを切に願っています。


---

[ジャパリオルゴールを作ってみた（紹介編）](https://qiita.com/nanase/items/2969993ba93499d03d8d) : **最初の記事**

[ジャパリオルゴールを作ってみた（ハードウェア編）](https://qiita.com/nanase/items/70345256ce4163402f41)

[ジャパリオルゴールを作ってみた（ソフトウェア編）](https://qiita.com/nanase/items/4e9c46f154fed15ac1bd)