はじめに
シリアルLED制御プロジェクトへようこそ!このチュートリアルでは、シリアルモニターから簡単なコマンドを送信して、Arduino Unoに接続されたLEDを制御する方法を学びます。これは、**USART(ユニバーサル同期/非同期送受信機)通信とGPIO(汎用入出力)**出力という2つの基本概念を組み合わせた、初心者に最適なプロジェクトです。最終的には、シリアルモニターに「1」または「0」と入力してLEDのオン/オフを切り替えたり、「?」でLEDの状態を問い合わせたりできるようになります。
今回は、SPICE精度のアナログサポートを備えたブラウザベースの回路・マイクロコントローラシミュレーターVelxioを使用します。ハードウェアは不要で、ブラウザだけでOKです!さっそく始めましょう。
回路の解説

この回路は非常にシンプルです。必要な部品はたった2つです。
- Arduino Uno(頭脳)
- 緑色LED(出力デバイス)
配線の詳細
- LEDのアノード(長い方の足、ピンA) を、緑色のワイヤー(
#00cc00)でArduinoの13番ピンに接続します。 - LEDのカソード(短い方の足、ピンC) を、黒色のワイヤー(
#000000)でArduinoのGNDに接続します。
以上です!Arduino Unoの13番ピンには基板上に電流制限抵抗が内蔵されているため、外部抵抗は不要です。実際の回路ではLEDに直列に220Ωの抵抗を追加しますが、シミュレーションではこれで完璧に動作します。
Velxioでの組み立て方
- VelxioでシリアルLED制御の例を開きます。
- キャンバス上にArduino UnoとLEDがすでに配置されています。ゼロから組み立てたい場合は、コンポーネントピッカー(下図参照)を使ってArduino UnoとLEDを追加してください。

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

コードの解説

それでは、この動作を実現するコードを見ていきましょう。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;
}
}
}
動作の仕組み
const int LED_PIN = 13;– LEDピンを13(Arduino Unoの内蔵LEDピン)として定義します。setup()– シリアル通信を9600ボーで初期化し、LEDピンを出力に設定し、ウェルカムメッセージを表示します。loop()– シリアルポートにデータがあるか確認します。ある場合、1文字読み取り、switch文で処理します。'1':LEDをオンにし(digitalWrite(LED_PIN, HIGH))、ledStateを更新します。'0':LEDをオフにします(digitalWrite(LED_PIN, LOW))。'?':現在のLED状態とシステムの稼働時間(秒)を表示します。- その他の表示可能な文字はエラーメッセージを表示します。
シミュレーションの実行
- エディタツールバーの実行ボタンをクリックします。

- シリアルモニターを開きます(通常はツールバーのボタンか、別のパネルにあります)。
1と入力してEnterキーを押すと、緑色のLEDが点灯します。0と入力すると、LEDが消灯します。?と入力すると、ステータスと稼働時間が表示されます。
学習者向けの重要概念
このプロジェクトでは、いくつかの重要な概念を学べます。
- シリアル通信:ArduinoはUSARTを介してコンピュータと通信します。
Serial.begin(9600)でボーレート(ビット/秒)を設定します。 - GPIO出力:
pinMode()とdigitalWrite()でデジタルピンを制御します。 - 状態変数:
ledStateがLEDの現在の状態を追跡し、ステータスコマンドを機能させます。 - 入力解析:シリアルから文字を読み取り、
switchを使ってコマンドを処理します。 - エラーハンドリング:
defaultケースで無効な入力をキャッチし、フィードバックを提供します。
よくある問題とデバッグのヒント
- シリアルモニターに出力が表示されない? ボーレートが一致しているか確認してください(9600)。また、シリアルモニターの接続ボタンをクリックしたか確認してください。
- LEDが反応しない? LEDの配線が正しいか確認してください:アノードを13番ピンに、カソードをGNDに接続します。Velxioではワイヤーは色分けされているので、接続を確認してください。
- コマンドが動作しない? コードは表示不可能な文字(ASCII 32未満)を無視します。改行を送信しても無視されます。シリアルモニターの「改行なし」オプションを使用するか、文字だけを送信してください。
- 複数の文字を送信した場合? コードは一度に1文字ずつ読み取ります。「10」と送信すると、別々のループイテレーションで「1」、次に「0」が処理されます。
推奨される拡張アイデア
このプロジェクトをマスターしたら、以下の拡張に挑戦してみてください。
- 2つ目のLEDを12番ピンに追加し、「2」や「3」のようなコマンドで制御する。
- PWMを使って明るさを制御する:0~255の数値を送信し、
analogWrite()でLEDの明るさを設定する。 - ボタンを入力として追加する:デジタルピンを読み取り、押されたときにLEDをトグルする。
- コマンドパーサーを実装し、1文字ではなく「ON」や「OFF」のような文字列を受け付けるようにする。
- シリアルモニターにデータをログ出力する:センサーの読み取り値やタイムスタンプを表示する。
まとめ
これで、シンプルながら強力なシリアルLEDコントローラーが完成しました!このプロジェクトは、テキストコマンドでハードウェアを制御する、数え切れないほどのIoTや自動化プロジェクトの基礎となります。Velxioを使えば、物理的な部品がなくても簡単に実験できます。
実際に試してみませんか?VelxioでシリアルLED制御の例を開き、シミュレーションを実行してコマンドを送信してみてください。楽しい工作を!