Analog Input

ポテンショメーターを使い、LEDの点滅を制御します。


Last revision:2024/10/03

この例では、可変抵抗器(ポテンショメーターあるいはフォトレジスター)を使います。Arduinoボードの一つのアナログ入力からその値を読み、内蔵LEDの点滅間隔を変更させます。抵抗のアナログ値は電圧として読み取ります。これはアナログ入力がそのように動作するからです。

このチュートリアルでは、Arduino UNO R4 WiFiボードのアナログデジタル変換器(ADC)の分解能を変更する方法を学びます。デフォルトでは、分解能は10ビットに設定されています。アナログ入力の精度を改善するために、12ビット(0-4095)と14ビット(0-16383)の分解能に変更することができます。

必要なハードウェア

  • Arduinoボード
  • ポテンショメーター あるいは
  • 10kΩのフォトレジスターと10kΩの抵抗
  • 内蔵LED(13番ピン) あるいは
  • 220Ωの抵抗と赤色LED

回路

ポテンショメーターを使う場合

フォトレジスターを使う場合

3本の電線をArduinoボードに接続します。1本目は、ポテンショメーターの外側のピンとGNDを接続します。2本目は別の外側のピンと5Vを接続します。3本目は、アナログ入力0とポテンショメーターの真ん中のピンを接続します。

この例では、13番ピンに接続されているボードの内蔵LEDを利用できます。追加のLEDを使うには、LEDの長い方の足(プラス側、あるいはアノード)をデジタルピンの13番と、220Ωの抵抗を直列に接続し、短い方の足(マイナス側、あるいはカソード)を13番ピンの横にあるGNDに接続します。

フォトレジスターの回路では、分圧抵抗を使い高インピーダンスのアナログ入力で電圧を測定できるようにします。これらの入力はほとんど電流を引き込みません。このため、オームの法則により、5Vに接続されている抵抗のもう一方の端で測定される電圧は、抵抗の値に関係なく常に5Vです。フォトレジスターの値に比例した電圧を取得するには、分圧抵抗が必要です。この回路では可変抵抗と固定抵抗を使い、測定点は抵抗の中間地点です。測定電圧は以下の公式に従います。

$$V_{out} = V_{in} * (R2 / (R1 + R2))$$

ここで、Vinは5Vで、R2は10kΩ、R1はフォトレジスターの値で、暗い場合は1MΩから、日中(10ルーメン)で10kΩ、強い光や太陽光下(100ルーメン以上)で1kΩ以下です。

回路図

ポテンショメーターを使う場合

フォトレジスターを使う場合

コード

このスケッチの最初の方で、変数sensorPinをアナログピンの0に設定します。これは、ポテンショメーターを接続したピンです。ledPinを13番ピンに設定します。もう一つ別の変数sensorValueを作成し、センサーから読んだ値を格納します。

analogRead()は、入力の電圧範囲である0Vから5Vを0~1023のデジタル値に変換します。これは、マイクロコントローラー内のアナログ・デジタル変換器(ADC)という回路で実行されます。

ポテンショメーターのつまみを回し、ポテンショメーターの中央ピン(ワイパー)の両側の抵抗値を変更します。これにより中央ピンと両端のピンの間の相対抵抗が変更され、アナログ値として異なる電圧が取得されます。つまみを片側に全て回すと、中央ピンとGNDに接続されているピンとの間の抵抗が0になります。このとき、中央ピンの電圧は0Vになり、analogRead()は0を返します。つまみを反対側に全て回すと、中央ピンと5Vに接続しているピンとの間の抵抗が0になります。このとき、中央ピンの電圧は5Vになり、analogRead()は1023を返します。その間では、analogRead()は、0と1023の間の値を返し、その値はピンにかかる電圧に比例します。

sensorValueに格納されている値は、点滅周期を決めるdelay()の設定に使われます。値が大きくなると周期は長くなり、値が小さくなると終期は短くなります。値は繰り返しの最初に読まれるので、点灯・消灯の時間はいつも同じです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
  Analog Input

  Demonstrates analog input by reading an analog sensor on analog pin 0 and
  turning on and off a light emitting diode(LED) connected to digital pin 13.
  The amount of time the LED will be on and off depends on the value obtained
  by analogRead().

  The circuit:
  - potentiometer
    center pin of the potentiometer to the analog input 0
    one side pin (either one) to ground
    the other side pin to +5V
  - LED
    anode (long leg) attached to digital output 13 through 220 ohm resistor
    cathode (short leg) attached to ground

  - Note: because most Arduinos have a built-in LED attached to pin 13 on the
    board, the LED is optional.

  created by David Cuartielles
  modified 30 Aug 2011
  By Tom Igoe

  This example code is in the public domain.

  https://www.arduino.cc/en/Tutorial/BuiltInExamples/AnalogInput
*/

int sensorPin = A0;   // select the input pin for the potentiometer
int ledPin = 13;      // select the pin for the LED
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  // declare the ledPin as an OUTPUT:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);
  // turn the ledPin on
  digitalWrite(ledPin, HIGH);
  // stop the program for <sensorValue> milliseconds:
  delay(sensorValue);
  // turn the ledPin off:
  digitalWrite(ledPin, LOW);
  // stop the program for <sensorValue> milliseconds:
  delay(sensorValue);
}

さらに学ぶ

付属のスケッチ例に、さらに多くの基本的なチュートリアルがあります。

Arduinoプログラミング言語の詳細を集めた、言語リファレンスを調べることもできます。

Last revision 2015/07/28 by SM

オリジナルのページ

https://docs.arduino.cc/tutorials/uno-rev3/AnalogInput/

最終更新日

August 16, 2026

inserted by FC2 system