#7中級

速度調整できる流れるLED

4.6(72)
144 完了
速度調整できる流れるLED
6個のLEDが順番に点滅し、光が端から端へ走るように見えます。ポテンショメーターのつまみを回すと、その速さがすぐに変わります。一方に回すと光が素早く進み、反対に回すと各LEDが1秒近く点灯します。つまみで動きの速さを調整する仕組みを目で確かめられます。

動画

回路図

速度調整できる流れるLED - Circuit

ソースコード

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   LED Chaser with Adjustable Speed
4// ─────────────────────────────────────────
5// A potentiometer sets the speed of the walking LED effect. A0 is read at
6// every step and its 0-1023 value becomes the delay time (ms).
7//
8// Pins:
9//   D2, D3, D4, D5, D6, D7 -> 6 LEDs (in order)
10//   Each LED with a 330 ohm resistor
11//   A0 -> Potentiometer wiper
12//   (outer legs to 5V and GND)
13
14int ledPins[] = {2, 3, 4, 5, 6, 7};   // LED pins in lighting order
15int potValue;                         // Pot value = delay (ms)
16
17void setup() {
18  // Set all LED pins as outputs
19  for(int i = 0; i < 6; i++) {
20    pinMode(ledPins[i], OUTPUT);
21  }
22}
23
24void loop() {
25  for(int i = 0; i < 6; i++) {
26    potValue = analogRead(A0);        // Read the speed (0-1023)
27    digitalWrite(ledPins[i], HIGH);
28    delay(potValue);                  // Wait as many ms as the pot value
29    digitalWrite(ledPins[i], LOW);
30  }
31}
32

よくある質問

`analogRead`はどのような値を返しますか?▾

Unoのアナログ入力は0–5 Vを10ビットの分解能で読み取り、0〜1023の値を返します。ポテンショメーターを一方の端から反対の端まで回すと、値が0から1023まで変化します。

ポテンショメーターの値を速さに変えるにはどうしますか?▾

`map()`関数を使うと、0〜1023の範囲を任意の待ち時間の範囲(例:20–500 ms)に変換できます。`map(value, 0, 1023, 20, 500)`で変換した値を`delay()`に渡すと、速さがすぐに変わります。

ポテンショメーターの足はどうつなぎますか?▾

外側の2本の足を5 VとGNDに、中央の足(ワイパー)をアナログ入力(例:A0)につなぎます。外側の足を逆につないでも、回す方向と値の変化が逆になるだけで、回路が壊れることはありません。

速さの変更が遅れて反映されるのはなぜですか?▾

ポテンショメーターの値をループの最初でしか読み取っていない場合、すべてのLEDが順番に点灯し終わるまで新しい値は反映されません。LEDを切り替える各ステップで読み取るようにすると、速さがすぐに変わります。