私だけの電子オルゴール ♪ MyMelo2 ♪ |
1. 概要 2. ソフトウェアの準備 3. 楽譜データの作成 4. 電子オルゴールの組み立て 5. プログラムの書き込み 6. 使い方 7. 製作例 8. ものづくり教室などでの活用例 (付録1) 音の工夫 (付録2) 製作のTips |
子どもからおとなまで楽しめる電子オルゴール教材です。趣味のものづくり、夏休みものづくり教室、総合的な学習、卒業記念制作で校歌のオルゴールづくり、理工系教育の導入教材などに活用できます。
電子オルゴールは市販もされているものもありますし、プログラミングの練習でも取り上げられたりしますが、ここで作る電子オルゴールは次の特徴があります。
波形(音色) | ||
---|---|---|
減衰矩形波 | 減衰正弦波 | 減衰正弦波 (伴奏は三角波) |
2和音 2和音ステレオ 3和音 3和音ステレオ 校歌1 校歌2 校歌3 とうほくで... |
2和音 2和音ステレオ 3和音 3和音ステレオ 校歌1 校歌2 校歌3 とうほくで... |
2和音 2和音ステレオ 3和音 3和音ステレオ 校歌1 校歌2 校歌3 とうほくで... |
マイコン | 電池で動作 | 波形(音色)と発音デバイス | 備考 | ||
---|---|---|---|---|---|
減衰矩形波 | 減衰正弦波 (ピアノ音) |
減衰正弦波 (伴奏は三角波) | |||
ArduinoUNO/NANO | △ | 〇 スピーカー 〇 圧電サウンダ |
△ 圧電サウンダ 圧電サウンダを使う場合は大き目のもの(30mmφ程度)を選び 高めの音階で楽譜を作るとうまくいきます。 |
fPWM=62.5kHz(T=16us), fs=31.25kHz(T=32us) | |
Digispark | △ | fPWM=250kHz(T=4us), fs=31.25kHz(T=32us) | |||
ATtiny45/85 | 〇 | fPWM=250kHz(T=4us), fs=31.25kHz(T=32us) | |||
ATtiny2313(A)/4313 | 〇 | fPWM=31.25kHz(T=32us), fs=15.625kHz(T=64us) | |||
ATmega328P | 〇 | fPWM=31.25kHz(T=32us), fs=15.625kHz(T=64us) |
下の写真は小学校での卒業制作の例で、子どもたちは好きな曲を楽譜から入力し、ブレッドボードで作りました。
製作の手順は概ね次のとおりです。
サクラで作成 |
メモ帳で作成 |
サクラで作成(2和音の楽譜) |
メモ帳で作成(2和音の楽譜) |
ダウンロードしたファイルを解凍し、「mymelo2.wsf.txt」のファイル名を「mymelo2.wsf」に変更します。ファイル名を変更する際は、エクスプローラの[フォルダオプション][表示]で「登録されている拡張子は表示しない」のチェックをはずしておくことをお勧めします。
楽譜はメモ帳などで作ってもよいのですが、「サクラ」を使うと演奏させて確かめながら作ることができます。
ダウンロードしたファイルを解凍し、C:\Arduinoフォルダに移します。C:\Arduino\arduino-ide_2.3.2_Windows_64bit\Arduino%20IDE.exeのショートカットをデスクトップにArduino-2.3.2として作ります。
ArduinoIDEを起動し、[ツール][ボード]でArduino UNOまたはNANOを選び、[ツール][ポート]でポートを選択します。
ドライバをダウンロードし、DPinst(32bit Windows用)またはDPinst64(64bit Windows用)をインストールします。その後、ArduinoIDEを起動し、[ファイル][環境設定]の[追加のボードマネージャのURL]の右端のボタンを押し、
[ツール][ボード]で「Digispark(Default-16.5mhz)」を選び、[ツール][書き込み装置]で「Micronucleus」を選びます。Digisparkの詳細はここに、Digispark用Arduinoについてはここにあります。
書き込み装置(AVRライター)が必要となります。書き込み装置については、こちらのページをご覧ください。
ATTiny45/85/2313(A)/4313の場合は、ArduinoIDEで[ファイル][環境設定]の[追加のボードマネージャのURL]の右端のボタンを押し、
ATmega328Pの場合は、ボードマネージャで Barebones ATmega Chips(no bootloader) をインストールします。
冒頭の図のように楽譜を作ります(日本語コードはシフトJIS)。「ドレミ」で楽譜を表現できるので、(私のように)5線符が苦手な方も大丈夫です。
このような楽譜は「MML形式」と呼ばれます。電子オルゴールでは、下の表の命令を使うことができます。解釈できない命令はなるべく無視するようにしましたが、サクラで演奏できる楽譜がすべてオルゴールにできるわけではありませんのでご注意ください。サクラのsampleの中ではsakura2.mmlだけがオルゴールにすることができます。
書き方 | 例 | 説明 |
---|---|---|
ド, ど, c | ド8, c16, ド.(「.」は付点音符) | ドの音。「ド8」のように音符と組み合わせます。音符を省略すると「音符(またはl)」で指定した値となります。 |
レ, れ, d | レの音 | |
ミ, み, e | ミの音 | |
ファ, ふぁ, f | ファの音 | |
ソ, そ, g | ソの音 | |
ラ, ら, a | ラの音 | |
シ, し, b | シの音 | |
ッ, ン, っ, ん, r | ドーーッ, レッレー, ッー | 休符 |
ー, ^ | ドードレミーー | 音を伸ばします。「ド.ー」のように付点音符は伸ばせません。 |
連符, Div | 連符{ドドド}, Div{ccc} | 3連符のみ。また「12分音符」は使えません。連符内での音階の変更はできません。 |
「...」, '...' | 「ドレミ」, 'cde' | 本来は和音ですが、最初の音(この例ではド)のみが使われます。既存の楽譜でエラーにならないようにしただけなので、積極的に使う意味はありません。 |
【...】, [...] 【...:...】, [... : ...] | 【ミミソー】, [eeg^] | 【...】の中を2回繰り返して演奏します。「:」があると、2度目はそこで終わります。回数を指定する場合は【4...】のようにします。 |
#, + | ド#8., a+ | 半音上げ。 |
♭, - | レ♭8., b- | 半音下げ。 |
上, ↑, > | 音階を1つ上げます | |
下, ↓, < | 音階を1つ下げます | |
` | `ド, ``ド | 次の音の音階を1つ上げます |
" | "シ, ""シ | 次の音の音階を1つ下げます |
音階, o | 音階5, o5 | 音階(オクターブ)を指定します。省略時は4。 |
音符, l | 音符8, l8 | 1,2,4,8,16,32の中から省略時の音符を指定します。省略時は4(4分音符)。 |
テンポ, Tempo | テンポ120, Tempo=120 | テンポ(毎分の4分音符の拍数)を設定します。省略時は120。曲の途中でテンポを変更することはできません。 |
調, System.KeyFlag | 調#(ドファソ), System.KeyFlag+=(cfg) | 調(キー)を設定します |
トラック, Track, TR, NowTrack | トラック3, Track=3 | 伴奏付きの楽譜でトラックの始まりを表します。トラック1~3で、トラック1を主旋律とします。単音の曲は記載不要。 |
Key(数値) | Key(-3) | 半音単位で移調します。複数書いた場合は最初のひとつが有効となり、全体に適用されます。(20230704機能追加) |
// | 以後、行末までコメント |
|
はじめに mymelo2.wsf をダブルクリックして楽譜データを初期化します。その際、下図のようなダイアログボックスが現れるので、矩形波、正弦波、正弦波(伴奏は三角波)のいずれかを選択します。ボタンの名称がわかりにくいので注意してください。楽譜データファイル(mymelo2フォルダのmymelo2.h)が初期化されます。
|
楽譜ファイル(〇〇.mml)を mymelo2.wsf にドラッグ&ドロップすると、楽譜データファイルに楽譜データが記録されます。
引き続き別の楽譜ファイル(〇〇.mml)をmymelo2.wsfにドラッグ&ドロップすると、楽譜データファイルに2曲目、3曲目、...が追加されます。
楽譜データを変更する場合は、(2)の初期化からやり直してください。
圧電サウンダまたはスピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。ピアノ音(減衰正弦波)の音を出したい場合は、圧電サウンダではなくスピーカーを接続してください。
(圧電サウンダ) | (スピーカー) |
---|
押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。
(圧電サウンダ) | (スピーカー) |
---|
2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。
(2曲電子オルゴール) |
---|
2個のスピーカーを接続すると、主旋律(トラック1)と伴奏(トラック2・トラック3)がそれぞれ別のスピーカーから再生され、ステレオ電子オルゴールになります。
(ステレオ電子オルゴール) |
---|
圧電サウンダまたはスピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。ピアノ音(減衰正弦波)の音を出したい場合は、圧電サウンダではなくスピーカーを接続してください。
(圧電サウンダ) | (スピーカー) |
---|
押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。
(圧電サウンダ) | (スピーカー) |
---|
2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。
(2曲電子オルゴール) |
---|
2個のスピーカーを接続すると、主旋律(トラック1)と伴奏(トラック2・トラック3)がそれぞれ別のスピーカーから再生され、ステレオ電子オルゴールになります。
(ステレオ電子オルゴール) |
---|
圧電サウンダまたはスピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。ピアノ音(減衰正弦波)の音を出したい場合は、圧電サウンダではなくスピーカーを接続してください。
(圧電サウンダ) | (スピーカー) |
---|
以下は小型のスピーカー(UGSM23A)を接続する様子で、スピーカーのピンをペンチで折り曲げておくと、差すだけでOKです。
押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。
(圧電サウンダ) | (スピーカー) |
---|
2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。
(2曲電子オルゴール) |
---|
2個のスピーカーを接続すると、主旋律(トラック1)と伴奏(トラック2・トラック3)がそれぞれ別のスピーカーから再生され、ステレオ電子オルゴールになります。
(ステレオ電子オルゴール) |
---|
圧電サウンダまたはスピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。ピアノ音(減衰正弦波)の音を出したい場合は、圧電サウンダではなくスピーカーを接続してください。
(圧電サウンダ) | (スピーカー) |
---|
押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。
(圧電サウンダ) | (スピーカー) |
---|
2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。
(2曲電子オルゴール) |
---|
2個のスピーカーを接続すると、主旋律(トラック1)と伴奏(トラック2・トラック3)がそれぞれ別のスピーカーから再生され、ステレオ電子オルゴールになります。
(ステレオ電子オルゴール) |
---|
圧電サウンダまたはスピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。ピアノ音(減衰正弦波)の音を出したい場合は、圧電サウンダではなくスピーカーを接続してください。
(圧電サウンダ) | (スピーカー) |
---|
下図はブレッドボードを使わずに半田付けで組み立てた様子です。板状の圧電サウンダは、紙コップや缶に両面テープで張り付けます(7章の製作例を参考にしてください)。
押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。
(圧電サウンダ) | (スピーカー) |
---|
2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。
(2曲電子オルゴール) |
---|
2個のスピーカーを接続すると、主旋律(トラック1)と伴奏(トラック2・トラック3)がそれぞれ別のスピーカーから再生され、ステレオ電子オルゴールになります。
(ステレオ電子オルゴール) |
---|
圧電サウンダまたはスピーカーを接続すれば、すぐに試してみることができます。電源を入れた時にメロディーが1回再生されます。スピーカーの場合は抵抗を直列に入れますが、無くても大丈夫です。ピアノ音(減衰正弦波)の音を出したい場合は、圧電サウンダではなくスピーカーを接続してください。
(圧電サウンダ) | (スピーカー) |
---|
押しボタンスイッチを接続すると、ボタンを押すとメロディーが再生されます。
(圧電サウンダ) | (スピーカー) |
---|
2個の押しボタンスイッチを接続すると、2つのボタンでそれぞれ別の曲を再生できます。
(2曲電子オルゴール) |
---|
2個のスピーカーを接続すると、主旋律(トラック1)と伴奏(トラック2・トラック3)がそれぞれ別のスピーカーから再生され、ステレオ電子オルゴールになります。
(ステレオ電子オルゴール) |
---|
書き込み装置とArduinoIDEの操作については、こちらのページをご覧ください。
電源を投入すると、(1曲目の)メロディーが再生されます。
押しボタンスイッチをつなぐと、スイッチを押したときに再生されます。再生中にスイッチを押すと停止します。
複数の曲を登録した場合、スイッチをトントンと2回押すと2曲目、3回押すと3曲目が再生されます(2024.03.25)。長押しで曲を選ぶこともできます。
2曲の場合は、押しボタンスイッチを2つつなぐと、一方を押すと1曲目、もう一方を押すと2曲目が再生されます。
実装に一工夫すると、とっても楽しくなります。以下はその一例です。
美術教育講座の佐藤光輝先生にお願いしたところ、学生さんが紙コップを使ってかわいい作品を作ってくれました。
附属特別支援学校の卒業制作で作りました。
板状の圧電サウンダを身近なものに貼り付けるとスピーカーに早変わりします。
いくつか作りましたが大変好評です。...校歌1(ブザー・スピーカー)・校歌2(ブザー・スピーカー)・校歌3(ブザー・スピーカー)
マグカップやケーキカップに付けてみました。マグカップは手に持って丁度親指の箇所にスイッチを付けました。曲は「乾杯」。また、ケーキカップは蓋を開けると音が出るようにしました。
100円ショップで購入したスピーカーを接続すると、音色も音量も格段に改善されます。抵抗が必要ですが無くても動作します。下図はブレッドボードを使った組み立て例と半田づけによる組み立て例です。事前にスピーカーの準備をしておけば、製作教室でも利用できます。
下図は2Lサイズの写真立てにスピーカーを付けた例です。
スピーカーを2つつなぐとステレオ電子オルゴールになります。スピーカーの接続方法が違うだけで、オルゴールのプログラムは一緒です。楽譜が2トラックからなる場合は、一方のスピーカーからトラック1の音が、もう一方のスピーカーからトラック1とトラック2の音が出ます。また、3トラックからなる場合は、一方のスピーカーからトラック1の音が、もう一方のスピーカーからトラック2とトラック3の音が出ます。試しに作ってみるのも楽しいと思います。
電池(単5)とマイコンを100円スピーカーの中に入れ、押しボタンスイッチで操作するようにしてみました。スピーカーの加工や部品の取り付けに少し手間がかかるので、製作教室には不向きかもしれません。なお、押しボタンスイッチの有無にかかわらず、オルゴールのプログラムは一緒です。スイッチを押すと1回演奏して停止します。また、演奏中にスイッチを押すと演奏を停止します。
下の写真は、弘前大学教育学部創立130周年記念行事(2006.9.30)で師範学校校歌の電子オルゴールを50台製作し、師範学校OBの方々に差し上げた時のものです。(音はこんな感じです。)
オルゴール部分はDigisparkで作り、フルカラーLED NeoPixelを用いたイルミネーションオブジェと組み合わせてみました。電子オルゴールの音に合わせてイルミネーションが変化します。オブジェの作り方はngo-tecさんのページを参考にしました。プログラムはtinyBasicで作りました。
写真立てと電子オルゴールの組み合わせは今まで何種類か作りましたが、以下の方法がシンプルで上品な感じに仕上がりましたので、製作メモとして紹介します。2011年3月に7台作り、特別支援学校を卒業する高等部の生徒さんにプレゼントしました。スピーカーは生徒達が作業学習で解体した家電機器からはずしたものを使いました。その後もこの方法で10台ぐらい作りました。
2024年、約10年ぶりに2台作りました。1台は山口岩男さんの「山刀伐峠」「ちょすなず」の2曲入りで、もう1台は「乾杯」「さくらさくら」「山刀伐峠」「鳥海山の歌」の4曲入りで結婚式のプレゼントです。
「山刀伐峠」「ちょすなず」 |
「乾杯」「さくらさくら」「山刀伐峠」「鳥海山の歌」 |
|
| ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
木板の加工 | PET樹脂板の加工 | ||||||||||||||||||||||
| |||||||||||||||||||||||
ケースの加工 |
100均のフォトフレームとクリアボックスを使った製作例です。
| 回路図 |
製作例その1の20mm厚の木板(廃材)と、100均のフォトフレームを組み合わせた製作例で、その1に比べてPET樹脂板の加工を省略できます。
| 回路図 |
写真や資料は内田直樹様に送っていただきました。
写真は吉満浩昭先生に送っていただきました。
秋谷啓児先生、安藤先生ありがとうございました。
サクラを使って楽譜入力
「好きな曲を...」と言うと子ども達は結構難しい曲を準備してきます
オルゴールの組み立て
間違わないようマイコンやブザーの結線位置にマジックで目印が付けてありました
先生が楽譜の書き込み
楽譜の入力ミスなどは臨機応変に修正が必要です
電子オルゴール付きのオリジナルCDラックが完成!! |
---|
CDラックを組み立てて、思い思いのデザインに。 オルゴールの取り付け位置もそれぞれに。 学校に来るのはあと10日あまりとなり、どれも小学校の思い出がたっぷり詰まったオルゴールでした。 |
写真や資料は北村和義先生に送っていただきました。
写真は石川周先生に送っていただきました。
写真やオルゴールの音は黒部義男先生に送っていただきました。
写真は佐々木信也様に送っていただきました。1時間単位で1日5回、2日で計10回、160人が訪れ盛況だったそうです。
倉崎剛先生にご連絡いただきました。
写真は谷岡政宏先生に送っていただきました。
写真は秋山等先生に送っていただきました。「学生が製作した金型を用いて、射出成形したハート型容器を使用した」とのことでした。
水野真先生にご報告いただきました。「スピーカーも作った」とのことでした。
写真は五十嵐誠先生に送っていただきました。
秋谷啓児先生 ありがとうございました。
写真は梁川道輔先生に送っていただきました。
写真や資料は長谷川博是先生に送っていただきました。
写真は山神啓志様に送っていただきました。
写真は賀戸哲也様に送っていただきました。
写真は野口誠之様に送っていただきました。ATtiny85を使い、曲は「エリーゼのために」。2日間で4回に分けて実施されたそうです。半田づけも楽しそうです。
写真は鈴木孝明先生に送っていただきました。
オルゴール付 三段ミニボックス |
オルゴール付 写真立て |
オルゴール付 ミニボックス |
写真や資料は石川周先生に送っていただきました。
[1] DTMF Generator, ATMEL Application Note AVR314, https://ww1.microchip.com/downloads/en/Appnotes/doc1982.pdf, 1982.
電子オルゴールの波形はPWM(パルス幅変調)という方法で作っています。PWM波形の1周期は、8MHzの内蔵クロックを用いる ATtiny2313(A)/4313, ATmega328P の場合32μs(下図)、16MHzの水晶クロックを用いるArduinoUNO/NANOでは16μs、64MHzのPLLクロックを用いるDigispark, ATtiny45/85では4μsとなります。高い電圧(3V)の時間を0/256~255/256の256段階で調整することにより(黒線の波形)、「平均的に」0V~3Vの電圧を作っています(赤線の波形)。なお、5Vで動作するArduinoUNO/NANOやDigisparkでは、0V~5Vの電圧で、より大きな音になります。
一方、マイコンからの値の指示は上記のPWM周期(4~32μs)ほど高速に行われるわけではありません。その時間(サンプリング周期)は、ArduinoUNO/NANO, Digispark, ATtiny45/85では32μs、ATtiny2313(A)/4313, ATmega328Pでは64μsです。
減衰矩形波の信号は、PWMのデューティ比を変えることにより下図のように作っています。図はラ(440Hz)の音の例で、矩形波の周期は2.27msです。図には表現しきれていませんが、実際には480μs毎に振幅(デューティ比)が255/256になるようにしています。
下図右は和音波形が作られる様子です(ラとドの合成波形)。
正弦波と三角波それぞれ1周期分256個の波形データを用意しています。このデータをサンプリング周期32μsごとに出力すると、122Hzの信号が出力されます。「ラ」の880Hzの信号を出力する時は、波形データを7個に1個の割合いで出力します(下図)。ただし、実際にはPWM波形です。この方法は[1]を参考にしました。
減衰波形は、乗算を使わずに、2つの正弦波形データの位相をずらして加算することにより作っています。三角関数の和積の公式から \[\cos 2\pi f t + \cos(2\pi f t + \phi) = 2\cos(2\pi f t + \cfrac{\phi}{2})\cos\cfrac{\phi}{2}\] なので、位相を\(\phi\)ずらして加算すると振幅は\(2 \cos \cfrac{\phi}{2}\)になります(下図)。
ただし、この方法で減衰三角波を作ることはできないので、減衰とともに音色が変化します。
圧電サウンダの場合はその必要はないのですが、スピーカーを使った際に少しでも省電力となるように直流分を抑える工夫をしています(下図)。
2つの正弦波の周波数を少しだけずらして加え合わせると、「うなり(振幅の変化)」を生じます。 \[\cos 2\pi(f+\Delta f) t + \cos 2\pi(f-\Delta f) t = 2 \cos 2\pi f t \cos 2 \pi (2 \Delta f) t\] 単音および2和音では、この方法で疑似的にビブラート効果を加えています(下図上)。
これまで音の出だしが固くクリック音のような感じがありました。これは波形の立ち上がりが急峻であったためですが、アタックタイム(約4ms)を設けることで改善しました(下図下)(2023.2.1)。
正弦波や三角波の波形データを変えると、音色が大きく変わります(mymelo.inoの冒頭部分のWs[]の箇所を変更)。波形データを工夫することにより、音色に変化をつけることができるので、興味のある方は試してみてください。
減衰正弦波の和音では、トラック2やトラック3の音量はトラック1の半分にしています。主旋律はトラック1、伴奏はトラック2やトラック3に書きましょう。
楽譜で音量を調整することはできません。
ATtiny45/85, ATtiny2313(A)/4313, ATmega328PなどマイコンICを使って作る場合、4章ではコンデンサを入れていませんが、電池が消耗してきた時などにも安定して動作するよう、以下のようにコンデンサを入れた方がいいです。Arduinoを使う場合はその必要はありません。
スピーカーを使う場合、4章では68Ωの抵抗を直列に入れていますが、とりあえず動作確認をする際は無くても動作します(大きな音がします)。音量を小さくしたい場合は、この値を大きくします。
以下は、ATtiny85用に作った片面プリント基板のレイアウトです。GND端子はもうひとつ付けた方がよかったですね。