暗闇を検知して自動で点く懐中電灯を作ろう
ダイソーで懐中電灯買ったんだけど、暗くなった瞬間に自動で付いたら停電時に便利だよね。


いいテーマだね。「ハンズフリー懐中電灯」をArduinoで作ろう。明るさセンサーで部屋の暗さを判定して、暗くなったら自動で光る装置だよ。停電対策というより、自動点灯の仕組みを体験する工作だね。
今回は、停電や暗闇対策の電子工作をしたい方に向けて、初心者キットだけで作れる「ハンズフリー懐中電灯」を紹介します。
CdSセンサーで部屋の明るさを監視し、暗いと判断したら自動で点灯する装置です。停電対策というよりも、明るさセンサーで自動点灯する仕組みを試す工作として作ります。ダイソーのケースと組み合わせて、玄関やトイレに常設できる実用品になります。
この記事で作るもの
- 明るさが暗くなったら自動で点灯
- 明るくなったら自動で消える
- USB給電で常時待機 (省電力)
- ボタンで強制ON/OFFも可能
用意するもの
| 分類 | アイテム | 入手先 |
|---|---|---|
| 外装 | ダイソーのクリアケース | ダイソー |
| USB | UNO R3ならUSB-Bケーブル、互換ボードなら基板の端子に合うケーブル | キットまたは100均で別途用意 |
| 頭脳 | Arduino UNO R3 | キット |
| 明るさ | CdS + 10kΩ | キット |
| 光源 | 白LED + 抵抗330Ω × 3 | キット |
| 切替 | タクトスイッチ | キット |
| 配線 | ブレッドボード、ジャンパー | キット |
光量を確保するため、白LEDを3個、それぞれに抵抗を入れてArduinoの別ピンから同時点灯させます。普通の懐中電灯より暗いですが、廊下や玄関の足元灯としては十分です。
配線図
a b c d e
+─────────+
[+]rail| . . . . . | ← 5V
[-]rail| . . . . . | ← GND
+─────────+
row 3 | X . . . . | ← CdS 上 ([+])
row 4 | X . . . . | ← CdS 下+A0+10k上
row 6 | X . . . . | ← 10k下 ([-])
row 9 | X . . . . | ← SW (D2)
row 11 | X . . . . | ← SW反対 ([-])
row 14 | X . . . . | ← 330Ω 上 (D9)
row 15 | X . . . . | ← 330Ω 下+LED1+
row 17 | X . . . . | ← LED1- ([-])
row 19 | X . . . . | ← 330Ω 上 (D10)
row 20 | X . . . . | ← 330Ω 下+LED2+
row 22 | X . . . . | ← LED2- ([-])
row 24 | X . . . . | ← 330Ω 上 (D11)
row 25 | X . . . . | ← 330Ω 下+LED3+
row 27 | X . . . . | ← LED3- ([-])
+─────────+
プログラム
#define CDS A0
#define BTN 2
#define LED1 9
#define LED2 10
#define LED3 11
#define DARK_TH 300
int prevLight = 0;
bool manualOn = false;
int lastBtn = HIGH;
void setup() {
Serial.begin(9600);
pinMode(BTN, INPUT_PULLUP);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
prevLight = analogRead(CDS);
}
void loop() {
int light = analogRead(CDS);
int diff = prevLight - light;
int currentBtn = digitalRead(BTN);
if (lastBtn == HIGH && currentBtn == LOW) {
manualOn = !manualOn;
delay(200);
}
lastBtn = currentBtn;
bool autoOn = (light < DARK_TH);
if (manualOn || autoOn) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
} else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
Serial.print("明るさ: ");
Serial.print(light);
Serial.print(" 自動: ");
Serial.print(autoOn);
Serial.print(" 手動: ");
Serial.println(manualOn);
prevLight = light;
delay(200);
}
プログラムの動き
flowchart TD
A[起動] --> B[明るさ測定]
B --> C{ボタン押された?}
C -->|Yes| D[手動モード反転]
C -->|No| E{"暗い
または
手動ON?"} D --> E E -->|Yes| F[3個全LED点灯] E -->|No| G[全消灯] F --> H[200ms待つ] G --> H H --> B
または
手動ON?"} D --> E E -->|Yes| F[3個全LED点灯] E -->|No| G[全消灯] F --> H[200ms待つ] G --> H H --> B
設置のアイデア
設置場所のアイデア
- 玄関の足元 (夜帰宅時に自動点灯)
- トイレへの廊下 (夜中の安全確保)
- 寝室の枕元 (起き抜けに灯り)
- 洗面所 (起床時の自動照明)
停電中でも動く?


USB給電だから、コンセントが切れたら動かないんだ。本気の停電対策にしたいなら、モバイルバッテリーから給電する形にすると停電中も動くよ。これは大事な改造ポイントだね。
改造のアイデア
発展アイデア
- モバイルバッテリー給電で停電対応
- パッシブブザーで「停電検知!」アラート
- 明るさのスムージング処理で誤動作対策
- RGB LEDで「夜は赤、朝は白」の時間モード
まとめ
今回は、ダイソーケースと初心者キットで作る「ハンズフリー懐中電灯」を紹介しました。CdSセンサーを使った自動点灯で、生活の安全と快適さを高める実用品です。
大切なのは、明るさセンサーで自動的に動作が変わる体験です。市販の人感センサーライトや自動点灯ライトがどんな仕組みで動いているか、想像しやすくなります。

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