🤖
エンジくん
これまで学んだ光センサーと超音波センサーを2つ同時に使ってみよう!組み合わせることで「夜に近づいたら警報!」みたいな本格的な作品が作れるよ!
1このレッスンで学ぶこと
- 🔗 センサー複合 — CdS + HC-SR04を同時に使う
- 🔀
&&(アンド) — 2つの条件を組み合わせる - 📋 else if — 複数の条件を順番に判断する
- 🚨 防犯センサー — 暗くて近いときだけアラーム!
- 🎮 防犯シミュレーター — 2つのスライダーで動作を確認!
2用意するもの
3センサー組み合わせの考え方
🤔 なぜセンサーを組み合わせるの?
🌤️ CdSだけ
暗い?明るい?しかわからない
+
📡 HC-SR04だけ
近い?遠い?しかわからない
=
🚨 2つ合わせると
「夜に人が近づいたら警報!」
という複雑な条件が作れる!
📊 動作ロジック一覧
| 🌤️ CdS(明るさ) | 📡 距離 | 🎯 動作 |
|---|---|---|
| 明るい | 遠い | ✅ 安全 — 何もしない |
| 明るい | 近い | 👋 接近中 — LED点滅(ゆっくり) |
| 暗い | 遠い | 🌙 夜間 — LED点灯(常時) |
| 暗い | 近い | 🚨 警報! — LED高速点滅 |
🔀 &&(アンド)で条件を組み合わせる
if (light < 400 && distance < 30)// 光が暗い かつ 距離が30cm未満 → 警報!
&& AND(かつ)
両方の条件が true のときだけ実行
|| OR(または)
どちらか一方が true なら実行
4コードを見てみよう
// ピン定義
const int CDS = A0;
const int TRIG = 9;
const int ECHO = 10;
const int LED = 13;
const int LIGHT_TH = 400; // 暗さのしきい値
const int DIST_TH = 30; // 近さのしきい値(cm)
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
// ① CdSで明るさを読む
int light = analogRead(CDS);
// ② HC-SR04で距離を測る
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long dur = pulseIn(ECHO, HIGH);
float dist = dur * 0.034 / 2.0;
// ③ 2つの条件で動作を分ける
bool isDark = (light < LIGHT_TH);
bool isNear = (dist < DIST_TH && dist > 0);
if (isDark && isNear) {
// 🚨 暗い+近い → 警報!高速点滅
digitalWrite(LED, HIGH); delay(100);
digitalWrite(LED, LOW); delay(100);
Serial.println("🚨 警報!");
} else if (isDark) {
// 🌙 暗い → 夜間灯(常時ON)
digitalWrite(LED, HIGH);
delay(200);
} else if (isNear) {
// 👋 明るい+近い → ゆっくり点滅
digitalWrite(LED, HIGH); delay(400);
digitalWrite(LED, LOW); delay(400);
} else {
// ✅ 安全 → OFF
digitalWrite(LED, LOW);
delay(200);
}
Serial.print("光:"); Serial.print(light);
Serial.print(" 距離:"); Serial.println(dist);
}
💡 bool型は true(正しい)か false(正しくない)の2種類だけの変数!isDarkやisNearのように「状態」を表すのに使うとコードが読みやすくなるよ。
5回路のつなぎ方
6実際につないでみよう!
7クイズに挑戦!
🤖
エンジくん
複数センサーの組み合わせと&&演算子をしっかり覚えよう!応用の幅がどんどん広がるよ!
クイズを読み込み中…
8防犯センサーシミュレーター 🚨
🤖
エンジくん
2つのスライダーで明るさと距離を変えてみよう!4つの動作パターンを全部確認しよう!
9まとめ
- ✅ 複数のセンサーはloop()の中で順番に読めば同時に使える
- ✅
&&(アンド)で「かつ」、||(オア)で「または」の条件が作れる - ✅
if / else if / elseで複数パターンの動作を切り替えられる - ✅
bool型で状態(true/false)を変数に入れるとコードが読みやすくなる - ✅ センサーを組み合わせるとできることが劇的に増える!これがセンサーの醍醐味!