[Genuino 101][Johnny-Five] ボタン式圧電ブザー

sgier-johnny-five-i-catch

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

johnny-five

車輪開発大好きおたいがです。こんにちは。( 挨拶 )

今回は Genuino 101 ( 以下 Genuino ) を使用した、ボタン式圧電ブザー を作ってみました。Johnny-Five で実装しています。

動作環境・道具など

回路図

PiezoSonudButton_001

電源とアナログ入力 A0 ピンをタクトスイッチで結び、アナログ入力ピン側に負荷抵抗を添えています。圧電スピーカーは、デジタル PWM の 3 ピンと GND に接続します。

サンプルスケッチ ( プログラム ) をボードに書き込む

Genuino に StandardFirmata スケッチを書き込みます。
( 参照 : http://dev.classmethod.jp/hardware/johnny-five-genuino-101-debut/#toc--- )

Johnny-Five 実行用のサンプルプロジェクト作成および実行

Johnny-Five の導入および実行するためのプロジェクトを用意します。任意のプロジェクトディレクトリを作成して移動したあとに、下記コマンドを入力します。

package.json の初期化

$npm init

Johnny-Five のダウンロード

$npm install johnny-five

サンプルコードの作成

var five = require('johnny-five');
// Genuino が接続されているポート番号 ( `/dev/tty*` (Mac/Linux) or `COM*` (Windows) )
var board = new five.Board({ 'port': 'COM8' });
board.on('ready', function() {
  var c      = 0;
  var s      = ['C','D','E','F','G', 'A', 'B']; //音階
  var button = new five.Button('A0');
  var piezo  = new five.Piezo(3); //PWM
  button.on('press', function() {
    var song = s[c++%s.length];
    console.log('song : ', song);
    piezo.play({
      'song'  : song,
      'beats' : 1/8,
      'tempo' : 20
    });
  });
});

実行

$node index

Genuino のアナログ入力 A0 ピンをコントロールする Button クラスのインスタンスを作成することで、タクトスイッチのプレス ('press') とリリース ('release') のイベントをハンドリングすることが可能です。上記コードでは、タクトスイッチのプレスのイベントのタイミングで、デジタル PWM の 3 ピンをコントロールする Piezo クラスのインスタンスが音を鳴らすようハンドリングしています。( 圧電スピーカーが音を鳴らします ) ついでに、スイッチを押すたびに音階が変わるようにしてみました。

ちなみに、Piezo とは Piezoelectric ( 圧電 ) の略称から由来しているものと思われます。

結果

PiezoSonudButton_002

上記コードを実行すると、ブザー音と一緒に再生中の音階が表示されます。

$ node index
1470278275343 Connected COM8
1470278280396 Repl Initialized
>> song :  C
song :  D
song :  E
song :  F
song :  G
song :  A
song :  B
song :  C
…

正直、あまり美しい音とは思えません…が、ブザー装置の習作としてはアリかなと。