Arduino入門:アナログ入出力関数

Arduinoのアナログ入出力関数について解説します。

analogRead

analogReadは、指定したpin(アナログピン)から値を読み取ります。

analogReadのスペック
チャンネル数:通常=6、mini=8、Mega=16
ADコンバータのビット数: 10ビット(0から1023の数値)
基準電圧: 5V(ボードの電源電圧。種類によっては、3.3Vの場合もある)
分解能: 1単位あたり約4.9mV(基準電圧が5Vの場合)
処理時間: 約100μ秒(0.0001秒)

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:analogRead()” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

上の例では、3ピンの電圧の値をanalogReadで読んで、valに格納しています。analogReadが使用できるピン番号は次の通りです。

analogReadが使用できるピン
通常のボード: 0から5
Arduino mini等QFPパッケージのATmega168搭載ボード: 0から7

なお、ピンに入力がなく浮いていると、analogReadで読み取る値は不安定になります。

analogWrite

analogWriteは、ほとんどのボードで指定ピンからPWM波形を出力します。使用例としては、LEDの調光、モータの回転制御などが挙げられます。analogWrite関数が実行されると、次にanalogWriteやdigitalRead、digitalWriteがそのピンに対して使用されるまで、PWMの矩形波が定常出力されます。PWM波形の周波数は約490Hzです。 なお、analogWriteの前にpinMode関数を呼び出して出力に設定する必要はありません。

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:analogWrite()” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

上の例では、3番ピンの入力状態をanalogReadでvalに格納し、val/4の値を用いて、analogWriteで、9番ピンからPWM波形を出力しています。

下記にanalorWriteが使用可能なピン番号をまとめておきます。

analogWriteが使用できるピン
ATmega168/328を搭載ボード: 3,5, 6, 9, 10,11番ピン
Arduino Megaボード: 2~13番ピン
Arduino Dueボード: 2~13番ピン、DAC0,DAC1ピン
ATmega8搭載ボード: 9, 10, 11番ピン

Arduino Dueの場合は、上記のPWM出力が可能な2~13番ピンに加えて、DAC0とDAC1というピンが使用できます。これらは、PWMの様な発信波形ではなく、DA(Digital to Analog)コンバータと呼ばれる機能により定常的な一定電圧を出力します。出力電圧は、
(出力電圧) = (電源電圧)×(Value)/255
となります。つまり電源電圧が5Vの場合は、valueに0を指定すると、0Vの電圧が出力され、255を指定すると5Vが出力されます。

なお、ピン5と6のPWM出力はデューティ比が高めになりますので、特にディーティ比を低くして使う場合は注意が必要です。仮にパラメータを0に設定しても、ピン5と6の出力は完全にはオフにならない可能性があります。

analogReference

analogReferenceは、analogRead(アナログ入力)の基準電圧を設定します。analogRead関数は入力が基準電圧と同じとき1023を返します。


選択できる基準電圧

DEFAULT: ボードの電源電圧(通常5V)で、これがデフォルトです。
INTERNAL: 内蔵基準電圧を用います。ATmega168と328Pでは1.1Vです。
INTERNAL1V1: 内部基準電圧1.1V (Arduino Megaボードの場合)
INTERNAL2V56: 内部基準電圧2.56V (Arduino Megaボードの場合)
EXTERNAL: AREFピンに供給される電圧(0V~5V)を基準電圧とします。
(注)Arduino Megaボードの場合、内蔵基準が2種類あるので、どちらかを選択します。

EXTERNAL(外部基準電圧)を選択した場合、次の事に注意して下さい。
・0V未満あるいは5V(電源電圧)より高い電圧に設定してはいけません。
・analogRead()を実行する前に、必ず、analogReference(EXTERNAL)を実行します。

これらを守らないと、Arduinoボードが損傷する可能性があります。

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:analogReference()” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

なお、analogRead等の説明は、DEFAULTの場合で行っていますので注意して下さい。

analogReadResolution

analogResolutionは、Arduino Dueボードの為の関数です。 analogRead()が返す値のサイズ(ビット数)を設定します。デフォルトは10ビット(0~1023)で、従来のArduinoボードと互換性があります。 Arduino Dueは12ビットADコンバータを搭載しており、分解能(resolution)を12ビットに変更することで0~4095の値を得ることができます。

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:analogReadResolution()” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

上の例では、幾つかの分解能をanalogReadResolutionで指定してADCをテストします。

なお、この関数を使ってボードが提供するADCの能力を超える分解能を設定すると、不足するビットにはゼロが詰められます。

ボードの提供するADCの能力を超えた設定の場合
不足するビットにはゼロが詰められます。例えば、Dueボードで、
analogReadResolution(16)としたときにanalogRead()が返す値は、16ビットのうち上位12ビットだけがADCの結果で、下位4ビットにはゼロが詰められています。

ボードの能力よりも低い分解能を設定した場合
下位ビットが捨てられます。

つまり実際のボードよりも高い16ビットの分解能を指定しておけば、将来的にもあらゆるボードを変えた場合のスケッチを変更点を減らせる可能性があります。

analogWriteResolution

analogWriteResolutionは、Arduino Dueの為の関数です。 analogWrite()の分解能を指定し、デフォルトは8ビット(0~255)で、従来のArduinoボードと互換性があります。 Aruduino Dueは、8ビットのPWM(他のボードと同じ)を12ピンと、12ビットのDAC(DAコンバータ)を2つ持っています。この関数で12ビットを指定すると、DACの分解能をフル活用する12ビット(0~4095)の出力が得られ、PWMを使うときも符合が反転することがありません。
analogWrite()関数が使用する値の分解能は、bits単位で指定します。bits範囲は1から32です。

ハードウエアの能力を超える分解能を設定した場合
出力値は切り捨てられます。

ハードウエアの能力より小さい分解能を設定した場合
出力値にゼロが詰められます。

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:analogWriteResolution()” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

上の例では、幾つかのアナログ出力分解能をanalogWriteResolutionで設定しています。

→その他のArduino関連情報

Sponsored Link