Распознание дыхания

Тема в разделе "Arduino & Shields", создана пользователем evgkhlopotov, 2 май 2020.

  1. evgkhlopotov

    evgkhlopotov Нерд

    Доброго всем дня.

    Есть датчик температуры и влажности DHT21. Эксперимент показал, что его чувствительности достаточно, чтобы детектировать дыхание в реальном времени, используя только данные с датчика влажности.


    Теперь задача написать обработчик событий. Подскажите, пожалуйста, как закодить следующий алгоритм:

    1. Произошёл выдох -> запуск таймера
    2. Как только произошёл вдох -> сброс таймера на исходное значение, но таймер не производит отсчёт


    Проблема как раз в том, чтобы машина поняла, что состоялся вдох или выдох. Данные всё время разные (% влажности) и нет такого, что если выдох, то это всегда 90% влажности, если вдох, то всегда 50% влажности. Не могу понять как закодить событие на изменение влажности относительно предыдущих показателей. Как некую дельту заложить как триггер.

    И есть ещё разные вдохи/выдохи в разном психо-эмоциональном состоянии, поэтому вдохи и выдохи могут быть длинными (на графике самые большие перепады где) или, в спокойном состоянии, дыхание становится более поверхностным, тогда дельта на графике маленькой становится.


    Пример графика

    Где "отдалял" - имеется в виду датчик отдалял от носа.
    По центру обычное ровное дыхание
    Справа - возбуждённое дыхание

    [​IMG]



    Код, пока, такой:


    Код (C++):
    void loop()
    {
      // считывание данных с датчика
      dht.read();
      // проверяем состояние данных
      switch(dht.getState()) {
        // всё OK
        case DHT_OK:
       
          Serial.println(dht.getHumidity());
          break;
     
       // пропускаю другие кейсы
      }

      delay(422);    // Опрашивая чаще не видит данных с датчика
    }

    Буду рад любому конструктивному диалогу =)
    Евгений.
     
    Последнее редактирование: 2 май 2020
  2. parovoZZ

    parovoZZ Гуру

    ввиду того, что в выдыхаемом воздухе содержится очень много веществ и жиров, которые противопоказаны емкостным датчикам влажности, такой датчик "испортится" через неделю-две.
     
  3. evgkhlopotov

    evgkhlopotov Нерд

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

    Пояса на грудь растягивающиеся - не вариант. Датчик температуры в DHT21 обладает инерцией и задержкой, не успевая "нагреваться" и "остывать" в реальном времени.


    В любом случае, это не для постоянной работы девайс, а как арт-проект, который будет включаться и выключаться не часто и не сильно на долго. Поэтому, можно иметь в запасе просто ещё один датчик, если этот из строя выйдет.
     
  4. Daniil

    Daniil Гуру

    Попробуйте за некое время (максимум самый длинный вдох) записывать измерения датчика, сгладить (от шума) и найти самый большой размах (он должен быть больше некоторого минимального порога, чтобы исключить шум). Если есть максимум, то считаем это вдохом, если есть минимум - выдохом (или на оборот, я не знаю). Если вдох/выдох найден, то нужно сбросить буфер, до момента вдоха/выдоха и набирать статистику далее.