ドレミファソラシドのソフトウェアボタンを用意し、圧電ブザーで音階を表現します。
前回の講座はこちらです。
-
-
obnizでフルカラーLEDをグラデーション点灯しよう【obniz講座第5回】
今回はこの動画のようにフルカラーLEDをグラデーション点灯させてみます。 これまでの記事はこちらです。 記事 内容 obnizでIoT電子工作を始めよう!【obniz講座第1回】 obn ...
続きを見る
準備するもの
今回準備するものはこちらです。
準備するもの
- obniz本体 ×1個
- マイクロUSBケーブル(obniz付属品) ×1本
- 圧電ブザー(EB3105A) ×1個
[st_af id="3013"]
圧電ブザーは5Vが入力できる「自励式」のブザーであれば何でも結構ですが、私はFDK㈱の「EB3105A-30C140-12V」を用意しました。
obnizと圧電ブザーの接続
obnizと圧電ブザーは上図のように接続します。
圧電ブザー「EB3105A」の赤い線を0番ポートに、黒い線を1番ポートに接続します。
この接続は「obniz.js」で用意されている関数で指定する事が可能です。
obniz.wired("Speaker", {signal:0 , gnd:1 });
signalやgndのの後の数字が、それぞれobnizのポート番号を指定しています。
今回使用する圧電ブザーの「EB3105A」は赤い線が信号線(signal)、黒い線がGND線のため、上記の指定では赤い線を0番、黒い線を1番としています。
圧電ブザーの仕組みと音階を変える方法
圧電ブザーについて
圧電ブザーは電圧をかけると振動する板と、その振動板に金属などが合わせて振動する事で音を鳴らします。
圧電ブザーは、発振回路を内蔵しており、一定の電圧をかけるだけで音が鳴ります。
今回は「obniz」の端子に直接接続して使用したいので、圧電ブザーを用意します。
用意したのはFDK㈱の「EB3105A-30C140-12V」です。
圧電ブザーで音階を変える仕組み
圧電ブザーは電圧をかけるだけで音が鳴りますが、一定の電圧をかけているだけでは「ピー」といった単一の音しかなりません。
そこで、周波数を変更して、ドレミファソラシドの音階を表現します。
周波数は1秒間に何回振動するかを表した値となります。
例えば、10Hzの場合、1秒間に10回振動するという意味です。
圧電ブザーの仕組みや、周波数の変更方法についてはこちらの記事もご覧ください。
-
-
圧電ブザー(圧電サウンダ)の原理/仕組みと使い方(マイコンで音を鳴らす)
圧電ブザーは一定の電圧をかけると事で音が鳴るので、マイコンの端子に直接接続して使用するときに重宝します。 その圧電ブザーについて説明します。 圧電ブザーの原理:圧電(効果)とは 圧電ブザーの説明の前に ...
続きを見る
「obniz.js」には周波数を指定するだけで、その周波数の音を鳴らしてくれる関数があるので、今回はそちらを使用します。
サンプルプログラム
サンプルプログラムはこちらです
onbiz.jsは常に最新にしてください
下記のoniz.jsを読み込む際のバージョンは常に最新バージョンへ書き換えてください
<script src="https://unpkg.com/obniz@【ここの部分】/obniz.js" crossorigin="anonymous"></script>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script
src="https://code.jquery.com/jquery-3.3.1.js"
integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
crossorigin="anonymous">
</script>
<script src="https://unpkg.com/obniz@2.0.1/obniz.js" crossorigin="anonymous"></script>
</head>
<body>
<div id="obniz-debug"></div>
<button id="do">ド</button>
<button id="re">レ</button>
<button id="mi">ミ</button>
<button id="fa">ファ</button>
<button id="so">ソ</button>
<button id="ra">ラ</button>
<button id="shi">シ</button>
<button id="do_up">ド</button>
<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
var speaker = obniz.wired("Speaker", {signal:0 , gnd:1 });
async function obnizSpeaker(frq,str)
{
speaker.play(frq);
obniz.display.clear();
obniz.display.print(str);
await obniz.wait(300);
speaker.stop();
}
var frq = [261.626,293.665,329.628,349.228,391.995,440,493.883,523.251];
var str = ["ド","レ","ミ","ファ","ソ","ラ","シ","ド(C5)"];
$('#do').click(async function () {
obnizSpeaker(frq[0],str[0]);
});
$('#re').click(async function () {
obnizSpeaker(frq[1],str[1]);
});
$('#mi').click(async function () {
obnizSpeaker(frq[2],str[2]);
});
$('#fa').click(async function () {
obnizSpeaker(frq[3],str[3]);
});
$('#so').click(async function () {
obnizSpeaker(frq[4],str[4]);
});
$('#ra').click(async function () {
obnizSpeaker(frq[5],str[5]);
});
$('#shi').click(async function () {
obnizSpeaker(frq[6],str[6]);
});
$('#do_up').click(async function () {
obnizSpeaker(frq[7],str[7]);
});
}
</script>
</body>
</html>
既出部分の概略
これまでに説明した部分は該当記事を紹介するのみとし、新たな部分のみ説明致します。
| コード | 説明 | 参照講座 |
|---|---|---|
| <meta charset="utf-8"> | 文字コード(UTF-8)の設定 | obnizでLEDを光らせよう【第2回】 |
| <meta name ~(省略)> | 横幅を端末に合わせ、表示倍率を1倍に設定 | obnizでLEDを光らせよう【第2回】 |
| <script src="https://code.jquery.com~(省略)> | jQueryをCDNから読み込んで利用 | obnizのPWM制御でLEDを調光しよう【第4回】 |
| <script src="https://unpkg.com/obniz(省略)> | obnizを制御するための関数などを読み込んで利用 | obnizでIoT電子工作を始めよう【第1回】 |
| <div id="obniz-debug"></div> | obnizのデバッグ表示 | obnizでIoT電子工作を始めよう【第1回】 |
| <button ~(省略)> | HTMLでボタンを作成し、id名を設定 | ソフトウェアボタンでobnizのLEDをON/OFFしよう【第3回】 |
| var obniz = new Obniz("OBNIZ_ID_HERE"); | 設定したobnizのIDを「obniz」変数として宣言 | obnizでIoT電子工作を始めよう【第1回】 |
| obniz.display.clear();/obniz.display.print(""); | obnizのディスプレイクリア/文字を表示 | obnizでIoT電子工作を始めよう【第1回】 |
var speaker = obniz.wired("Speaker", {signal:0 , gnd:1 });はブザーやスピーカーから音を鳴らすために用意された関数
下記のコードについて説明します。
var speaker = obniz.wired("Speaker", {signal:0 , gnd:1 });
まず、「speaker」と変数を宣言しています。
そして、var speaker = obniz.wired("Speaker", {signal:0 , gnd:1 });はブザーやスピーカーの信号線とGND線を指定して制御するための関数で、「obniz.js」で定義されています。
最初に"Speaker”を代入し、ブザーやスピーカーの制御であることを示します。
"signal"はスピーカー(ブザー)の信号線、”gnd”はスピーカー(ブザー)のGND線を表し、それぞれの数字がobnizのポート番号を示しています。
async function obnizSpeaker(frq,str){ }は自作関数
下記のコードについて説明します。
async function obnizSpeaker(frq,str)
{
speaker.play(frq);
obniz.display.clear();
obniz.display.print(str);
await obniz.wait(300);
speaker.stop();
}
これは複数の命令をまとめた自作関数で、関数名を「obnizSpeaker」とし、第1引数として周波数の"frq"、第2引数としてobnizのディスプレイに表示させる文字の"str"を必要としています。
上の命令から順に概略を説明します。
| obnizSpeaker内の命令 | 説明 |
| speaker.play(frq); | 指定された周波数でスピーカーを鳴らす(obniz.jsで定義) |
| obniz.display.clear(); | obnizのディスプレイ表示をクリア(obniz.jsで定義) |
| obniz.display.print(str); | 指定された文字列をobnizのディスプレイに表示させる(obniz.jsで定義) |
| await obniz.wait(300); | 300ミリ秒(=0.3秒)obnizを停止させます(obniz.jsで定義) |
| speaker.stop(); | スピーカーの音を止めます(obniz.jsで定義) |
配列で音階毎の周波数と文字列(ドやミ)を格納
こちらのコードについて説明します。
var frq = [261.626,293.665,329.628,349.228,391.995,440,493.883,523.251];
var str = ["ド","レ","ミ","ファ","ソ","ラ","シ","ド(C5)"];
音階毎の周波数を"frq"という配列に、音階の文字列を"str"という配列に格納しました。
ここで、音階には決まった周波数があります。例えばド(C4)ならば、261.626Hzです。
音階(ドレミファソラシド)毎の周波数
それぞれの音階と周波数の表は下記の通りとなります。
この周波数と音階名をそれぞれ"frq"と"str"の配列に格納しています。
| 音階名 | 周波数(Hz) |
|---|---|
| ド(C4) | 261.626 |
| レ(D4) | 293.665 |
| ミ(E4) | 329.628 |
| ファ(F) | 349.228 |
| ソ(G4) | 391.995 |
| ラ(A4) | 440.000 |
| シ(B4) | 493.883 |
| ド(C5) | 523.251 |
自作したobnizSpeaker関数へ、周波数と音階名を引数として渡す
最後にこちらのコードについて説明します。
$('#do').click(async function () {
obnizSpeaker(frq[0],str[0]);
});
これは低い方の「ド」のソフトウェアボタンをクリックしたときの処理となります。
最初の$(ドル)マークはjQueryの関数である事を示しています。
「ド」のソフトウェアボタンのid名は「do」としました。
id名の指定は先頭に#(シャープ)を付けます。
そして、「async function obnizSpeaker(frq,str){ }は自作関数」で説明した関数へそれぞれ周波数と、ディスプレイに表示させる文字を引数として渡しています。
frq[]
配列の添え字は0から始まるので、低いドは0、レが1、…高いドが7となります。
これらを音階のボタン毎に添え字を変えれば、配列に順次格納した値で音が鳴ります。
応用編(ピアノ)
今回のプログラムを応用して、このようなピアノなども作成が可能です。
是非チャレンジしてみてください。
【前回の講座】
-
-
obnizでフルカラーLEDをグラデーション点灯しよう【obniz講座第5回】
今回はこの動画のようにフルカラーLEDをグラデーション点灯させてみます。 これまでの記事はこちらです。 記事 内容 obnizでIoT電子工作を始めよう!【obniz講座第1回】 obn ...
続きを見る
【次回の講座】
-
-
obnizでミニ4駆をラジコン化しよう!【obniz講座第7回】
今回は下の動画のように、タミヤの4輪駆動車工作基本セット(以下、ミニ四駆と呼びます)をobnizでコントロールしてラジコンにする説明をします。 obnizを使った電子工作をYoutube ...
続きを見る
[st_af id="3013"]
【講座のまとめ】
| 記事 | 内容 |
|---|---|
| obnizでIoT電子工作を始めよう!【obnizでIoT電子工作を始めよう!【obniz講座第1回】 | obnizのディスプレイに文字を表示させます |
| obnizでLEDを光らせよう!【obniz講座第2回】 | obnizにLEDと抵抗を接続してLEDを光らせます |
| ソフトウェアボタンでLEDをON/OFFしよう!【obniz講座第3回】 | HTMLで作成したボタンを押して、LEDをON/OFFさせます |
| obnizのPWM制御でLEDを調光しよう【obniz講座第4回】 | obnizのPWM機能を使ってLEDを調光させます |
| obnizでフルカラーLEDをグラデーション点灯しよう【obniz講座第5回】 | obnizでフルカラーLEDをグラデーション点灯させます |
| obnizで圧電ブザーを鳴らそう!【obniz講座第6回】 | obnizで圧電ブザーを鳴らします |
| obnizでミニ4駆をラジコン化しよう!【obniz講座第7回】 | obnizでタミヤのミニ四駆をコントロールします |
| obnizでサーボモータを動かそう!【obniz講座第8回】 | obnizでサーボモータを動かします |
