夏休みの自由研究、データが取れる電子工作はいかが?


今回は、電子工作を自由研究のテーマにしたい中学生・高校生に向けて、Arduino初心者キットだけで作れる「反射神経テスター」の作り方を紹介します。
LEDがランダムなタイミングで光り、それを見てからボタンを押すまでの時間 (ミリ秒) を測る装置です。家族・友達・部活仲間のデータを集めれば、年齢や時間帯による反射神経の差を分析できるので、自由研究らしいレポートが書けます。
- LEDがランダムなタイミング (約1〜5秒) で光る
- 光ったらボタンを押す
- 反応時間 (ミリ秒) をシリアルモニタに表示
- 10回測ると平均値も計算してくれる
使う部品 (キットにすべて入っている)
ELEGOOのスーパースターターキットがあれば、追加購入は不要です。
| 部品 | 役割 | 個数 |
|---|---|---|
| Arduino UNO R3 | 装置の頭脳 | 1 |
| LED (緑) | 「今だ!」の合図 | 1 |
| 抵抗330Ω | LEDを保護 | 1 |
| タクトスイッチ | 反応するボタン | 1 |
| ブレッドボード | 配線をする台 | 1 |
| ジャンパーワイヤー | つなぐ線 | 5〜6本 |
完成までの流れ
1日で全部できますが、データ集めも含めて2〜3日かけるのが自由研究としてはおすすめです。
配線する"] --> B["Step2
プログラム
を書き込む"] B --> C["Step3
自分で
動作確認"] C --> D["Step4
家族や友達
でデータ収集"] D --> E["Step5
分析して
レポート化"]
配線図 (ブレッドボード)
同じ行 (row) の穴は内部でつながっています。図の通りに挿していきましょう。
a b c d e
+─────────+
[+]rail| . . . . . | ← 5V (Arduino 5V から)
[-]rail| . . . . . | ← GND (Arduino GND から)
+─────────+
row 5 | X . . . . | ← タクトSW 片足 (D2)
row 7 | X . . . . | ← タクトSW 反対足 ([-]rail)
row 11 | X . . . . | ← 330Ω 上足 (D7 から)
row 12 | X . . . . | ← 330Ω 下足+LED アノード
row 14 | X . . . . | ← LED カソード ([-]rail)
+─────────+
部品同士のつながり
Arduino タクトスイッチ D2 ←──── 片足 (押すと閉じる) GND ←──── 反対側の足 Arduino LED + 抵抗 D7 ────→ 330Ω → LED アノード GND ←──── LED カソード
タクトスイッチは押している間だけ電気を通す部品です。ブレッドボードの中央の溝をまたぐように挿し、対角の2本を使います (同じ側の2本は元々つながっているので使いません)。Arduinoの内蔵プルアップ機能を使うので、外付け抵抗は不要です。
プログラム
Arduino IDEに次のスケッチをコピーして書き込みましょう。ライブラリのインストールは不要です。
#define LED_PIN 7
#define BUTTON_PIN 2
#define NUM_TRIALS 10
long reactionTimes[NUM_TRIALS];
int trialCount = 0;
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
randomSeed(analogRead(A0));
Serial.println("反射神経テスター スタート!");
Serial.println("LEDが光ったらボタンを押してね");
}
void loop() {
if (trialCount >= NUM_TRIALS) {
showAverage();
while (true) {}
}
long waitMs = random(1000, 5001);
delay(waitMs);
digitalWrite(LED_PIN, HIGH);
unsigned long ledOnTime = millis();
while (digitalRead(BUTTON_PIN) == HIGH) {
if (millis() - ledOnTime > 2000) {
Serial.println("[時間切れ] 反応なし");
digitalWrite(LED_PIN, LOW);
delay(1000);
return;
}
}
unsigned long reactionMs = millis() - ledOnTime;
digitalWrite(LED_PIN, LOW);
reactionTimes[trialCount] = reactionMs;
trialCount++;
Serial.print("[");
Serial.print(trialCount);
Serial.print("回目] ");
Serial.print(reactionMs);
Serial.println("ms");
delay(1500);
}
void showAverage() {
long sum = 0;
for (int i = 0; i < NUM_TRIALS; i++) sum += reactionTimes[i];
Serial.println("=====");
Serial.print("平均反応時間: ");
Serial.print(sum / NUM_TRIALS);
Serial.println("ms");
}
プログラムの動き
待つ"] B --> C["LED点灯
時刻を記録"] C --> D{"ボタン
押された?"} D -->|Yes| E["反応時間を
計算&記録"] D -->|No 2秒経過| F[時間切れ] E --> G{10回終わった?} G -->|No| B G -->|Yes| H[平均値を表示] F --> B
使い方の手順
書き込みが終わったら、Arduino IDEの「シリアルモニタ」を開いて、9600bpsに設定します。準備完了です。
データ収集と分析のアイデア
自由研究としては、ここからが本番です。家族や友達のデータを集めて、いろいろな角度で分析しましょう。
- 家族 (お父さん・お母さん・兄弟) で年齢別に測る
- 朝・昼・夜の3つの時間帯で同じ人を測る
- 運動の前後で測って、体温と反応時間の関係を調べる
- 利き手と利き手じゃない手の差を比べる
たとえば「父40歳: 平均280ms、自分13歳: 平均210ms」のように整理すれば、年齢と反応時間の関係をグラフにできます。


レポートの書き方
動くものとデータが揃ったら、最後にレポートにまとめます。次の構成で書くと、自由研究としての完成度が高くなります。
- 研究のきっかけ (なぜ反射神経を測ろうと思ったか)
- 仮説 (年齢が上がると反応時間も長くなるか?など)
- 使った部品と配線図
- プログラムの説明
- 測定結果 (表とグラフ)
- 仮説の検証 + 感想と発展案
とくに2番目の「仮説」を最初に立てておくと、研究の流れが整理できるのでおすすめです。たとえば「中学生は大人より反応時間が短いはず」みたいな仮説を最初に書いておきます。
改造のアイデア
基本動作ができたら、自分なりの工夫を加えるとさらに評価が上がります。
- 3色LEDのうち「赤」が光ったときだけ押す (選択反応)
- パッシブブザーで「ピッ」と音も同時に出す (音と光どちらが速いか比較)
- LCD画面に直接結果を表示する
- 10回の測定後、最速・最遅・標準偏差も計算する
まとめ
今回は、自由研究にぴったりな「反射神経テスター」の作り方を紹介しました。Arduino初心者キットだけで作れて、測定値が手元に残るので、表やグラフまで作りやすいテーマです。
大切なのは、作って終わりにせず、データを集めて何かを発見することです。家族や友達を巻き込んで、ぜひ自分なりの「研究」にしてみてください。

今日から始める電子工作 
