YMZ294を使ってファミコン風電子オルゴールを作ってみた【初音ミク誕生祭2022】

電子工作

背景

電子部品販売代理店のマウザーエレクトロニクス様から、8/31の初音ミク誕生祭に関連した電子工作を作っていただけないか、と提案を受けて作りました。マウザー様のサイト内のForteという部品表作成ツールを使って部品を選定し、ご提供いただいたものを一部使用しています。

  • キャパシタ 100uF
  • オシレータ 4MHz
  • Arduino Pro Mini

ちなみに音源ICとして使っているYMZ294はマウザー様のサイトでは見つからなかった(古いICだからね)ので、秋月電子から購入しています。(Aliexpressでも買えるけど、よくわからない互換品が届くゾ!)
https://akizukidenshi.com/catalog/g/gI-12141/

動画

YouTube

ニコニコ動画

解説

ヤマハ音源ICのYMZ294を使って音を鳴らしています。これは比較的シンプルなICで、ファミコンの様な音を3和音まで鳴らすことができ、本基板ではこのICを2つ使って6和音まで鳴らせるようにしています。このICの出力はアナログではなく、デジタル的な矩形波の周期を変えているようで、3和音+3和音の合成もそのまま出力をつなげれば良い…らしい。
アナログ回路は苦手なのだが、今回は割と素直に鳴ってくれた。可変抵抗(VR_Thin)で音量を変えて、スピーカーにはHT82V739というアンプICを使っている。このアンプはマイコンからON/OFFを切り替えられる他、手動のスイッチ(ジャンパ:JP2)でもON/OFFを切り替えられるようにしている。これはスピーカーを鳴らしたくない時にOFFにできる機能である(イヤホン経由では聞くことができる)。もう一つの特徴として、YMZ294は4MHzのオシレーターという一定の周波数を出す部品が必要なのだけど、秋月電子とかでは売っていない。もちろんマウザー様では買える(ヨイショ)のだが、Arduino Pro Miniが8MHz/16MHzで動作するので、オシレーターが無くてもこの周波数をそのままYMZ294に送れば良いじゃんということで、D9ピン信号を送れるようになっている(SJ1をショートさせる)。この回路で失敗したのはArduino Pro Mini のSPI出力(DP10,11,12,13)をYMZ294の制御用に使ってしまったことである。SPI出力をSDカードの読み込み用に使えば、長時間の再生にも対応できたのだが…。元々他のデバイスからI2C入力を送って演奏しようとしていたことからの失敗。

Arduinoコード

Arduinoコード本体

track0は「メルト」のMIDIコードである。また、上の配線と異なり、AD_PINとA0をつなぐところが実際はA3とつないでしまったため、そこをコード内では修正している。(どうやら使用したArduino Pro Miniのライブラリと実際のものが異なっていたようである)

YMZ294Kaiライブラリ

元々のライブラリはhttps://wp.hrmux.com/?page_id=991に公開されているものを使用している。複数のYMZ294を制御できるようにするため、元のライブラリでWRとCSを同時に制御していた所を分離して使用している。YMZ294を定義する時の「YMZ294 ymz1(WR_PIN, CS1_PIN, AD_PIN, RESET_PIN);」WR_PINとCS1_PINを同じピン番号にすれば元のライブラリと同じような使い方ができるが、その場合はYMZ294は一つ分しか使えない。

YMZ294Kai.zip

今後

今回は初音ミク誕生祭に間に合わせるためにシンプルな電子オルゴールにしたのだが、元々はカメラでコードを読み取って演奏するようなデバイスを作ってみたいということが発端だったので、そっちのほうの検討も進めたい。

コメント

タイトルとURLをコピーしました