[[ファンアウト仙台]]

**概要 [#o9219b6c]
小型マイコンボード(Digispark), 電池, スピーカー, スイッチの4つの部品だけで作れる電子オルゴールです。パソコンから USB 経由でプログラムを書き込むことで、希望の音楽を鳴らせます。ハンダ付けは必要ありませんので、電子工作が初めての方や小さいお子さんでも作れるようになっています。 
2018/12/1(土)-2(日) の [[Ogaki Mini Maker Faire 2018:https://www.iamas.ac.jp/ommf2018/]] のワークショップで作っていただく予定です。

**ワークショップについて [#e1273c7b]
-無事終了しました。多数のご参加、どうもありがとうございました。
-イベント: [[Ogaki Mini Maker Faire 2018:https://www.iamas.ac.jp/ommf2018/]] ワークショップCOLOR(RED){「はんだを使わない不思議な電子工作 - 電子オルゴールを作ろう!!」}(ファンアウト仙台)
-会場:岐阜県大垣市 ソフトピアジャパンセンタービル COLOR(RED){ワークショップエリア B}
-日時
--1回目: 2018/12/1(土) 12:45-13:30
--2回目: 2018/12/2(日) 12:45-13:30
-費用: COLOR(RED){1,000円(部品代)}
-紹介文: 電子オルゴールの制作、所要時間約45分、5~10組程度。マイコンボードを使った電子オルゴールを作ります。ハンダごては使わず、コードをソケットにさしこむだけで電子回路ができるように工夫してあります。簡単に作れますので、電子工作の経験は不要で、小学校低学年から参加可能です(もちろん経験者の方も歓迎です)。電子部品の接続、木製ボックスへの組み込みを行い、曲を選んでマイコンに書き込む作業を行います。

**参加申し込み方法 [#l1538644]
-材料の準備のため、COLOR(RED){ワークショップに参加を希望される方は申し込みをお願いします。}下記の2点を記入して fanoutsendai@lait.sakura.ne.jp にメールでお知らせいただくか、または Twitter で @milktolait にメッセージを送信して下さい。
--お名前(ペンネーム/ニックネームでも結構です)
--参加希望日(1回目 または 2回目)
-材料に余裕があれば、当日も展示ブース(会場1階-19番 ファンアウト仙台)で受付を行います。

**ワークショップ用マニュアル [#u08cc908]
-&ref(はんだを使わない不思議な電子工作-電子オルゴールを作ろう!!.pdf);
-&ref((追加)はんだを使わない不思議な電子工作-電子オルゴールを作ろう!!.pdf);
 
**ワークショップ制作物紹介 [#r73d7b69]
-ワークショップでは、写真のようなオルゴール+小物入れを作成します。木箱のふたを開けると右上のスイッチが入って曲が鳴ります。曲は下記の動画の中から選んでマイコンボードに書き込みます。右側のカバーの下にマイコンボード(Digispark),電池,スピーカーが入っています。

#ref(オルゴール2.jpg,zoom,640x480)

***オルゴール演奏の動画 [#i2d2fc9f]
--「トランペット吹きの休日*」です。 運動会でよく聞くあの曲です。
---[[Digispark(AVR ATTiny85) PWM Musicbox - Bugler's Holiday:https://www.youtube.com/watch?v=Som5Cgn2Iw8]]
--大黒摩季さんの「熱くなれ*」です
---[[Digispark(AVR ATTiny85) PWM Musicbox [Ohguro Maki] Atsuku-nare:https://www.youtube.com/watch?v=EREvpceZeLk]]
--TUBE の「さよならイエスタデイ* 」です
---[[Digispark(AVR ATTiny85) PWM Musicbox [TUBE] Sayonara Yesterday:https://www.youtube.com/watch?v=tk0_-Ws-Abc&t=4s]]
--広瀬香美さんの「幸せをつかみたい*」です
---[[Digispark(AVR ATTiny85) PWM Musicbox [Hirose Kohmi] Shiawase Wo Tsukamitai:https://www.youtube.com/watch?v=YFy5UGOXVx8&feature=youtu.be]]
--星野源さんの「恋*」です。ドラマ「逃げるは恥だが役に立つ」の主題歌です。
---[[Digispark(AVR ATTiny85) PWM Musicbox [Hoshino Gen] Koi:https://www.youtube.com/watch?v=HnIfEBCP59Y&feature=youtu.be]]
--ゆずの「雨のち晴レルヤ△」です。NHK 連続テレビ小説「ごちそうさん」の主題歌です。
---[[Digispark(AVR ATTiny85) PWM Musicbox [Yuzu] Ame Nochi Hareruya:https://www.youtube.com/watch?v=vpwD6aea7Gg&t=69s]]
--井上あずみさんの「さんぽ*」です。 映画「となりのトトロ」に使われています。
---[[Digispark(AVR ATTiny85) PWM Musicbox [Inoue Azumi] Sanpo:https://www.youtube.com/watch?v=mXfFe2vyk8g&t=27s]]
--RADWIMPS の「前前前世*」です。映画「君の名は。」の主題歌です。
---[[Digispark(AVR ATTiny85) PWM Musicbox [RADWIMPS] Zenzenzense:https://www.youtube.com/watch?v=oEBDa0znEy4&feature=youtu.be]]
--B.B.クィーンズの「おどるポンポコリン*」です。アニメ「ちびまる子ちゃん」の初代エンディングテーマ曲です。
---[[Digispark(AVR ATTiny85) PWM Musicbox [BB Queens] Odoru Ponpokorin:https://www.youtube.com/watch?v=KVZvFVZInX0&feature=youtu.be]]

※ * 印の曲は JASRAC 管理作品(許諾済)です~
※ △ 印の曲は NexTone 管理作品(許諾済)です~

**特徴 [#r636ad8e]
-Digispark(AVR ATTiny85) 1個で作成。4.5~6V で動作します。
-疑似正弦波 4音を同時に鳴らせます。
-PWM でスピーカーを直接駆動しています。
-過去の(身内向け)イベントで使った解説(2018年5月:宇都宮)
--&ref(Digispark で作る3和音電子オルゴール.pdf); → その後4音化しました

**電子オルゴールのソースコードとバイナリファイル [#e077cef2]
-ダウンロード
--&ref(musicbox-20181201.zip); 
-電子オルゴールの GCC ソースファイル(Tiny85用)と、サンプル曲3曲(クラシック) をコンパイルしたバイナリ(sound.hex)、サンプル曲を実際にオルゴールで演奏して録音した mp3 ファイルが含まれています。著作権継続中の曲は入っていません。
-Tiny85 の場合は LFUSE を F1H(クロック16MHz) に設定して、フラッシュメモリにファームウェア sound.hex を書き込みます
-Digispark の場合は、Windows(32/64bit共通) 上で [[DigisparkArduino:https://sourceforge.net/projects/digistump/files/DigisparkArduino-Win32-1.0.4-May19.zip/download]] に含まれる DigisparkArduino-Win32\DigisparkWindowsDriver\InstallDriver.exe を実行してドライバをインストールし、書き込みツール [[micronucleus.exe:http://purose.net/fanout/index.php?plugin=attach&pcmd=open&file=micronucleus-static.zip&refer=Digispark%E6%B8%A9%E5%BA%A6%E8%A8%88]] を使って、次のコマンドで書き込みます。
 > micronucleus.exe --run sound.hex
-PB0 と PB2 の間に 8Ω(または32Ω)のスピーカーを接続して、Vcc, GND に電源を接続するだけで鳴ります。Digispark の場合は USB コネクタを PC や USB 電源アダプタにさせば鳴ります。動作中は PB1 に接続された LED が点滅します。5V 電源では 1ピンあたりの電流が定格を超えますので、心配な場合は 50-100Ω の抵抗を直列に入れて下さい。

&ref(sche.png,zoom,320x240);
(LFUSE=F1H)

-スピーカーは大きめのものを使って下さい。ピエゾブザーではとても貧弱な音しか出ません
-曲データは 4 パートの MML(Music Macro Language) を付属の perl スクリプトで変換して作っています。Standard MIDI ファイルを [[PetiteMM:http://gocha.hatenablog.com/entry/2013/09/02/PetiteMM]] というツールで MML に変換して鳴らすこともできました(ただし1チャンネルに1音しか入れられないので制約があります)
-ワークショップマニュアルにある早送り機能も使えます

**Digispark オルゴールプログラミング雑記 [#zdb76d88]
-Digispark を使いましたが C 言語で avr-gcc (GCC) 5.4.0 で開発しました。Arduino のライブラリは使用していません。
-PWM 周波数 64kHz では4音同時発音が間に合いません。32kHz ではなぜか出力音声にノイズが目立ってしまいます。そこでぎりぎり処理が間に合う 42.5kHz にしています。
-MML(Music Macro Language) を解釈して音符のデータを生成する Perl スクリプトを作って曲データを C 言語のソースファイル形式に変換しています。当初はマビノギ MML 用でしたが、その後他の形式の MML も受け付けるようにしたら PetiteMM の出力も読めるようになりました。正規表現を使って MML の文字列を順に読んで置き換えていくものです。ループを含む MML の処理は Perl では難しくてできませんでした。
-MML のように音符の羅列を再生していく方式ではどうしてもパート間のずれが解消できなかったので、数小節に一回同期マークを入れて、パート間で待ち合わせをしています。
--192分音符までに制限すればパート間のずれが解消できることが分かりました
--これは発声時間がタイマで正確に割り切れないための現象で、192分音符までに制限すればパート間のずれが解消できることが分かりました
-曲データは基本的には1音符1バイト(音程6bit, 長さ2bit)で表現しています。
-正弦波を8点でサンプリングした波形を合成して音を出しています。サンプリング点が少ないせいか、LPF を入れていない回路のせいか正弦波らしい音色にならず、8bit サウンドっぽい音が出ます。128点サンプリングにするともっと柔らかい音になりますが、音量が小さくなりすぎて断念しました。
-PB0 から 8bit の PWM を出力しています。また PB2 の High/Low を反転させることで、正負両方向の 8bit PWM 出力にして、擬似的に 9bit(512段階) にしています。正負両方向にすることでだいぶ音量が大きくなりました。これは処理方法によってはひどいノイズが出ますが、今回は大丈夫でした。
-PB1 の LED を点滅させています。PB1 からは常に PB0 の PWM 波形を反転させた出力が出ており制御できません。そこで PB1 を入力にしたり出力にしたりして点滅させています。そのため全く無音の間は LED は点灯しません。
-待ち時間短縮機能: 電源 ON 直後に Digispark のブートローダーが、書き込み待ちのために数秒間 WAIT を入れるため、電源を入れてから曲が鳴り始めるまでにタイムラグがあります。そこで Digispark のブートローダー(micronucleus)を書き換えて、BP2 を内部プルアップした上で読んで、L の時は書き込み待ちをしないようにしました。PB2 はスピーカー出力にも使っていますので、スピーカー出力に極力影響を与えずに、起動時に BP2 を L にするために、BP2 に 4.7kΩのプルダウン抵抗を入れる方法をマニュアルに載せました(ただしブートローダの書き込みが必要なため、市販の Digispark ではできません)。Digispark ではなく Tiny85 に直接ファームウェアを書き込んで使う場合は、ブートローダの待ち時間はありませんので、電源を入れるとすぐ演奏が始まります。
-早送り機能: BP3 が L の間は曲を早送りします。しかし Digispark では BP3 (と BP4) は USB 端子に接続されているため、USB からの信号によっては不定期に L になってしまいます。そこで、BP3 がある期間以上連続で L になっている間だけ早送り処理を行っています。こちらも 4.7kΩのプルダウン抵抗と早送り用スイッチを入れる方法をマニュアルに載せました。

----
#counter



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS