これまでAmazonで購入したキット付属の部品を試してきました。その最後の一つがこれです。
今回は、プログラムはほとんど無いので、入門者(というか私)がどのくらいわかっていないのかを示し、先達の方々にそれを踏まえて入門者向け記事を書く参考にしてもらえるように進めます。
一際、大きなフォルム。
部品一覧の写真付きパーツではないので、それ以外のどれかに違いないのですが、初心者はまず「これが何か」から開始します。なぜ、これだけ脚の部分にダンボールが付いているのかも疑問点。
ダンボールは深く考えずに引き剥がしました。
これまで幾つかの部品を触ってきたので、その僅かな経験則から「こういう場合は秋月電子通商で確認!!」します。
上記、リンクは圧電スピーカーですが、まずは商品一覧から似たような外見の物を探しました。
名前からしてスピーカーなんだろう。ピンは二本で長さは同じ、形も円形なので向きやプラス、マイナスも無さそう。というわけで、えいやっとLEDと付け替えて通電(こんなことやったら危ないのかもしれないが・・・)。
ビーというような音がなるのを期待したのですが、音はなりません(実はこのとき、すでに音がなっていたのですが小さく短い音だったので気がついていませんでした・・・)。
もうちょっと、補足すると[UWP] 初心者目線でRaspberry Pi+WindowsでIoT:001のLEDの部分を圧電スピーカーに差し替えただけです。プラスとマイナスの違いは無いので、ピンはどちらがプラスで、どちらがマイナスでもOK。
音の鳴らし方が、わからないので調べてみます。
ふむふむ、ただ通電すれば音がなるタイプか、特定の信号を鳴らして音階などを調整できるものがあるのか。
これはどっちだ? 通電してもダメだったんだから特定の信号送るタイプなんだろうと推測。
圧電って言うからには電圧によって音が変わるんじゃないか説を打ち立てましたが、Twitterで違うと教えてもらいました。
入門記事のハードルは高いけど、聞くと丁寧に教えてくれる界隈という気がします(プログラマーよりググレカス率が低い? ググっても答えが見つけ辛いから?)。
@coelacanth 多分圧電スピーカーのことだと思いますが、電圧で音は変わりません。ついでに言うと、電圧掛けただけでは鳴りません
— ユキラボ (@yukilab) May 27, 2016
最初、電圧スピーカーだと思っていのは、内緒にしてくれ!!
音を鳴らすサンプルはいくつか見つかりましたがC++でwiringPi.hとかsoftTone.hをインクルードして鳴らしているサンプルが多い。
C#だと、ちょっと見つからないですが、信号の周波数で音の高さを変えれる模様。
@coelacanth そんなものです。鳴らすためにはOn/Offを高速に繰り返してやる必要があって、そのオンオフの速さで音程が変わるんです
— ユキラボ (@yukilab) May 27, 2016
ThreadとかDelayは厳密に一定間隔で動かせるわけではないので、ちゃんと制御しようとするとダメだろうなぁと思いつつも、適当な間隔で通電してみると・・・
カチッ、カチッ、カチッ
おっ、なんか鳴っている!!
スクーターのウィンカーみたいな音がしていることにようやく気が付きました。
コードはこんな感じ。
public sealed partial class MainPage : Page
{
/**
* GPIOピン
*/
private GpioPin pin;
private GpioPinValue currentValue = GpioPinValue.High;
public MainPage()
{
this.InitializeComponent();
var gpio = GpioController.GetDefault();
if (gpio == null)
{
pin = null;
return;
}
// GPIOの5番を取得
pin = gpio.OpenPin(5);
// GPIOピンの値をHighに設定(HighとLowの二種類あります。Highで消灯、Lowで点灯します)
pin.Write(GpioPinValue.Low);
pin.SetDriveMode(GpioPinDriveMode.Output);
}
/**
* ボタンクリックで点灯消灯を切り替える
*/
private void button_Click(object sender, RoutedEventArgs e)
{
if (this.currentValue == GpioPinValue.Low)
{
pin.Write(GpioPinValue.High);
this.currentValue = GpioPinValue.High;
// 連続して切り替えてみる
this.loopAlarm();
}
else if (this.currentValue == GpioPinValue.High)
{
pin.Write(GpioPinValue.Low);
this.currentValue = GpioPinValue.Low;
}
}
async private void loopAlarm()
{
for (var i = 0; i < 100; i++)
{
if (this.currentValue == GpioPinValue.Low)
{
pin.Write(GpioPinValue.High);
this.currentValue = GpioPinValue.High;
}
else if (this.currentValue == GpioPinValue.High)
{
pin.Write(GpioPinValue.Low);
this.currentValue = GpioPinValue.Low;
}
await Task.Delay(100);
}
}
}
これを更に間隔を狭めればいいのかな。
@coelacanth @yukilab とりあえず、5vp-pで、1khzとか2khzの正弦波で鳴らす。
— Masahiko Tani (@woTani) May 27, 2016
2khzって、秒間2000回とか?
マイクロ秒単位でギリ足りないのかな・・・。
というわけで、音階とかはまた今度。
今回は、機器が何なのかわかって、音が鳴ったので良しとします。
皆様、初心者はこんなレベルでわかってないので、優しい解説をお願いいたしますw
Please give us your valuable comment