Arduino日本語リファレンス


analogWrite(pin, value)

原文

指定したピンからアナログ値(PWM波)を出力します。LEDの明るさを変えたいときや、モータの回転スピードを調整したいときに使えます。analogWrite関数が実行されると、次にanalogWriteやdigitalRead、digitalWriteなどがそのピンに対して使用されるまで、安定した矩形波が出力されます。

Arduino UnoのPWM信号の周波数は約490Hzです。ただし、5、6番ポートは約980Hzで出力します。この周波数はボードによって異なります。UnoのようにATmega328Pを搭載しているArduinoボードでは、デジタルピン3、5、6、9、10、11でこの機能が使えます。

MKRファミリーのようにDAコンバータ(DAはdigital to analogの略)を搭載しているボードは、PWMではなく指定した電圧の直流を出力することが可能です。たとえば、Arduino MKR WiFi 1010の場合、A0ピンを指定するとDAコンバータから出力されます。

analogWriteの前にpinMode関数を呼び出して出力に設定する必要はありません。

【パラメータ】

pin: 出力に使うピンの番号
value: デューティ比(0から255)

valueに0を指定すると、0Vの電圧が出力され、255を指定すると5Vが出力されます。ただし、これは電源電圧が5ボルトの場合で、3.3Vの電源を使用するボードでは3.3Vが出力されます。つまり、出力電圧の最大値は電源電圧と同じです。

【戻り値】

なし

【例】

ポテンショメータの状態に応じて、LEDの明るさを変えます。

int ledPin = 9;      // LEDはピン9に接続
int analogPin = 3;   // アナログピン3にポテンショメータ
int val = 0;

void setup() {
}

void loop() {
  val = analogRead(analogPin);
  // 得たアナログ値を1/4して、0-1023の値を0-255に変換
  analogWrite(ledPin, val / 4);
}

【注意】

ピン5と6のPWM出力はデューティ比が高めになります。これはPWM出力に使う内蔵タイマを、millis()やdelay()といった関数でも利用していることが原因です。注意が必要なのはディーティ比を低くして使うときで(例えば0〜10)、仮にパラメータを0に設定しても、ピン5と6の出力は完全にはオフにならないかもしれません。



[目次へ戻る]

Creative Commons Attribution-ShareAlike 3.0 License.
このドキュメントはArduino Teamにより執筆され、Takumi Funadaが翻訳し、一部加筆修正したものです
ご意見はtf at musashinodenpa.comまでお送りください [ドキュメント一覧]