analogWrite

動作

Arduinoボードのピンの出力電圧をアナログ制御します。

出力電圧のアナログ制御」とは、ピンの出力電圧をONとOFFの中間の電圧状態に制御する、というイメージです。例えば、LEDの明るさを50%にしたり、モーターを半分の速度で回転させたりする制御ができます。

Arduinoボードのアナログ制御方法は「PWM制御」と「DAC制御」の2種類があります。ボード/ピンによって対応している制御方法が異なります。対応している制御方法は「補足:analogWriteが使用できるピンとPWM周波数」をご参照ください。

PWM制御

PWM制御ピンは、実際に中間の電圧(例えば2.5V)が出力されるわけではありません。PWM(Pulse Width Modulation・パルス幅変調)という方式で、ONとOFFを高速に繰り返すことで、見かけ上の中間的な出力を実現しています。

PWMでは、一定の周期の中で「ONの時間」の割合を変えて制御します。この比率のことをデューティ比と呼びます。(半分の時間をONにした場合、デューティー比は0.5または50%になります)

例えば、LEDの場合、ONとOFFが高速に切り替わると、人間の目にはその切り替わりが認識できず、平均的な明るさとして見えます。デューティ比が大きいほど明るく、小さいほど暗く見えます。

analogWrite関数では、このデューティ比を割合ではなく(パーセントではなく)、0〜255の数値で指定します(この数値範囲はデフォルト設定の場合で、analogWriteResolution関数で変更することができます)。

0を指定すると常にOFF(デューティ比0%)、255を指定すると常にON(デューティ比100%)、127を指定すると約50%のデューティ比になります。

補足:analogWriteが使用できるピン

analogWrite関数が利用できるピンは限られています。
一般的にピン番号の横に「〜」マーク(波マーク)が付いているピンが対応しています。具体的に使用できるピンはArduinoボードによって異なりますので「補足:analogWriteが使用できるピンとPWM周波数」を参照ください。

DAC制御

DAC制御ピンは、実際に中間の電圧を出力することができます。

5V動作のArduinoボードであれば、analogWrite(pin, 127)で約2.5Vの一定の電圧を出力することができます。

デフォルトでは、0〜255の範囲で設定できますので、設定できる電圧の刻み幅は約19.6mV(5V ÷ 255 ≒ 0.0196V)となります。

DAC制御ピンでLEDの明るさ調整をすると、PWM制御のようなチラつきがなくなります。

主な用途

  • LEDの明るさ調整(調光)
  • DCモーターの回転速度制御
  • 圧電スピーカーの音程制御
  • サーボモーターの制御信号生成など
ポイント

LEDの点灯・消灯やモーターのON・OFFのように、ONかOFFかの2つの状態だけを制御する場合はdigitalWrite関数を使います。

書式

analogWrite(pin, value);
引数pin制御するピンを指定します。ピン番号(10など)で指定します。
analogWrite対応ピンを指定する必要があります
valueデューティ比を0〜255の範囲で指定します(デフォルト設定の場合)。
0は常にOFF(0V)、255は常にON(5Vまたは3.3V)です。
analogWriteResolution関数で分解能を設定すると、設定範囲を変更することができます(12ビットに指定した場合、0〜1023の範囲で指定できる)。
戻り値なし
補足

analogWrite関数を使用する場合、事前にpinMode関数でピンを出力モードに設定する必要はありません(analogWrite関数内の処理で自動的に出力モードに設定されます)。

ただし、明示的にpinMode(pin, OUTPUT);を記述しておくと、スケッチの可読性が高くなるため記述しておくことをおすすめします。

使用例

次のコードにより、指定したピンの出力をアナログ制御することができます。

analogWrite(9, 127);  // 9番ピンのデューティ比を約50%に設定
analogWrite(5, 0);    // 5番ピンをOFF(デューティ比0%・digitalWrite(5, LOW)と同じ効果)
analogWrite(3, 255);  // 3番ピンをON(デューティ比100%・digitalWrite(3, HIGH)と同じ効果)

サンプルスケッチ

5番ピンに接続したLEDの明るさをフェードイン・フェードアウトする(徐々に明るく徐々に暗くする)制御をします。

ボタンをクリックするとシミュレーターが動作します。スケッチを変更することもできます。変更した場合、シミュレーションを一度 ボタンをクリックして停止してから再度シミュレーターを開始してください。