#まずは完成形
CdSセル(照度センサ)で暗くなると、ゆうやけこやけが流れます。
この曲聞くと切なくなるな。。
#protoout #obniz
— @Jis (@PmanRabbit) October 18, 2020
夕暮れ時に「ゆうやけこやけ」を圧電スピーカーから流してみたよ。 pic.twitter.com/km2YmlAKAi
#使った部品
・Obniz Board 1Y
・圧電スピーカー(PKM13EPYH4000-A0)
・CdSセル(MI527/MI5527)
・カーボン抵抗 1/2W330Ω(CFS50J330RB)
・ミニブレッドボード(BB-601)
・ブレッドボード・ジャンパーワイヤ(オス-オス)(BBJ-20)
#コード
.js
const Obniz = require('obniz');
const obniz = new Obniz('0000-0000'); // Obniz_ID
// 任意の秒数待つことができる関数
// 参考: https://qiita.com/suin/items/99aa8641d06b5f819656
const sleep = (msec) => new Promise(res => setTimeout(res, msec));
// 音階
const Key = {
"ド" : 261.626,
"レ" : 293.665,
"ミ" : 329.628,
"ファ" : 349.228,
"ソ" : 391.995,
"ラ" : 440.000,
"シ" : 493.883,
"ド2" : 523.251,
"レ2" : 587.330
}
obniz.onconnect = async function () {
// ディスプレイ表示
obniz.display.clear();
obniz.display.print('TEST');
// スピーカー
const speaker = obniz.wired('Speaker', { signal: 0, gnd: 1 });
// 照度センサ
obniz.io9.output(true); // io9電圧を5Vに(電源+)
obniz.io11.output(false); // io11電圧を0Vに(電源−)
// setIntervalで一定間隔で処理
setInterval(async function () {
// io10をアナログピンに(照度センサーの値を取得)
var voltage = await obniz.ad10.getWait();
console.log(`changed to ${voltage} v`);
if (voltage < 0.3) {
// 暗くなったら「ゆうやけこやけ」を流す
speaker.play(Key["ソ"]); await sleep(1000); speaker.stop(); await sleep(100);
speaker.play(Key["ソ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ラ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ソ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ソ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ソ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ミ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ド"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ド"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["レ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ミ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["レ"]); await sleep(1500); speaker.stop(); await sleep(500);
speaker.play(Key["ミ"]); await sleep(1000); speaker.stop(); await sleep(100);
speaker.play(Key["ミ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ソ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ラ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ド2"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ド2"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ラ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ソ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ソ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ラ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ソ"]); await sleep(500); speaker.stop(); await sleep(100);
speaker.play(Key["ド2"]); await sleep(1500); speaker.stop(); await sleep(500);
}
}, 20000); // 20秒(約1曲分は待つ)
}
#やってみた感想
圧電スピーカーは周波数で音階を決められるので、曲を流すのは割と簡単でした。
参考:音階周波数
今回、圧電スピーカーで曲を流してみたかっただけですが、なかなか面白かった。ハマりそうです。。スピーカーを複数繋げれば、和音も表現できそうで曲の幅が広がりそうで、時間があったらやってみたい。