【プログラミング自由研究】初心者キットで作る「PCからLEDを操る装置」|シリアル通信入門

PCで操る! シリアル通信入門

PCのキーボードからLEDを操る装置を作ろう

PCとArduinoがどうつながってるのか興味があるんだ。プログラミング自由研究のテーマにできる?

いいテーマだね。「PCからLEDを操る装置」を作って、シリアル通信の流れを学ぼう。PCのシリアルモニタに文字を打つと、それに応じてLEDが点いたり消えたりするんだ。

今回は、PCとArduinoの通信に興味があるお子さんに向けて、初心者キットだけで作れる「PCからLEDを操る装置」を紹介します。

シリアルモニタで「r」と打つと赤LEDが点く、「g」で緑、「b」で青、「x」で全部消える、というシンプルな操作で、PCから命令を送ってArduinoが返事をする双方向のやり取りを体験できる作品です。

この記事で作るもの
  1. PCのシリアルモニタからキー入力
  2. r/g/b/xの文字で3色LEDを個別操作
  3. 受け取った文字をPC側にエコーバック
  4. シリアル通信の基本を学べる

使う部品

部品役割個数
Arduino UNO R3頭脳1
LED (赤、緑、青)3色の表示各1
抵抗330ΩLED保護3
ブレッドボード配線1
ジャンパーワイヤーつなぐ8本前後

配線図

        a b c d e
       +─────────+
[-]rail| . . . . . | ← GND
       +─────────+
row 5  | X . . . . | ← 330Ω 上 (D9)
row 6  | X . . . . | ← 330Ω 下+赤LED+
row 8  | X . . . . | ← 赤LED- ([-])
row 11 | X . . . . | ← 330Ω 上 (D10)
row 12 | X . . . . | ← 330Ω 下+緑LED+
row 14 | X . . . . | ← 緑LED- ([-])
row 17 | X . . . . | ← 330Ω 上 (D11)
row 18 | X . . . . | ← 330Ω 下+青LED+
row 20 | X . . . . | ← 青LED- ([-])
       +─────────+

プログラム

#define RED 9
#define GREEN 10
#define BLUE 11

void setup() {
  Serial.begin(9600);
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  Serial.println("LED操作 スタート!");
  Serial.println("r=赤, g=緑, b=青, x=消す");
}

void loop() {
  if (Serial.available() > 0) {
    char c = Serial.read();
    if (c == '\n' || c == '\r') return;  // 改行は無視
    Serial.print("受信: ");
    Serial.println(c);

    switch (c) {
      case 'r':
        digitalWrite(RED, HIGH);
        break;
      case 'g':
        digitalWrite(GREEN, HIGH);
        break;
      case 'b':
        digitalWrite(BLUE, HIGH);
        break;
      case 'x':
        digitalWrite(RED, LOW);
        digitalWrite(GREEN, LOW);
        digitalWrite(BLUE, LOW);
        break;
    }
  }
}

プログラムの動き

flowchart TD A[起動] --> B{"シリアルに
データ?"} B -->|No| B B -->|Yes| C[1文字読む] C --> D[エコーバック] D --> E{何の文字?} E -->|r| F[赤ON] E -->|g| G[緑ON] E -->|b| H[青ON] E -->|x| I[全消灯] F --> B G --> B H --> B I --> B

シリアル通信とは

シリアル通信は、PCとArduinoが文字を1つずつ送り合う仕組みです。物理的にはUSBで繋がっていて、その中で「シリアル」というやり取り方になっています。

通信の流れ
PCで「r」を入力 → USB経由でArduinoに送信 → Arduinoが赤LEDを点ける → 結果を「受信: r」とPCに送り返す。
なんでこの仕組みが大事なの?

家にあるたいていの電子機器が、こういう仕組みで動いてるからだよ。プリンタもキーボードもマウスも、PCと「通信」してる。その入り口を学べる、いいテーマなんだ。

自由研究としての展開

研究テーマのアイデア
  1. 通信速度 (ボーレート) を変えるとどうなるか実験
  2. 1秒間に何文字送れるかを測定
  3. Pythonで自動的にLED操作するプログラム作成
  4. 双方向通信 (Arduino→PC方向) も追加

レポートの書き方

レポート構成
  1. 研究のきっかけ
  2. シリアル通信の仕組み
  3. ボーレート別の通信速度実験
  4. 応用 (キーボードで装置を操る世界)
  5. 感想

改造のアイデア

発展アイデア
  1. 数字も認識して、明るさを段階的に調整
  2. 「red on」「red off」と単語で操作
  3. サーボやブザーも操作対象に追加
  4. 受信した文字の履歴をLCDに表示

まとめ

今回は、プログラミング自由研究の「PCからLEDを操る装置」を紹介しました。PCで打った1文字でLEDが変わる、というシリアル通信の基本動作を体験できる題材です。

大切なのは、「データが線を通って動く」感覚を実体験することです。これを掴めば、PCとArduinoの様々な応用が見えてきます。

他にも初心者キットだけで作れる作例を別の記事で紹介しているので、興味があれば見てみてね。