UNO R4 WiFiボードのDACを使い、波形を生成し、圧電素子に出力する方法を学びます。
AUTHOR: Jacob Hylén
Arduino UNO R4 WiFiは、デジタル信号をアナログ信号に変換するDAC(Digital-to-analog Converter: デジタルアナログ変換器)を搭載しています。この機能は、多くの楽しいオーディオプロジェクトを作るのに使うことができるだけでなく、例えば、安価なファンクションジェネレーターとして、プロのラボ機器として動作させることもできます。
目的
この記事では、以下を学びます。
- UNO R4 WiFiに搭載されているDAC機能
- PWMとDACの違い
- 波形(サイン波)の生成方法
- 圧電スピーカーへの波形の出力方法
必要なハードウェアとソフトウェア
- Arduino R4 WiFi
- 圧電ブザー
- 可変抵抗器
- ジャンプワイヤー
回路図
このチュートリアルで必要な回路図は以下の通りです。
アナログ出力とPWM
アナログ出力が必要となる多くのユースケースでは、本物のアナログ出力の代わりにPWM(パルス幅変調)を使っても、原則的に同じ結果が得られます。デジタル出力ピンは、完全にオン(HIGH)か完全にオフ(LOW)のどちらかにしかなりませんが、精密なタイミングでオンとオフを繰り返せば、平均電圧を制御でき、アナログ出力を模擬できます。この方法はPWMと呼ばれます。
例えば、LEDを薄暗くするときは、PWM出力できるデジタルピンをアナログピンとして自由に利用できます。そして、LEDはDAC出力を使っているときと同じように薄暗くなります。
しかし、これは常に成り立つとは限りません。望みの結果を得るには本物のアナログ出力が必要となる場合が多くあります。オーディオ出力がこの一例です。PWM出力では、本物のアナログ出力と同じ品質の音を得られません。また、多少の工夫が必要となります。
コード
このチュートリアル向けのコードは2つの部分に分かれています。一つはメインスケッチで、もう一つは事前に生成されたのこぎり波を含むヘッダファイルです。
このスケッチでは、事前に生成したサイン波があります。スケッチの最初や途中で、動的にサイン波を生成することもできますが、いいパフォーマンスが得られないので効率的ではありません。なので、事前に生成するのが最適な方法です。
波形は、サンプルとして配列に格納します。スケッチの各ループでは、DACの出力値を配列の次の値に更新します。
新しいスケッチを開き、以下のコードをペーストしてください。
|
|
テストする
コードをボードにアップロードしたら、DACにサイン波の生成し、圧電ブザーやスピーカーに音を生成します。オシロスコープがあれば、プローブをDAC出力に接続して波形がどのようになるのかを見てみるのも面白いと思います。
次に、可変抵抗器をひねって、どのように音が変化するか見てみましょう。
アナログ波の形
上述のスケッチは、サイン波を生成します。電圧を時間に対してプロットすると、その線がサイン関数のように見えるので、サイン波と呼ばれます。
サイン波と比べ、全く異なる音を生成するアナログ波もいくつかあります。このスケッチで利用しているライブラリは、のこぎり波と矩形波を生成することもできます。これらの波形の名前も、電圧を時間に対してプロットした形から名付けられています。
波形を変更して、音がどのように変わるか聞いてみましょう。
スケッチの18行目の"wave.sine(freq);"
を、以下のように変更してください。
|
|
か
|
|
設定が機能していることがわかると思います。別の例も試すことができ、UNO R4のDACをどのように使えば、音やメロディを生成できるか理解できると思います。
Frere Jacques
以下のコードはFrere Jacquesのメロディを演奏します。
|
|
MIDI Piano Notes
このスケッチは、可変抵抗器の入力を段階に分解し、ピアノの鍵盤に対応した88のMIDIノートに変換します。
まとめ
このチュートリアルでは、Arduino UNO R4ボードのDACを試しました。最初にサイン波を生成し、その後、様々な例を通じて、アナログ出力の可能性を見てきました。
オリジナルのページ
https://docs.arduino.cc/tutorials/uno-r4-wifi/dac
最終更新日
November 12, 2023