Arduino ADC
このチュートリアルでは、アナログピンを使用してアナログ信号を読み取り、Arduino でデジタルに変換する方法について説明します。
Arduino ADC
ADC は、アナログからデジタルへのコンバーターとも呼ばれ、アナログ信号をデジタル信号に変換します。アナログ信号は連続的です。つまり、内部に無限の数の値があります。すべての値を読み取ることはできないため、連続信号から特定の時間間隔で値を読み取り、信号をデジタル化します。
アナログ信号からサンプルを取得するプロセスは、サンプリングと呼ばれます。アナログ信号をデジタルに変換するプロセスを次の図に示します。
上の図の最初の信号は無限の値を持つ連続信号であり、2 番目の信号は有限の値を持つデジタル信号です。アナログからデジタルへのコンバーターは、アナログ信号から一定の間隔で値を取得して、デジタル信号にします。
コンピューターはアナログ信号を処理できないため、アナログからデジタルへの変換が行われます。0 と 1 のデジタル信号のみを処理できます。デジタル信号を処理した後、DAC またはデジタルからアナログへのコンバーターを使用して信号をアナログに戻すこともできます。
たとえば、上の図の 2 番目の信号のポイントを結合すると、最初の信号とほぼ同じになります。ADC で取得するサンプルの数は、ADC のサンプリングレートまたはビットレートと呼ばれます。
一部の Arduino ボードには、10 ビットのアナログからデジタルへのコンバーターがあり、一部には、12 ビットのアナログからデジタルへのコンバーターがあります。ビットレートは解像度とも呼ばれ、ADC がアナログ信号から取得するサンプルの数を定義します。
10 ビットのアナログからデジタルへのコンバーターは、アナログ信号から 1024 サンプルを取得します。たとえば、入力信号が 0〜5 ボルトの電圧レベルで構成されているとします。
その場合、電圧レベルは 0〜1024 の整数範囲にマッピングされます。これは、アナログからデジタルへのコンバーターが 5/1024 または 4.9 ミリボルトごとにサンプルを取得することを意味します。
アナログからデジタルへのコンバーターの速度は、ATmega
ベースの Arduino ボードの Arduino ボードの動作周波数に依存します。アナログからデジタルへのコンバーターは、アナログ信号をデジタル信号に変換するのに 100 マイクロ秒かかります。これは、サンプリングレートまたは読み取りレートが 10kHz または 1 秒あたり 10,000 回であることを意味します。
Arduino Zero、Due、MKR ファミリーボードなどの他のボードには、12 ビットのアナログからデジタルへのコンバーターがあります。つまり、0〜3.3 ボルトの入力アナログ信号が 0〜4095 の整数範囲にマッピングされます。
デフォルトでは、12 ビットのアナログからデジタルへのコンバーターは 10 ビットに設定されますが、analogReadResolution()
関数を使用してアナログからデジタルへのコンバーターのビットレートまたは解像度を変更し、内部のビット数を渡すことができます。解像度を設定する機能。
analogReadResolution()
関数の詳細については、このリンクを確認してください。
すべての Arduino ボードのアナログピンには、A
の後に A0
、A1
などの番号が付いています。Arduino のアナログピンから信号を読み取るには、analogRead()
関数を使用できます。
analogRead()
関数の基本的な構文は次のとおりです。
output = analogRead(pin)
上記の構文は、アナログピンからのアナログ信号をデジタル信号として返します。アナログピンがどの信号にも接続されていない場合でも、関数はいくつかの浮動値を返します。
Arduino ボードが異なれば、アナログからデジタルへのコンバーターの速度も異なります。これは変更できますが、アナログからデジタルへのコンバーターの解像度も変更されます。したがって、正確なアナログからデジタルへの変換には、アナログからデジタルへのコンバーターのデフォルト設定を使用する必要があります。
Arduino ボードの中には、入力アナログ信号の基準電圧が 0〜5 ボルトのものもあれば、0〜3.3 ボルトのものもあることを上で説明しました。これらはデフォルト値であり、analogReference()
関数を使用して変更できます。
Arduino ボードの種類に応じて、さまざまなオプションを渡すことができます。
たとえば、Arduino Uno と Mega の場合、次のようなオプションがあります。
DEFAULT
-基準電圧を 0〜5 ボルトの整数範囲に設定します。INTERNAL
-基準電圧を 0〜1.1 ボルトの整数範囲に設定します。INTERNAL1V1
-基準電圧を 0〜1.1 ボルトの整数範囲に設定します。INTERNAL2V2.56
-基準電圧を 0〜2.56 ボルトの整数範囲に設定します。
基準電圧を設定する前に、0 ボルト未満および 5 ボルトを超える電圧値を設定できないことに注意してください。基準電圧値は 0〜5 ボルトである必要があります。
アナログピンに抵抗を接続するとします。その場合、アナログピン内に 32K
値の抵抗が既に存在するため、入力電圧が低下します。この場合、両方の抵抗が分周器となり、入力電圧は、抵抗の値。
analogReference()
関数内で使用できるオプションの完全なリストについては、このリンクを確認してください。analogRead()
関数の詳細については、このリンクを確認してください。