Skip to content

Arduino UNO R4 WIFI 実習ガイド

1. LED基本制御実験

回路図

1
2
3
4
Arduino 5V ─── 220Ω ─── LED(+) ─── LED(-) ─── Arduino GND
              (赤)     (茶黒茶金)

デジタルピン13 ─── 220Ω ─── LED(+) ─── LED(-) ─── Arduino GND

サンプルコード

// LED点滅の基本
void setup() {
  // デジタルピン13を出力モードに設定
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);  // LEDを点灯
  delay(1000);            // 1秒待機
  digitalWrite(13, LOW);   // LEDを消灯
  delay(1000);            // 1秒待機
}

2. 電圧測定実習

測定ポイント

  1. USB供給電圧(5V端子とGND間)
  2. LED順方向電圧(LED両端)
  3. デジタルピン出力電圧(HIGH時/LOW時)

電圧記録シート

1
2
3
4
5
6
測定箇所          理論値    実測値
--------------------------------
USB電源電圧       5.0V     _____V
LED順方向電圧     2.0V     _____V
ピンHIGH出力      5.0V     _____V
ピンLOW出力       0.0V     _____V

3. プルアップ・プルダウン実験

外部プルアップ回路

1
2
3
Arduino 5V ─── 10kΩ ─┬─ デジタルピン2
                     ├─ プッシュスイッチ ─── Arduino GND

内部プルアップ回路

1
2
3
4
5
デジタルピン2 ─┬─ プッシュスイッチ ─── Arduino GND
        (内部10kΩ)
         Arduino 5V

サンプルコード(外部プルアップ)

const int buttonPin = 2;  // スイッチを接続するピン
const int ledPin = 13;    // LEDを接続するピン

void setup() {
  pinMode(buttonPin, INPUT);  // スイッチピンを入力モードに設定
  pinMode(ledPin, OUTPUT);    // LEDピンを出力モードに設定
  Serial.begin(9600);         // シリアル通信開始
}

void loop() {
  int buttonState = digitalRead(buttonPin);  // スイッチの状態を読み取り

  digitalWrite(ledPin, buttonState);  // スイッチの状態に応じてLEDを制御

  // シリアルモニタに状態を表示
  Serial.print("Button State: ");
  Serial.println(buttonState);

  delay(100);  // チャタリング防止の遅延
}

サンプルコード(内部プルアップ)

const int buttonPin = 2;
const int ledPin = 13;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);  // 内部プルアップを有効化
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // 内部プルアップの場合、スイッチを押すとLOWになる
  int buttonState = !digitalRead(buttonPin);  

  digitalWrite(ledPin, buttonState);

  Serial.print("Button State (Inverted): ");
  Serial.println(buttonState);

  delay(100);
}

4. デジタル入出力応用実験

マルチLED制御回路

1
2
3
4
5
6
7
Arduino 5V ─── 10kΩ ─┬─ デジタルピン2
                     ├─ プッシュスイッチ ─── Arduino GND

デジタルピン10 ─── 220Ω ─── LED1(赤)(+) ─── GND
デジタルピン11 ─── 220Ω ─── LED2(黄)(+) ─── GND
デジタルピン12 ─── 220Ω ─── LED3(緑)(+) ─── GND

サンプルコード(LED順次点灯)

const int buttonPin = 2;
const int ledCount = 3;
const int ledPins[] = {10, 11, 12};  // LED接続ピン
int currentLed = 0;  // 現在点灯中のLED

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);

  // すべてのLEDピンを出力モードに設定
  for (int i = 0; i < ledCount; i++) {
    pinMode(ledPins[i], OUTPUT);
  }

  Serial.begin(9600);
}

void loop() {
  static bool lastButtonState = HIGH;
  bool buttonState = digitalRead(buttonPin);

  // スイッチが押されたとき(立下りエッジ検出)
  if (buttonState == LOW && lastButtonState == HIGH) {
    // 全LEDを消灯
    for (int i = 0; i < ledCount; i++) {
      digitalWrite(ledPins[i], LOW);
    }

    // 次のLEDを点灯
    digitalWrite(ledPins[currentLed], HIGH);

    // LED番号を更新
    currentLed = (currentLed + 1) % ledCount;

    Serial.print("Active LED: ");
    Serial.println(currentLed);

    delay(50);  // チャタリング防止
  }

  lastButtonState = buttonState;
}

注意点と解説

  1. 抵抗値について
  2. LED用の220Ω抵抗:電流制限用(LEDの保護)
  3. プルアップ用10kΩ抵抗:適度な電流制限と確実な電圧レベル保持

  4. チャタリング対策

  5. 機械式スイッチの接点バウンスを防ぐため、適度な遅延を入れている
  6. 実際のアプリケーションでは、より洗練された対策が必要

  7. デバッグ手法

  8. シリアルモニタを活用して動作状態を確認
  9. LEDの点灯状態で視覚的にも確認可能

  10. 想定されるトラブルと対処法

  11. LED点灯しない → 極性確認、抵抗値確認
  12. スイッチ誤動作 → チャタリング対策の遅延時間調整
  13. 電圧値異常 → 配線ショート確認、抵抗値確認