戻る

ArduinoによるシリアルLED制御:コマンド送信でLEDを点滅させる

はじめに

シリアルLED制御プロジェクトへようこそ!このチュートリアルでは、シリアルモニターから簡単なコマンドを送信して、Arduino Unoに接続されたLEDを制御する方法を学びます。これは、**USART(ユニバーサル同期/非同期送受信機)通信とGPIO(汎用入出力)**出力という2つの基本概念を組み合わせた、初心者に最適なプロジェクトです。最終的には、シリアルモニターに「1」または「0」と入力してLEDのオン/オフを切り替えたり、「?」でLEDの状態を問い合わせたりできるようになります。

今回は、SPICE精度のアナログサポートを備えたブラウザベースの回路・マイクロコントローラシミュレーターVelxioを使用します。ハードウェアは不要で、ブラウザだけでOKです!さっそく始めましょう。

回路の解説

Velxioシミュレーターキャンバス上のシリアルLED制御の回路図

この回路は非常にシンプルです。必要な部品はたった2つです。

配線の詳細

  1. LEDのアノード(長い方の足、ピンA) を、緑色のワイヤー(#00cc00)でArduinoの13番ピンに接続します。
  2. LEDのカソード(短い方の足、ピンC) を、黒色のワイヤー(#000000)でArduinoのGNDに接続します。

以上です!Arduino Unoの13番ピンには基板上に電流制限抵抗が内蔵されているため、外部抵抗は不要です。実際の回路ではLEDに直列に220Ωの抵抗を追加しますが、シミュレーションではこれで完璧に動作します。

Velxioでの組み立て方

  1. VelxioでシリアルLED制御の例を開きます。
  2. キャンバス上にArduino UnoとLEDがすでに配置されています。ゼロから組み立てたい場合は、コンポーネントピッカー(下図参照)を使ってArduino UnoとLEDを追加してください。

カテゴリ別に部品をブラウズするVelxioのコンポーネントピッカーモーダル

  1. Arduino Unoをクリックして選択し、13番ピンをクリックします。LEDのアノード(ピンA)までワイヤーをドラッグします。
  2. 同様に、LEDのカソード(ピンC)をArduinoの任意のGNDピンに配線します。
  3. キャンバスツールバーを使って、ズームやパンを行い見やすい位置に調整します。

シミュレーションビューポート上部のVelxioキャンバスツールバー

コードの解説

Velxio Monacoエディタ上のシリアルLED制御のソースコード

それでは、この動作を実現するコードを見ていきましょう。Velxioでコードエディタを開きます(シンタックスハイライト付きのMonacoエディタが表示されます)。

// Serial LED Control
// Send "1" to turn LED ON, "0" to turn LED OFF.
// Demonstrates Serial input controlling hardware.

const int LED_PIN = 13;

void setup() {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);

  Serial.println("=========================");
  Serial.println(" Serial LED Controller");
  Serial.println("=========================");
  Serial.println("Send '1' = LED ON");
  Serial.println("Send '0' = LED OFF");
  Serial.println("Send '?' = Status");
  Serial.println();
}

bool ledState = false;

void loop() {
  if (Serial.available() > 0) {
    char cmd = Serial.read();

    switch (cmd) {
      case '1':
        digitalWrite(LED_PIN, HIGH);
        ledState = true;
        Serial.println("[OK] LED is ON");
        break;
      case '0':
        digitalWrite(LED_PIN, LOW);
        ledState = false;
        Serial.println("[OK] LED is OFF");
        break;
      case '?':
        Serial.print("[STATUS] LED is ");
        Serial.println(ledState ? "ON" : "OFF");
        Serial.print("[STATUS] Uptime: ");
        Serial.print(millis() / 1000);
        Serial.println("s");
        break;
      default:
        if (cmd >= 32) { // ignore control chars
          Serial.print("[ERR] Unknown command: '");
          Serial.print(cmd);
          Serial.println("'  (use 1, 0, or ?)");
        }
        break;
    }
  }
}

動作の仕組み

シミュレーションの実行

  1. エディタツールバーの実行ボタンをクリックします。

コンパイルと実行のコントロールがあるVelxioエディタツールバー

  1. シリアルモニターを開きます(通常はツールバーのボタンか、別のパネルにあります)。
  2. 1と入力してEnterキーを押すと、緑色のLEDが点灯します。
  3. 0と入力すると、LEDが消灯します。
  4. ?と入力すると、ステータスと稼働時間が表示されます。

学習者向けの重要概念

このプロジェクトでは、いくつかの重要な概念を学べます。

よくある問題とデバッグのヒント

推奨される拡張アイデア

このプロジェクトをマスターしたら、以下の拡張に挑戦してみてください。

  1. 2つ目のLEDを12番ピンに追加し、「2」や「3」のようなコマンドで制御する。
  2. PWMを使って明るさを制御する:0~255の数値を送信し、analogWrite()でLEDの明るさを設定する。
  3. ボタンを入力として追加する:デジタルピンを読み取り、押されたときにLEDをトグルする。
  4. コマンドパーサーを実装し、1文字ではなく「ON」や「OFF」のような文字列を受け付けるようにする。
  5. シリアルモニターにデータをログ出力する:センサーの読み取り値やタイムスタンプを表示する。

まとめ

これで、シンプルながら強力なシリアルLEDコントローラーが完成しました!このプロジェクトは、テキストコマンドでハードウェアを制御する、数え切れないほどのIoTや自動化プロジェクトの基礎となります。Velxioを使えば、物理的な部品がなくても簡単に実験できます。

実際に試してみませんか?VelxioでシリアルLED制御の例を開き、シミュレーションを実行してコマンドを送信してみてください。楽しい工作を!


共有:
David Montero

執筆者

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

関連記事


前の記事
ArduinoでI2Cスキャナー:バス上のすべてのデバイスを見つける
次の記事
Arduinoでシリアルエコー:USART通信を学ぼう