Arduinoのtone()関数を使って簡単に電子音オルゴールが作れます。arduinoのスケッチ例に収められているToneMelodyがそれです。
tone関数に、出力ピン、周波数、音の長さを指定したスケッチを実行すると、出力ピンに繋いだスピーカーから指定の音が出ます。
pinches.hというライブラリを使うと、楽譜のド、レ、ミ、を、NOTE_C4, NOTE_D4, NOTE_E4、の様に書けば周波数に変換してくれるので、これを配列に納めます。音の長さは1音ずつ別の配列に納めます。
ToneMelodyのスケッチに楽譜データを上書きするのが簡単です。別名で保存するとpinches.hファイルが一緒に保存されます。
下は、”チューリップ”のメロディーを演奏するスケッチです。8番ピンにスピーカーを繋いだarduinoにそのまま書き込んで実行するとメロディーを繰り返し鳴らしてくれます。tempoの数字を書き換えると速度を調整できます。
ーーーーーーーーーー
// ToneMelody "Tulips" by Shuremaru, 2024.8.20
#include "pitches.h"
int note = 0;
int noteNum = 0;
int tempo = 80;
// note in the melody:
int melody = { NOTE_C4, NOTE_D4, NOTE_E4, 0, NOTE_C4, NOTE_D4, NOTE_E4, 0, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_D4, 0,
NOTE_C4, NOTE_D4, NOTE_E4, 0, NOTE_C4, NOTE_D4, NOTE_E4, 0, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, 0,
NOTE_G4, NOTE_G4, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, 0, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4, 0, 0,
999
};
// note durations: 4 = quarter note, 8 = eighth note, etc.:
float noteDurations = {
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2,
999
};
void setup() {
while (note != 999) {
note = melody[noteNum];
noteNum++;
}
}
void loop() {
for (int thisNote = 0; thisNote < noteNum - 1; thisNote++) {
int noteDuration = 120000 / tempo / noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
}
delay(500); // wait 0.5 second
}
ーーーーーーーーーー
オルゴール用に、arduino nanoとイヤホンスピーカーを使ったユニットを作ってみました。8番ピンと9番ピンにスピーカーを繋いでいます。
体調管理;
相変わらず疲れだるさ目の霞み。味覚障害はかなり回復。夜眠りが浅いのも影響。