ファンアウト仙台
概要 †
小型マイコンボード(Digispark), 電池, スピーカー, スイッチの4つの部品だけで作れる電子オルゴールです。パソコンから USB 経由でプログラムを書き込むことで、希望の音楽を鳴らせます。ハンダ付けは必要ありませんので、電子工作が初めての方や小さいお子さんでも作れるようになっています。
2018/12/1(土)-2(日) の Ogaki Mini Maker Faire 2018 のワークショップで作っていただく予定です。
ワークショップについて †
- 無事終了しました。多数のご参加、どうもありがとうございました。
- イベント: Ogaki Mini Maker Faire 2018 ワークショップ「はんだを使わない不思議な電子工作 - 電子オルゴールを作ろう!!」(ファンアウト仙台)
- 会場:岐阜県大垣市 ソフトピアジャパンセンタービル ワークショップエリア B
- 日時
- 1回目: 2018/12/1(土) 12:45-13:30
- 2回目: 2018/12/2(日) 12:45-13:30
- 費用: 1,000円(部品代)
- 紹介文: 電子オルゴールの制作、所要時間約45分、5~10組程度。マイコンボードを使った電子オルゴールを作ります。ハンダごては使わず、コードをソケットにさしこむだけで電子回路ができるように工夫してあります。簡単に作れますので、電子工作の経験は不要で、小学校低学年から参加可能です(もちろん経験者の方も歓迎です)。電子部品の接続、木製ボックスへの組み込みを行い、曲を選んでマイコンに書き込む作業を行います。
参加申し込み方法 †
- 材料の準備のため、ワークショップに参加を希望される方は申し込みをお願いします。下記の2点を記入して fanoutsendai@lait.sakura.ne.jp にメールでお知らせいただくか、または Twitter で @milktolait にメッセージを送信して下さい。
- お名前(ペンネーム/ニックネームでも結構です)
- 参加希望日(1回目 または 2回目)
- 材料に余裕があれば、当日も展示ブース(会場1階-19番 ファンアウト仙台)で受付を行います。
ワークショップ用マニュアル †
ワークショップ制作物紹介 †
- ワークショップでは、写真のようなオルゴール+小物入れを作成します。木箱のふたを開けると右上のスイッチが入って曲が鳴ります。曲は下記の動画の中から選んでマイコンボードに書き込みます。右側のカバーの中にマイコンボード(Digispark),電池,スピーカーが入っています。
オルゴール演奏の動画 †
- 「トランペット吹きの休日*」です。 運動会でよく聞くあの曲です。
- 大黒摩季さんの「熱くなれ*」です
- TUBE の「さよならイエスタデイ* 」です
- 広瀬香美さんの「幸せをつかみたい*」です
- 星野源さんの「恋*」です。ドラマ「逃げるは恥だが役に立つ」の主題歌です。
- ゆずの「雨のち晴レルヤ△」です。NHK 連続テレビ小説「ごちそうさん」の主題歌です。
- 井上あずみさんの「さんぽ*」です。 映画「となりのトトロ」に使われています。
- RADWIMPS の「前前前世*」です。映画「君の名は。」の主題歌です。
- B.B.クィーンズの「おどるポンポコリン*」です。アニメ「ちびまる子ちゃん」の初代エンディングテーマ曲です。
※ * 印の曲は JASRAC 管理作品(許諾済)です
※ △ 印の曲は NexTone 管理作品(許諾済)です
特徴 †
- Digispark(AVR ATTiny85) 1個で作成。4.5~6V で動作します。
- 疑似正弦波 4音を同時に鳴らせます。
- PWM でスピーカーを直接駆動しています。
- 過去の(身内向け)イベントで使った解説(2018年5月:宇都宮)
電子オルゴールのソースコードとバイナリファイル †
- スピーカーは大きめのものを使って下さい。ピエゾブザーではとても貧弱な音しか出ません
- 曲データは 4 パートの MML を付属の perl スクリプトで変換して作っています。Standard MIDI ファイルを PetiteMM というツールで MML に変換して鳴らすこともできました(ただし1チャンネルに1音しか入れられないので制約があります)
- ワークショップマニュアルにある追加機能(早送り等)も使えます
Digispark プログラミング雑記 †
- Digispark を使いましたが avr-gcc (GCC) 5.4.0 で開発しました。Arduino のライブラリは使用していません。
- PWM 周波数 64kHz では4音同時発音が間に合いません。32kHz ではなぜか出力音声にノイズが目立ってしまいます。そこでぎりぎり処理が間に合う 42.5kHz にしています。
- MML を解釈して音符のデータを生成する Perl スクリプトを作って曲データを C 言語のソースファイル形式に変換しています。最初はマビノギ MML 用でしたが、その後他の形式の MML も受け付けるようにしたら PetiteMM の出力も読めるようになりました。正規表現を使って MML の文字列を順に読んで置き換えていくものです。ループを含む MML の処理は Perl では難しくてできませんでした。
- MML のように音符の羅列を再生していく方式ではどうしてもパート間のずれが解消できなかったので、数小節に一回同期マークを入れて、パート間で待ち合わせをしています。
- 曲データは基本的には1音符1バイト(音程6bit, 長さ2bit)で表現しています。
- 正弦波を8点でサンプリングした波形を合成して音を出しています。サンプリング点が少ないせいか回路のせいか正弦波らしい音色にならず、8bit サウンドっぽい音が出ます。128点サンプリングにするともっと柔らかい音になりますが、音量が小さくなりすぎて断念しました。
- PB0 から 8bit の PWM を出力しています。また PB2 の H/L を反転させることで、正負両方向の 8bit PWM 出力にして、擬似的に 9bit(512段階) にしています。正負両方向にすることでだいぶ音量が大きくなりました。これは処理方法によってはひどいノイズが出ますが、今回は大丈夫でした。
- PB1 の LED を点滅させています。PB1 からは常に PB0 の PWM 波形を反転させた出力が出ており制御できません。そこで PB1 を入力にしたり出力にしたりして点滅させています。そのため全く無音の間は LED は点灯しません。
- 待ち時間短縮機能: 電源 ON 直後に Digispark のブートローダーが、書き込み待ちのために数秒間 WAIT を入れるため、電源を入れてから曲が鳴り始めるまでにタイムラグがあります。そこで Digispark のブートローダー(micronucleus)を書き換えて、BP2 を内部プルアップした上で読んで、L の時は書き込み待ちをしないようにしました。PB2 はスピーカー出力にも使っていますので、スピーカー出力に極力影響を与えずに、起動時に BP2 を L にするために、BP2 に 4.7kΩのプルダウン抵抗を入れる方法をマニュアルに載せました。
- 早送り機能: BP3 が L の間は曲を早送りします。しかし Digispark では BP3 (と BP4) は USB 端子に接続されているため、USB からの信号によっては不定期に L になってしまいます。そこで、BP3 がある期間以上連続で L になっている間だけ早送り処理を行っています。こちらも 4.7kΩのプルダウン抵抗と早送り用スイッチを入れる方法をマニュアルに載せました。
Counter: 8077,
today: 1,
yesterday: 2