#019 【49歳から始めるArduino -黒帯を目指す】黄帯編6 音を出すぞ
p86の圧電スピーカーを利用です。ここではdelayからdelayMicrosecondsを利用して、さらに高い音を出します。p88のスケッチではdelayは1ですね。これを0.1に変更すると、以前とトーンが変わりました。なんとなく先ほどより高音のような気がしますが、微妙にスピーカーが接触不良が原因ようなビビっているような感じがあります。0.01に変えても同じ音でした。
利用するスピーカーはこのようになっています。足についている紙を剥がすのに結構気を使いました。引っ張ると足が抜けてしまいそうな気がします。慎重に行きましょう。
おまけ: delay 1とdelayMicroseconds 1000は同じです。そして同じ音でした。
delay 0.1 とdelayMicroseconds 100は同じです。が音は一緒ではありませんでした。となるとdelayでは1が最小有効数値のようです。delay 1とdelay 0は同じ音でした。delay 0 とdelayMicroseconds 0は同じ音ではありませんでしたので、一体どうなっているのでしょうか。
これは手元にあった、18年前の音が出る誕生日カードに入っていたものです。たまたま見つけました。機械式スイッチでなるようになっています。今はCdsですよね。抵抗値を測ってみると7.5Ωありました。ちなみにキットの物は抵抗値が計測出来ず。なぜか絶縁状態です。
#defineで使われている「PIEZO」は「圧電素子 圧電素子(あつでんそし)とのことで、圧電体に加えられた力を電圧に変換する、あるいは電圧を力に変換する、圧電効果を利用した受動素子で、英: piezoelectric element の読みから俗に ピエゾ素子ともいわれる。」の事です。知りませんでした。
p91のスケッチ3では音を出しています。これだけでは面白くないので、ドレミを出して見ましょう。ネットを探せば、スターウォーズの行進曲が見つかります。確かIDEのサンプルコードにあった気がしたのですが、見つかりませんでした。ドレミの周波数はここを参照するといいでしょう。自分ためのメモを書いておくと、
Hz
|
Delay Time
| |
ド
|
32.703
|
15277
|
レ
|
36.708
|
13621
|
ミ
|
41.203
|
12135
|
ファ
|
43.654
|
11454
|
ソ
|
48.999
|
10204
|
ラ
|
55.000
|
9090
|
シ
|
61.735
|
8099
|
ド
|
65.406
|
7645
|
スケッチは最初の#defineのところだけ写しておきます。
#define PIEZO 13
#define DELAY_TIME_DO 1527
#define DELAY_TIME_RE 1362
#define DELAY_TIME_MI 1213
#define DELAY_TIME_FA 1145
#define DELAY_TIME_SO 1020
#define DELAY_TIME_RA 909
#define DELAY_TIME_SI 810
#define DELAY_TIME_DOO 765
#define LOOP_TIME 400
数値を色々試して見ましたが、これよりも桁が多い(例えばドを15277)と上手に再生出来ませんでした。スピーカーの仕様かもしれません。考えてみると小さいなスピーカーですので、高音しか再生できないとしてもおかしくありませんね。最後のLOOP_TIMEはforでiをカウントさせる分の変数です。教科書では200とありましたが、再生を繰り返しながら、設定すると良いと思います。それとこのドレミファですが、なんとなくSIが違うような気がします。本当の階調にするには調整が必要です。
コメント