Категории

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

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

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

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

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

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

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

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

Что нужно

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

  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);
}

Советы для надёжности

Что дальше?

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

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

Комментарии

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

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

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

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


кто я | книга | контакты

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