Raspberry PiでIoTなシステム開発:圧電振動子(ピエゾスピーカー)の昇圧ドライブ
バイクジムカーナのタイム計測機を作ろうとすると、スタートシグナルを鳴らす方法を考えないといけません。簡単な方法としては、音声出力にアンプとスピーカーをつなぐことなのですが、発想は簡単でも実装は大変です。バイクの爆音の中でヘルメットをしているライダーに音を伝えようとすると、相当なワット数のアンプが必要です。電源電圧が5Vに制限されていると、4Ωのスピーカーを使って出せる出力は理論上の最大でも5Wぐらい、実際に入手可能なD級アンプモジュールだと2wぐらいです。これではライダーにスタートシグナルを伝えることができません。そこで思いついたのが、防犯ブザーでよく使われている圧電振動子を昇圧して鳴らせる方法。ネットで検索するとそれほど多くは無いですがいくつか回路が出てきます。ただ受動素子の定数が合いませんので、トライアンドエラーで試してみます。電源電圧は5Vで試しました。コードは最初はWiringPiのソフトウェアPWMライブラリを使いました。 #include #include #include int main(void){ wiringPiSetup(); pinMode(7,PWM_OUTPUT); softPwmCreate(7,5,11); int i = 0; while(1){ softPwmWrite(7,10); sleep(2); /* for (i=0;i<=11;i++) { printf(""rate is %d\n"",i); softPwmWrite(7,i); sleep(1); }*/ }} が、このライブラリは、途中でデューティ比を変えられるものの、PWM周期を変えられないことが判明。この昇圧回路の場合、デューティー比を変えるとインダクタへのチャージ量が変わりそれで音量調整ができるので、便利です。が、音程が変えられないとシグナルにならないので断念。出力を2本使う方法も有りだと思いますが、それは今度試して見ます。で、やむを得ずソフトウェアトーンライブラリで書いたのがこちら。 #include #include #include int main(void){ wiringPiSetup(); pinMode(7,OUTPUT); softToneCreate(7); int i = 0; while(1){/* softToneWrite(7,446);//446で実際の出力が439.98Hz usleep(500000); softToneWrite(7,0); usleep(500000);…
Continue reading...