↩️ На главную

Подсветка лестницы своими руками: ёмкостные датчики на ESP32

18.12.2025 | Статья из категории: IOT умный дом

Подсветка лестницы своими руками: ёмкостные датчики на ESP32

Хочется, чтобы лестница сама включала свет, когда по ней идёшь. Но не хочется ставить дорогие KNX-коробки, ИК-датчики, которые реагируют на кошек, или провода под каждую ступеньку. Есть решение проще, дешевле — и оно работает от самого человека.

Идея: человек как конденсатор

Человеческое тело обладает ёмкостью. Когда ты наступаешь на проводящую поверхность (фольгу, медную ленту и т.п.), подключённую к микроконтроллеру, общая ёмкость цепи меняется. Это можно поймать — и включить свет.

ESP32 умеет измерять ёмкость «из коробки» — без внешних резисторов, компараторов или пьезоэлементов. У него есть 8–10 пинов с встроенной ёмкостной сенсорикой. Значит, можно разбить лестницу на 8 зон — и управлять подсветкой по ступенькам.

Главное — чтобы свет включился от человека. Ложное срабатывание раз в месяц? Не страшно. Пропуск — недопустим.

Что нужно

  • ESP32 (любой, даже самый дешёвый — ~250 руб)
  • Алюминиевая фольга или медная лента (можно из старого кабеля)
  • Светодиоды: либо 8 отдельных каналов (через MOSFET), либо WS2812B-лента
  • Блок питания 5 В (от старого USB-адаптера)
  • Изолента, лак или плёнка для защиты датчиков

Как это собрать

  1. Вырежь из фольги «островки» под ступеньки — по одному на зону (можно под ковёр или тонкий деревянный слой до 5 мм).
  2. Припаяй к каждому островку тонкий провод и подключи к ёмкостным пинам ESP32: GPIO 4, 0, 2, 15, 13, 12, 14, 27.
  3. Подключи светодиоды: либо напрямую через транзисторы, либо WS2812B-ленту к одному пину.
  4. Залей скетч (ниже) и подбери пороги под свою лестницу.

Скетч для 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 — и получишь автономную систему без проводов.

Это решение обойдётся в разы дешевле коммерческих аналогов, не требует сложной механики и работает именно от присутствия человека — без камер, ИК и батареек.

А если свет включится лишний раз — ну и пусть. Главное, чтобы в темноте не споткнуться.




Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA