【初めてのArduino】初心者キットで作る「おかえりメロディライト」|暗くなったらLEDが灯ってメロディで出迎えてくれる装置

初心者キットで作る「おかえりメロディライト」

電子工作キットを買ったはいいけど、結局Lチカで止まってるんだよね、、なにか自分でも作れる面白いガジェットってないかな?

そういう人のために、今回はキットの部品だけで作れる「おかえりメロディライト」を紹介するよ!夜に玄関に入ったら自動でLEDが灯ってメロディで出迎えてくれる、ちょっと感動できる作品なんだ。

今回は、電子工作の初心者キットを買ったけれどLチカの先に進めていない方に向けて、ELEGOOのR3スターターキットに入っている部品だけで作れる「おかえりメロディライト」の作り方を紹介したいと思います。

使う部品はフォトレジスタ1個・LED1個・パッシブブザー1個とごくシンプルですが、できあがる作品は暗くなったらLEDがじんわり灯ってメロディが流れる、初心者向けとは思えない満足度の高いガジェットになります。

できるだけ短くコンパクトにまとめたので、キットを買って積んだままになっている方も、これから初心者キットの購入を検討している方も、ぜひ最後までご覧ください。

この記事で学べる事
  • 初心者キットの部品を活かした、実用的なガジェットの作り方
  • フォトレジスタ(明るさセンサ)の使い方とアナログ入力の読み方
  • パッシブブザーでメロディを鳴らすtone関数の使い方
  • 「条件で動作を切り替える」というプログラムの基本パターン

作るもののイメージ

今回作る「おかえりメロディライト」は、部屋や玄関が暗くなった瞬間にLEDが点灯し、同時に短いメロディが流れるという装置です。

仕組みはとてもシンプルで、フォトレジスタという周囲の明るさを電気信号に変える部品でArduinoが明るさを常に監視し、暗くなった瞬間にLEDとブザーへ「動け」と命令を出します。

玄関の靴箱の上に置いておけば、夜帰宅した瞬間に灯りとメロディで出迎えてくれるよ!ちょっとした感動が日々の電子工作のモチベーションにもなるよね。
この作品の特徴
入力は明るさセンサ1個、出力はLEDとブザーの2個だけ。初心者キットの定番3部品で作れる、誰でも完成までたどり着ける構成になっています。

必要な物

今回必要なものは、すべてELEGOO R3スターターキット(または同等の初心者キット)に最初から入っている部品です。新しく買い足すものはありません。

必要な部品
  1. Arduino UNO R3互換ボード1個
  2. ブレッドボード1枚
  3. フォトレジスタ(CdSセル)1個
  4. 10kΩ抵抗1本(フォトレジスタとペアで使用)
  5. LED(色は何でも可)1個
  6. 330Ω抵抗1本(LED用)
  7. パッシブブザー1個
  8. オスオスジャンパーワイヤ6〜8本
  9. USBケーブル(Arduinoとパソコン接続用)1本

ここで1つだけ注意点があります。キットにはアクティブブザーとパッシブブザーの2種類が入っていることが多いので、今回は必ずパッシブブザー(裏面に基板の穴が見えるタイプ)を使ってください。

え、ブザーって2種類あるんだ。違いってなに?

アクティブは電気を流すだけで「ピー」と単音で鳴るタイプ、パッシブは周波数を指定して鳴らすタイプだよ。メロディを作りたい今回は、音程を変えられるパッシブの方を使うんだ!

回路の組み立て方

回路は大きく3つのパーツに分かれます。明るさを測る部分・LEDを光らせる部分・ブザーを鳴らす部分です。順番にブレッドボードに組んでいきましょう。

全体の接続イメージ

全体の信号の流れを図にすると、以下のようになります。

  [入力]
   ┌──────────────┐
   │ フォトレジスタ │
   └──────┬───────┘
          │ A0
          ▼
   ┌──────────────┐
   │ Arduino UNO  │  ← 司令塔
   └──┬───────┬───┘
   D9 │       │ D8
      ▼       ▼
   ┌─────┐ ┌──────────┐
   │ LED │ │ ブザー   │
   │+330Ω│ │          │
   └─────┘ └──────────┘
  [出力]     [出力]

Arduinoがフォトレジスタからの値(明るさ)を読み取り、暗ければLEDとブザーへ出力するという、シンプルな入力1個・出力2個の構成になっています。

フォトレジスタ部分の配線

フォトレジスタは2本足の部品で、向きはありません。10kΩの抵抗と組み合わせて分圧回路という形にすることで、明るさを電圧の変化として読み取れるようになります。

       [5V]
        │
        ▼
    ┌────────┐
    │ フォト │  光で抵抗が変わる
    │レジスタ│
    └────────┘
        │
        ├──→ [Arduino A0]  (中点を読む)
        │
        ▼
    ┌────────┐
    │ 10kΩ  │
    └────────┘
        │
        ▼
       [GND]

分圧回路って聞き慣れないかもしれないけど、「2つの抵抗を直列にしてその真ん中の電圧を取り出す」だけのシンプルな仕組みだよ。明るくなるとフォトレジスタの抵抗値が小さくなって、A0で読める電圧が大きくなるんだ。

LED部分の配線

LEDは必ず330Ωの抵抗とセットで接続します。抵抗なしで直接つなぐと、電流が流れすぎてArduinoやLEDが壊れる可能性があるためです。

   [Arduino D9]
        │
        ▼
    ┌────────┐
    │ 330Ω  │
    └────────┘
        │
        ▼
       ●  ← LED アノード (長足)
      ─┴─
       │  LED 本体
      ─┬─
       ●  ← LED カソード (短足)
        │
        ▼
       [GND]

LEDは脚の長い方がアノード、短い方がカソードです。電流はアノードからカソードへの一方通行なので、向きを間違えると光りません。

ブザー部分の配線

パッシブブザーは、片足が「+」もしくは長い方になっています。「+」側をArduinoのD8へ、もう片方をGNDへ接続します。

   [Arduino D8]
        │
        ▼
       ●  ← ブザー + 足 (長い方)
      ┌─┴─┐
      │   │  パッシブブザー
      └─┬─┘
       ●  ← ブザー - 足
        │
        ▼
       [GND]

ブレッドボード全体の配線図

ブレッドボードを上から見た図です。左端の赤いライン(+)が5V、青いライン(-)がGNDに接続されていて、中央の数字付きの行はa〜eの5穴が横一列で電気的につながっています。同じ行に部品の足を挿せば、それだけで配線したことになります。

            a   b   c   d   e
          +-------------------+
  [+]rail | . . . . . . . . . | - 5V
  [-]rail | . . . . . . . . . | - GND
          +-------------------+
  row 5   | X . . . . . . . . | CdS 上足
  row 6   | X . . . . . . . . | CdS 下足
  row 8   | X . . . . . . . . | 10k 上足
  row 9   | X . . . . . . . . | 10k 下足
  row 11  | X . . . . . . . . | 330 上足
  row 12  | X . . . . . . . . | 330 下足
  row 14  | X . . . . . . . . | LED アノード
  row 15  | X . . . . . . . . | LED カソード
  row 17  | X . . . . . . . . | ブザー プラス
  row 18  | X . . . . . . . . | ブザー マイナス
          +-------------------+

  記号: X=部品を挿す穴, .=空き穴
  注意: 同じ row の a〜e は内部で連結

  ジャンパー線の渡し方:
   1) Arduino 5V  -> [+]ライン
   2) Arduino GND -> [-]ライン
   3) [+]ライン   -> row5 b穴   (CdS 上足側)
   4) row6 b穴    -> row8 b穴   (分圧の中点)
   5) row8 b穴    -> Arduino A0 (中点から読む)
   6) row9 b穴    -> [-]ライン  (10k 下足)
   7) Arduino D9  -> row11 b穴  (330 入口)
   8) row12 b穴   -> row14 b穴  (330 出口とLED+)
   9) row15 b穴   -> [-]ライン  (LED -)
  10) Arduino D8  -> row17 b穴  (ブザー +)
  11) row18 b穴   -> [-]ライン  (ブザー -)

分かりやすく整理すると、各部品の挿し位置と役割は次の通りです。

挿し位置部品役割
row5・row6フォトレジスタ5V側と分圧の中点を作る
row8・row910kΩ抵抗分圧の中点とGNDをつなぐ
row11・row12330Ω抵抗D9とLEDアノードの間に入れる
row14・row15LED長足プラスが抵抗側、短足マイナスがGND側
row17・row18パッシブブザー+側がD8、-側がGND

row6とrow8を短いジャンパーで結んだところが分圧の中点になり、そこからArduinoのA0へ線を伸ばします。ここでフォトレジスタの抵抗変化が電圧の変化となってArduinoに伝わります。

配線する前には必ずUSBケーブルを抜いて、Arduinoの電源を切ってから作業するようにしましょう。電源を入れたまま配線を変えると、ショートして部品やボードを壊す原因になります。

配線時の絶対ルール
配線変更は必ず電源OFFで行う。GND同士は共通、極性のある部品は向きを間違えない。

プログラムの作成

回路が組めたら、次はプログラムを書いていきます。今回のプログラムは「暗くなったらLEDを点けてメロディを鳴らす、明るくなったら消す」という単純な条件分岐です。

プログラムの動作フロー

プログラム全体の流れを、フローチャートにすると以下のようになります。

flowchart TD A[起動] --> B[ピン設定] B --> C[A0の明るさを読む] C --> D{暗い?} D -->|Yes| E[LED点灯 + メロディ再生] D -->|No| F[LED消灯 + ブザー停止] E --> C F --> C

このように、明るさを読む→判定する→出力する、というループをひたすら繰り返すのがマイコンプログラムの基本パターンです。

完成版のコード

以下のコードをArduino IDEに貼り付けて使用してください。

// おかえりメロディライト
// 入力: フォトレジスタ (A0)
// 出力: LED (D9), パッシブブザー (D8)

const int PIN_LIGHT = A0;
const int PIN_LED   = 9;
const int PIN_BUZZ  = 8;

// 暗いと判定する閾値 (0〜1023, 環境に合わせて調整)
const int THRESHOLD = 400;

// 鳴らすメロディ (ドレミファソラシド)
int melody[] = {262, 294, 330, 349, 392, 440, 494, 523};
int noteCount = 8;

// 1回鳴らしたら次の暗転までは鳴らさないためのフラグ
bool played = false;

void setup() {
  pinMode(PIN_LED, OUTPUT);
  pinMode(PIN_BUZZ, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int light = analogRead(PIN_LIGHT);
  Serial.println(light);

  if (light < THRESHOLD) {
    // 暗くなった
    digitalWrite(PIN_LED, HIGH);
    if (!played) {
      for (int i = 0; i < noteCount; i++) {
        tone(PIN_BUZZ, melody[i], 200);
        delay(220);
      }
      noTone(PIN_BUZZ);
      played = true;
    }
  } else {
    // 明るい
    digitalWrite(PIN_LED, LOW);
    noTone(PIN_BUZZ);
    played = false;
  }

  delay(50);
}

ポイントは「playedフラグ」だよ。これがないと、暗い間ずっとメロディが鳴り続けてしまってうるさいんだ。一度鳴ったら次に明るく戻るまでは鳴らない、という工夫を入れているんだね。

使っている関数の意味

初めて見る関数があるかもしれないので、簡単に整理しておきます。

関数役割
analogRead(ピン)指定ピンの電圧を0〜1023の数値で読む
digitalWrite(ピン, HIGH/LOW)指定ピンをON/OFFする
tone(ピン, 周波数, 長さ)指定周波数の音を鳴らす(パッシブブザー用)
noTone(ピン)tone関数による音を止める
Serial.println(値)シリアルモニタに数値を出力する

analogReadの値は0〜1023の範囲で、フォトレジスタが受ける光が強いほど大きな値になります。THRESHOLDの値400は、室内の薄暗い場所を境にした目安です。

書き込みと動作確認

Arduino IDEの「ツール」→「ボード」で「Arduino Uno」、「ポート」でUSB接続したArduinoを選び、書き込みボタンを押します。

動作確認の手順
  1. USBケーブルでArduinoとパソコンを接続する
  2. Arduino IDEで上のコードを書き込む
  3. シリアルモニタを開き、表示される数値を確認する
  4. フォトレジスタを手で覆って暗くする
  5. LEDが点灯し、ドレミファソラシドのメロディが流れたら成功

シリアルモニタで実際の明るさの値を確認しながら、自分の部屋の環境に合わせてTHRESHOLDの値を調整するのがコツです。日中は600〜900、夜の室内灯下では200〜500、真っ暗だと10〜50くらいになります。

なるほど!シリアルモニタで値を見ながら調整すれば、自分の家にぴったりな設定が作れるんだね。

うまくいかない時のチェックポイント

初心者がつまずきやすいポイントを3つにまとめました。動かないときは、まずここを順番に確認してみてください。

よくあるつまずきポイント
  1. LEDが光らない: LEDの向き(長足がアノード)が逆になっていないか確認
  2. ブザーが鳴らない、または「ピー」と単音しか鳴らない: アクティブブザーをパッシブブザーと間違えていないか確認
  3. 常にメロディが鳴り続ける、または全く鳴らない: シリアルモニタで実際の値を見て、THRESHOLDが環境とずれていないか確認

特に「電源を入れたまま配線を変える」は絶対にやめてね。ショートして部品が壊れるだけじゃなく、最悪Arduino本体ごとダメになることもあるんだ。

シリアルモニタの値が常に0または1023に張り付いている場合は、フォトレジスタの配線か10kΩ抵抗の接続が正しくない可能性が高いです。GNDと5Vの取り違えがないかも合わせて見直しましょう。

発展のアイデア

基本動作ができたら、ここからさらに自分なりのアレンジを加えていくのが電子工作の醍醐味です。

改造アイデア
  • メロディを好きな曲(誕生日の歌・ゲームのBGM等)に差し替える
  • LEDをRGB LEDに変えて、暗くなったら虹色に光らせる
  • キットに入っている人感センサ的な使い方として、ボタンと組み合わせて「来客チャイム」化
  • サーボモータと組み合わせて、暗くなったら旗が上がるギミックを追加

どれも同じキットの中の部品の組み合わせを変えるだけで実現できる範囲です。1つの作品ができると次の作品のアイデアが自然と湧いてくるので、ぜひ自分なりのカスタマイズを試してみてください。

まとめ

今回は、電子工作の初心者キットに最初から入っている部品だけを使って作る「おかえりメロディライト」について紹介してきました。

使ったのはフォトレジスタ1個・LED1個・パッシブブザー1個というシンプルな構成ですが、「暗くなったら自動で光って音楽が鳴る」という体験は、初めての電子工作とは思えないほどの満足感をもたらしてくれるはずです。

キットを買ってLチカで止まっていた方も、この作品をきっかけに「センサで状況を読み取って、出力で反応する」というIoT・電子工作の基本パターンを体感できたはずです。ここまで作れたら、あとは部品を入れ替えるだけで無数のガジェットを作れるようになります。

今回学んだこと
  • 初心者キットの部品でも、組み合わせ次第で実用的なガジェットが作れる
  • フォトレジスタと分圧回路で明るさを数値として読み取る方法
  • パッシブブザーとtone関数でメロディを鳴らす方法
  • 条件分岐で「センサ入力→出力」の基本パターンを実装する方法

今後、初心者キットを活かして作れる別のガジェットも紹介していく予定ですので、そちらも合わせてご覧ください。