自作電子工作🐇
ArduinoとEEPROMを使った電子オルゴール🎹
「Tiny蓄音機レコード仕様🍩」の作り方
<第3回>
「EEPROMから楽譜を読み取って演奏するプログラム」
【目次】
🍩 Tiny蓄音機レコード仕様を作ろう 🍩
🍩1回目「 構想とEEPROMについてと曲紹介」
🍩2回目「EEPROMに楽譜を記録♬ "レコード盤作り"」
🍩3回目「EEPROMから楽譜を読み取って演奏するプログラム」(この記事)
🍩4回目「トラブル1🐉 ArduinoのRAMが足りない..p_q..💦」
🍩5回目「[トラブル2🦇 tone関数ではすべての音符を鳴らせない」
🍩6回目「"ちびやっこ"意気消沈。お姉ちゃんの"みつは"は超オンチに🦆」
🍩7回目「Tiny蓄音機レコード仕様、実装します。& 動画🎬」
🍩8回目「Tiny蓄音機レコード仕様🎶 作り方まとめっ♬」
「Tiny蓄音機レコード仕様」~イメージ~
前回の記事でEEPROMに楽譜データを書き込むことができ、「EEPROMレコード盤🍩」が完成しました(∂. ∂🎀
今回はEEPROMからデータを読み込んで、音を出して楽譜を演奏するプログラムと配線を紹介します🍭
【読み出し演奏プログラムスケッチ】
このプログラムはArduinoに初めから備わっている"tone関数"を使ったスケッチ例「toneMelody」をベースにしています。
「toneMelody」のスケッチ例は、Arduino IDEのここ⇒ にあります。
このスケッチ(プログラム)に、EEPROMのデータを読み出すプログラムを書き加えて、読み出した楽譜データをtone関数で演奏します。
🍎 プログラム 🍎
// Tiny蓄音機実装用 [各曲共用] // 周波数を÷4で濃縮還元した曲用 #include<Wire.h> int eep_read(int device_add, unsigned int eep_add){ Wire.beginTransmission(device_add);//対象デバイスへ移動 Wire.write((int)(eep_add >> 8)); Wire.write((int)(eep_add & 0xff)); Wire.endTransmission(); Wire.requestFrom(device_add,1); if(Wire.available()){} return Wire.read(); } void setup() { Wire.begin(); } void loop() { int onpu = eep_read(0x50,0); //0番地から音符数を読む int sokudo = eep_read(0x50,1);//1番地から速度を読む(100分の1) for(int note = 0; note < onpu; note++){ //演奏部 int melody =eep_read(0x50,note+2); //音階の読み出し int duration = eep_read(0x50,note+onpu+2); //音符の長さの読み出し int noteDuration = sokudo*100 / duration; //速度を復元(x100) tone(3, melody*4, noteDuration); //ブザーは3pin int note_hazama = noteDuration * 1.10; //音符同士の合間の長さ delay(note_hazama); } }
プログラムをみつは(ATmega328(マイコン))に書き込めば、Tiny蓄音機#レコード仕様の本体のできあがりです。
それではプログラムを書き込んだみつはと、レコード盤であるEEPROMを配線していきましょう。
【 [24LC64] pin配置図 ↓ 】 【 [みつは] pin配置図 ↓ 】
このように配線します🍓
ブザーは3番pin。
抵抗はプルアップ用で2kΩです(値は近似値でO.K.)。
この他に、電源(2.5~5.5v)もつないでね🔋
これでいよいよ"Tiny蓄音機#レコード仕様"でレコードを再生する準備が整いました。
電源を入れてみつはを動作させてみます🚲
ジョージ・ウィンストンさんの『あこがれ/愛』(ミラ仕様) がブザーから流れ出しました。
EEPROMに楽譜データを書き込んで、そこから読み取ったデータを電子オルゴールとして鳴らす。というもくろみはこれにて大成功です(∂, ∂🎀y
これでも満足なんだけど、今回のプロジェクトではもっと長い『OneNight』という曲をEEPROMに保存したいとたくらんでいます。
次回からは『OneNight』プログラムの作製に入ります。
これがまたいつものようになかなかうまくいかなかったんです🍆
【目次】
🍩 Tiny蓄音機レコード仕様を作ろう 🍩
🍩1回目「 構想とEEPROMについてと曲紹介」
🍩2回目「EEPROMに楽譜を記録♬ "レコード盤作り"」
🍩3回目「EEPROMから楽譜を読み取って演奏するプログラム」(この記事)
「次回」🍩4回目「トラブル1🐉 ArduinoのRAMが足りない..p_q..💦」
🍩5回目「[トラブル2🦇 tone関数ではすべての音符を鳴らせない」
🍩6回目「"ちびやっこ"意気消沈。お姉ちゃんの"みつは"は超オンチに🦆」
🍩7回目「Tiny蓄音機レコード仕様、実装します。& 動画🎬」
🍩8回目「Tiny蓄音機レコード仕様🎶 作り方まとめっ♬」
<お買い物コーナー>
♬ これを筐体にしたら素敵ね。 ♬ 本物の蓄音機(Bluetooth対応)