Хочется, чтобы лестница сама включала свет, когда по ней идёшь. Но не хочется ставить дорогие KNX-коробки, ИК-датчики, которые реагируют на кошек, или провода под каждую ступеньку. Есть решение проще, дешевле — и оно работает от самого человека.
Идея: человек как конденсатор
Человеческое тело обладает ёмкостью. Когда ты наступаешь на проводящую поверхность (фольгу, медную ленту и т.п.), подключённую к микроконтроллеру, общая ёмкость цепи меняется. Это можно поймать — и включить свет.
ESP32 умеет измерять ёмкость «из коробки» — без внешних резисторов, компараторов или пьезоэлементов. У него есть 8–10 пинов с встроенной ёмкостной сенсорикой. Значит, можно разбить лестницу на 8 зон — и управлять подсветкой по ступенькам.
Главное — чтобы свет включился от человека. Ложное срабатывание раз в месяц? Не страшно. Пропуск — недопустим.
Что нужно
- ESP32 (любой, даже самый дешёвый — ~250 руб)
- Алюминиевая фольга или медная лента (можно из старого кабеля)
- Светодиоды: либо 8 отдельных каналов (через MOSFET), либо WS2812B-лента
- Блок питания 5 В (от старого USB-адаптера)
- Изолента, лак или плёнка для защиты датчиков
Как это собрать
- Вырежь из фольги «островки» под ступеньки — по одному на зону (можно под ковёр или тонкий деревянный слой до 5 мм).
- Припаяй к каждому островку тонкий провод и подключи к ёмкостным пинам ESP32:
GPIO 4, 0, 2, 15, 13, 12, 14, 27. - Подключи светодиоды: либо напрямую через транзисторы, либо WS2812B-ленту к одному пину.
- Залей скетч (ниже) и подбери пороги под свою лестницу.
Скетч для 8 зон
Этот код включает свет на 5 секунд, когда кто-то наступает на ступеньку. Ложные срабатывания сглаживаются — нужно 2–3 замера подряд.
#define NUM_ZONES 8
const int touchPins[NUM_ZONES] = {4, 0, 2, 15, 13, 12, 14, 27};
const int ledPins[NUM_ZONES] = {32, 33, 25, 26, 23, 22, 21, 19};
int thresholds[NUM_ZONES] = {60, 60, 60, 60, 60, 60, 60, 60}; // настрой вручную!
unsigned long lastTrigger[NUM_ZONES] = {0};
const long holdTime = 5000; // 5 секунд
void setup() {
for (int i = 0; i < NUM_ZONES; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW);
}
}
void loop() {
unsigned long now = millis();
for (int i = 0; i < NUM_ZONES; i++) {
int val = touchRead(touchPins[i]);
if (val < thresholds[i]) {
digitalWrite(ledPins[i], HIGH);
lastTrigger[i] = now;
}
if (now - lastTrigger[i] > holdTime) {
digitalWrite(ledPins[i], LOW);
}
}
delay(50);
}
Советы для надёжности
- Площадь датчика — чем больше, тем лучше реагирует (даже в тапках).
- Пороги подбираются на месте: запусти мониторинг через Serial, постой на ступеньке — и посмотри, на сколько падает значение.
- Не клади рядом 220 В — будут наводки. Лучше питать всё от 5 В USB.
- Изолируй фольгу — но не слишком толсто. Дерево до 5 мм — нормально.
Что дальше?
- Подключи WS2812B и сделай «бегущую волну» или след за человеком.
- Добавь определение направления: вверх/вниз — и включай свет только перед человеком.
- Питай всё от Power Bank — и получишь автономную систему без проводов.
Это решение обойдётся в разы дешевле коммерческих аналогов, не требует сложной механики и работает именно от присутствия человека — без камер, ИК и батареек.
А если свет включится лишний раз — ну и пусть. Главное, чтобы в темноте не споткнуться.
Комментарии
Пока нет комментариев. Будьте первым!