🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


📡 Проект: удалённый монитор пульса через ESP8266 на датчике KY-039

В других проектах на сайте пульс с KY-039 показывается на дисплее или сравнивается с порогом локально. Здесь ESP8266 отдаёт текущее значение BPM как простую веб-страницу — открыть её может кто угодно в той же WiFi-сети, не подходя физически к самому датчику.

Как это работает

Логика подсчёта BPM здесь такая же, как в проектах с дисплеем и сигнализацией: сигнал сравнивается с порогом, фиксируется момент пересечения снизу вверх с рефрактерным периодом, а BPM считается по времени между соседними ударами. Разница именно в способе доставки результата — вместо локального дисплея или зуммера ESP8266 запускает свой веб-сервер и по каждому запросу от браузера отдаёт HTML-страницу с последним вычисленным значением BPM.

Важная особенность именно для этого датчика: измерение пульса требует постоянного контакта пальца с датчиком и быстрого опроса в `loop()`, а обработка веб-запросов (`server.handleClient()`) тоже должна выполняться регулярно — в этом скетче оба процесса уживаются в одном `loop()` без использования прерываний или многозадачности, потому что ни одна из операций не блокирует выполнение надолго.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. KY-039: аналоговый выход (S) → A0 ESP8266, VCC → 3.3V, GND → GND.
  2. Плотно, но без лишнего нажима приложите палец к датчику между излучателем и приёмником.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему. Это учебный проект,
// не медицинский прибор — не используйте показания для диагностики.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

const char* WIFI_SSID = "ваша_сеть";
const char* WIFI_PASSWORD = "ваш_пароль";

ESP8266WebServer server(80);

const int SENSOR_PIN = A0;
const int THRESHOLD = 550;
const unsigned long REFRACTORY_MS = 300;

bool wasBelow = true;
unsigned long lastBeat = 0;
int currentBpm = 0;

void handleRoot() {
  String html = "<html><body><h1>Пульс: " + String(currentBpm) + " BPM</h1></body></html>";
  server.send(200, "text/html", html);
}

void setup() {
  Serial.begin(9600);

  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  Serial.println("IP адрес: " + WiFi.localIP().toString());

  server.on("/", handleRoot);
  server.begin();
}

void loop() {
  server.handleClient();

  int raw = analogRead(SENSOR_PIN);
  bool isAbove = raw > THRESHOLD;
  unsigned long now = millis();

  if (wasBelow && isAbove && (now - lastBeat) > REFRACTORY_MS) {
    unsigned long interval = now - lastBeat;
    if (lastBeat != 0 && interval > 0) {
      currentBpm = 60000 / interval;
    }
    lastBeat = now;
  }

  wasBelow = !isAbove;
}

Библиотеки ESP8266WiFi и ESP8266WebServer входят в стандартный пакет поддержки ESP8266 для Arduino IDE. Распечатайте реальные значения `raw` в мониторе порта с пальцем на датчике перед использованием, чтобы подобрать `THRESHOLD`.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← ⏰ напоминание-будильник по расписанию на час…🌿 точный климат-контроль теплицы на HTU21D с… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 285 ₽ 257 ₽ (экономия 28 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA