蕗狩軽便図画模型工作部日記

ー シュレマル工房 覚え書き ー

Arduinoのtone()関数を使ったオルゴールです

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番ピンにスピーカーを繋いでいます。

 

 

 

体調管理;

相変わらず疲れだるさ目の霞み。味覚障害はかなり回復。夜眠りが浅いのも影響。