Доброго всем дня. Есть датчик температуры и влажности DHT21. Эксперимент показал, что его чувствительности достаточно, чтобы детектировать дыхание в реальном времени, используя только данные с датчика влажности. Теперь задача написать обработчик событий. Подскажите, пожалуйста, как закодить следующий алгоритм: 1. Произошёл выдох -> запуск таймера 2. Как только произошёл вдох -> сброс таймера на исходное значение, но таймер не производит отсчёт Проблема как раз в том, чтобы машина поняла, что состоялся вдох или выдох. Данные всё время разные (% влажности) и нет такого, что если выдох, то это всегда 90% влажности, если вдох, то всегда 50% влажности. Не могу понять как закодить событие на изменение влажности относительно предыдущих показателей. Как некую дельту заложить как триггер. И есть ещё разные вдохи/выдохи в разном психо-эмоциональном состоянии, поэтому вдохи и выдохи могут быть длинными (на графике самые большие перепады где) или, в спокойном состоянии, дыхание становится более поверхностным, тогда дельта на графике маленькой становится. Пример графика Где "отдалял" - имеется в виду датчик отдалял от носа. По центру обычное ровное дыхание Справа - возбуждённое дыхание Код, пока, такой: Код (C++): void loop() { // считывание данных с датчика dht.read(); // проверяем состояние данных switch(dht.getState()) { // всё OK case DHT_OK: Serial.println(dht.getHumidity()); break; // пропускаю другие кейсы } delay(422); // Опрашивая чаще не видит данных с датчика } Буду рад любому конструктивному диалогу =) Евгений.
ввиду того, что в выдыхаемом воздухе содержится очень много веществ и жиров, которые противопоказаны емкостным датчикам влажности, такой датчик "испортится" через неделю-две.
Ценный комментарий, благодарю. Пока, других способов детекции в реальном времени не вижу. Пояса на грудь растягивающиеся - не вариант. Датчик температуры в DHT21 обладает инерцией и задержкой, не успевая "нагреваться" и "остывать" в реальном времени. В любом случае, это не для постоянной работы девайс, а как арт-проект, который будет включаться и выключаться не часто и не сильно на долго. Поэтому, можно иметь в запасе просто ещё один датчик, если этот из строя выйдет.
Попробуйте за некое время (максимум самый длинный вдох) записывать измерения датчика, сгладить (от шума) и найти самый большой размах (он должен быть больше некоторого минимального порога, чтобы исключить шум). Если есть максимум, то считаем это вдохом, если есть минимум - выдохом (или на оборот, я не знаю). Если вдох/выдох найден, то нужно сбросить буфер, до момента вдоха/выдоха и набирать статистику далее.