Rubyと一緒(3) GR-CITRUSでパッシブ・ブザーを鳴らしてみる

Joseph Halfmoon

特価品(見切り品?)のGR-CITRUSボードで組み込みRuby(mruby)してます。前回はPWM出力しました。PWMはデューティ比可変ですが周期は固定。周期は変えられないの?というとtoneメソッドで周期可変(でもデューティはお任せ)の信号を出力できるようです。パッシブ・ブザーに出力すればメロディーを奏でられる?

いつもお世話になっております、ルネ様の以下のページを拝見すると

GR-CITRUS 特設:クラス、メソッド早見表

tone()メソッドの項に「圧電サウンダなどに使えるトーン信号を出力」と書いてあります。これを使えばGR-CITRUSボードで「ピーポー」言わせられる筈。上記のページにはどの端子が使えるとは書いてなかったですが、前回調べたとおり、PWMが出力できるような端子なら周期波形を出力できる筈。そこで今回はGR-CITRUSボードのピン番号10番(マイコンのPC4)端子を使ってみました。

圧電サウンダ(圧電スピーカ)

似たような形状の音出力のための圧電素子あり、アクティブ型の圧電素子は電圧をかけるだけで勝手に所定の発振周波数で「鳴る」もの。「電子ブザー」などと呼称されるようです。一方、パッシブ型の素子は自前で発振しないので、外部から発振波形を与える必要がります。その代わり各種の音階で鳴らせることができるのでメロディなども奏でられます。こちらは圧電スピーカと呼ばれることが多いような気がします。

さて、tone()メソッドはお好みの周波数(上限は調べてないけど)で信号を作れるようなので、必要なのはパッシブ型の素子です(以下回路図ではパッシブ・ブザーなどと書いてますが、パッシブ型の圧電サウンダ素子です。)

ただねえ、圧電サウンダを端子に直結で駆動するのはちょっとためらわれました。そこで以前に作ってあったボード(残骸的な)を引っ張りだしてきました。以下の別シリーズで作ったもの。

IoT何をいまさら(67) ようやく納得、Wio Terminalのピンアサイン

GR-CITRUSボードとの接続は以下のようです。GR_CITRUS_Passive_Buzzer_schematic

まあ、こんなもので鳴らせられるっしょ。

tone駆動をするRubyのコード

今回実験に使用した mrubyのコードが以下に。freqLisの中に詰めてあるのは、ドレミファソラシド、1オクターブ分の周波数のリストです。よくテストに使う440Hzの「ソ」を含む1オクターブ。

#!mruby
usb = Serial.new(0, 9600)
usb.println("tone, Pin.10")
tpin = 10
#pinMode(10, tpin) #pin 10, OUTPUT
freqLis = [262, 294, 330, 349, 392, 440, 494, 523]
duration = 500
while true do
    for freq in freqLis do
        tone(tpin, freq)
        delay(duration)
        noTone(tpin)
        delay(duration)
    end
end

上記のソースをRubicでビルドしてGR-CITRUSボードに転送したところが以下に。RubicTone

転送成功すれば、無限ループの中でドレミファソラシド、を拙い単音で奏でつづけます。奏でるというか、ちょっと耳障りでウザいです。やっぱブザーだよ。

ちょっとRubic様に申し上げたき儀これあり

すでに命脈つき?起動のたびにChromeから「削除する」かと聞かれる寂しい状況にあるChrome版Rubicです。申し上げても詮無きかとは思うのですが、ビルドのときのエラーメッセージが素っ気なさすぎることに気づきました。

上記のコードを書いていて実は1か所 end を飛ばしてしまいました。そのとき表示されたビルドのエラーメッセージが以下です。buildError

失敗したのは私のせいです。でもね。あんまりでないかい。何行目とか、どこそこの前とか一言あってしかるべしと。上のような短いコードなら良いけれど、ちょっと長くなったらシンドイよ。。。

Rubyと一緒(2) GR-CITRUSでPWM信号出力を使ってみる へ戻る

Rubyと一緒(4) GR-CITRUSでDAコンバータを使ってみる、やっぱ10ビットだわ へ進む