【初めてのArduino】初心者キットで作る「シークレットノックゲート」|3回ノックでバーが開く小さな仕掛けガジェット

初心者キットだけで作る! シークレットノックゲート

初心者キットで作る「シークレットノックゲート」

初心者キットを買ったはいいけど、Lチカの次に何を作ればいいのか分からないんだよね、、もうちょっとワクワクする作品が作りたいよ!

分かる!今回は「3回ノックでバーが開くシークレットノックゲート」を作ってみよう。ボタン・LED・サーボ・ブザーで、まるで秘密基地の入口みたいなガジェットができるよ!

今回は、初心者キットを買ったけれど、Lチカの次に何を作ればよいか分からない方に向けて、キットの中の部品だけで作れる「シークレットノックゲート」を紹介したいと思います。

できるだけ短くコンパクトにまとめたので、Arduinoをまだ触ったことがない方も、Lチカは終えたけれど次に詰まっている方も、ぜひ最後までご覧ください。

入門キット

今回使用した入門キットはこちらです。このキットは、マイコンボード、センサ、モータ、ケーブルなど、電子工作に必要なものが一通り揃っているので、これ一つあればかなり遊ぶことができます。 最初に何揃えればいいの?という方にはまずこれをお勧めします!

どんな作品か

シークレットノックゲートは、「ボタンを3回連打するとサーボが回ってバーが開き、LEDとブザーで開門を知らせる」小さな仕掛けガジェットです。3回以外のノックでは反応しないので、まるで合言葉のような感覚で遊べます。

この作品で学べること
ボタンのチャタリング対策、サーボの角度制御、LEDとブザーの同期、複数の入出力を協調させる発想。

「Lチカは終えたけれど次に何を作ろう」とつまずきがちな初心者が、複数の部品を組み合わせる工作の楽しさを一気に体感できる構成になっています。

必要な物

使う部品は、ELEGOOなどのスターターキットに入っているものだけです。追加購入は不要で始められます。

必要な部品
  1. Arduino UNO本体 (互換ボードでもOK)
  2. ブレッドボード1個
  3. 押しボタン (タクトスイッチ) 1個
  4. LED1個 (色は何でも構いません)
  5. 抵抗330Ω 1本
  6. パッシブブザー1個
  7. サーボモータSG90 1個
  8. ジャンパーワイヤ オスオス数本とオスメス3本 (サーボ用)

完成までの流れ

言葉だけだと分かりづらいので、完成までの流れをフローチャートで整理してみました。

flowchart LR S1[配線を組む] --> S2[コード書込み] S2 --> S3[ノック動作確認] S3 --> S4[サーボ角度調整] S4 --> S5[完成]

初心者の方でも、配線15分・書き込み5分・調整10分の合計30分程度で完成します。

配線手順

まずはブレッドボード全体の配線図を見てみましょう。Arduinoの5VとGNDをブレッドボードの両側のレールに引き、そこから各部品に電源を分けます。

ブレッドボード全体図

        a b c d e
       +─────────+
[+]rail| . . . . . | ← 5V
[-]rail| . . . . . | ← GND
       +─────────+
row 5  | X . . . X | ← ボタン両足 D2 と GND 側
row 8  | X . . . . | ← 330Ω 上足 (D9 から)
row 9  | X . . . . | ← 330Ω 下足+LED アノード
row 11 | X . . . . | ← LED カソード GND側へ
row 14 | X . . . . | ← ブザー + 足 (D8 から)
row 15 | X . . . . | ← ブザー - 足 ([-]rail)
       +─────────+

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

ボタン部分の配線

ボタンは「内部プルアップ」を使うので、抵抗は不要です。片足をD2に、反対の足をGNDにつなぐだけです。

   [Arduino D2]
        │
        ▼
       ●─────●  ← タクトスイッチ
                (押すと両足が導通)
                  反対側の足
                      │
                      ▼
                    [GND]

LED部分の配線

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

ブザーとサーボの配線

パッシブブザーは抵抗を介さず、D8と[-]rail (GND) に直結します。サーボは3線あるので、オスメスのジャンパーで直接Arduinoのピンへつなぎます。

   サーボ SG90 (3 線)

   [5V]          ─→  赤 (VCC)
   [Arduino D10] ─→  橙 (信号)
   [GND]         ─→  茶 (GND)

プログラム

続いてプログラムを書いていきます。「ボタンが押されたタイミングを記録し、3回が500ms以内なら開門」というのが今回のメインロジックです。

動作フローを図で見る

コードに入る前に、プログラムの動作の流れをフローチャートで整理しておきましょう。

flowchart TD A[起動 ピン設定] --> B[ボタンを読む] B --> C{押された?} C -->|No| B C -->|Yes| D[ノック回数 +1] D --> E{3回 揃った?} E -->|No| B E -->|Yes| F[サーボ開く] F --> G[LED点灯 ブザー] G --> H[3秒待つ] H --> I[サーボ閉じる] I --> J[回数をリセット] J --> B

サンプルコード

下記のコードをArduino IDEに貼り付けて、書き込んでください。

#include <Servo.h>

const int BTN_PIN   = 2;
const int LED_PIN   = 9;
const int BUZZ_PIN  = 8;
const int SERVO_PIN = 10;
const unsigned long KNOCK_WINDOW = 1500; // 3回連打の許容時間 (ms)

Servo gate;
int knockCount = 0;
unsigned long firstKnockAt = 0;
int lastBtnState = HIGH;

void setup() {
  pinMode(BTN_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUZZ_PIN, OUTPUT);
  gate.attach(SERVO_PIN);
  gate.write(0); // ゲート閉
}

void loop() {
  int btn = digitalRead(BTN_PIN);

  // 押し下げの瞬間だけを 1 回とカウント (チャタリング簡易対策)
  if (lastBtnState == HIGH && btn == LOW) {
    unsigned long now = millis();
    if (knockCount == 0) firstKnockAt = now;
    knockCount++;
    delay(50); // 50ms のデバウンス
  }
  lastBtnState = btn;

  // 時間切れならリセット
  if (knockCount > 0 && millis() - firstKnockAt > KNOCK_WINDOW) {
    knockCount = 0;
  }

  // 3 回揃ったら開門
  if (knockCount >= 3) {
    digitalWrite(LED_PIN, HIGH);
    tone(BUZZ_PIN, 1200, 200);
    gate.write(90);   // ゲート開
    delay(3000);
    gate.write(0);    // ゲート閉
    digitalWrite(LED_PIN, LOW);
    knockCount = 0;
  }
}

配線時の注意点

初心者の方が特につまずきやすいポイントを3つだけ整理しておきます。

配線時の3つの注意点
  1. ボタンは向きで「縦のペア」が導通している。隣の足がペアではない
  2. サーボの色は赤=VCC、茶=GND、橙=信号。赤と茶を逆にすると壊れる
  3. LEDは長足がアノード (+側)。逆向きだと光らない

配線が完了したら、必ずもう一度GNDの接続を目で追って確認してください。GNDが共通になっていないと、ブザーが鳴らない・サーボが暴走する原因になります。

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

動作確認でつまずいたら、下記の順番で見直してみましょう。

うまく動かない時のチェック項目
  1. シリアルモニタに `Serial.println(knockCount);` を仕込んで、ノックが拾えているか確認
  2. サーボが暴走する時は5VとGNDの接続を確認 (電源不足の可能性)
  3. ブザーが鳴らない時は、向きと、`tone()` のピン番号を確認
3回じゃなくて、もっと複雑な合言葉にすることもできる?

いい質問!ノック間隔をmillis()で測れば「タン・タン、タン」のようなリズム判定もできるよ。最初は3連打で動かしてから、慣れたらリズム判定に挑戦してみよう!

アレンジのアイデア

基本動作が動いたら、自分なりにアレンジしてみるのが電子工作の醍醐味です。同じキットの部品だけで、いろいろな発展形が作れます。

3つのアレンジ案
  1. サーボにダンボールで切ったバーを付けて、本物のゲートに仕立てる
  2. RGB LEDに変えて「開門時=緑」「不正解=赤」を表現する
  3. ノックのリズムを記録するモードを作って、自分だけの合言葉を設定できる

まとめ

今回は、初心者キットだけで作れる「シークレットノックゲート」を紹介してきました。

3回ノックでサーボが回り、LEDとブザーで開門を知らせるという小さな仕掛けですが、ボタン入力・サーボ制御・複数出力の同期という、電子工作の基礎が一気に学べる凝縮された作品です。Lチカの次の一歩としてちょうどよい難易度なので、ぜひ気軽に試してみてください。

慣れてきたら、アレンジ案を参考に自分なりの工作に発展させていきましょう。

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