| Телеметрия дыхания во сне (30.03.2026). |
|
| 2026 - Март | |
| 30.03.2026 13:50 | |
Механические моменты сборки конструкции и программирование: - для датчика используется аналоговый вход Arduino - можно позволить любую адекватную длину провода, а не как метр с I2C. Подтягивающий резистор 82кОм на GND - и точность съёма резко увеличивается, отпадает необходимость создания фильтра для сглаживания постоянно пляшущих показаний. Единственное, провод питания должен обеспечивать 200мА: датчик греется и жрёт много; - модуль работы с SD расположил прямо рядом с USB-питанием 5В, используя IDC-кабель ~90см. Универсальные 5В ниже необходимого минимума для Arduino - однако хватает для выполнения задачи; - использовал micros, как более точную относительно millis, - но тоже зря: используется Delay в исходниках, а его точность - как у millis. Телеметрия: бинарная, 2Б значение, 4Б время. Сохраняется как int и float - но всё сохраняется как uint8_t (языками программирования читаются как short int и int). Использовал Borland C++ Builder v.6.0, позаимствовав исходники из другого проекта; - эластичный бинт приклеил к маске снаружи, на суперклей, с обжимом крокодилами (которые потом пришлось аккуратно отдирать). Скорее всего, ошибка: надо было армированной лентой зафиксировать, а потом часть отклеить и отрезать. Держится, даже если тянуть несильно. Итак, маску на лицо, проверка отсутствия гипоксии дыханием минут 5 - и баиньки: - во время последнего дрочева платформы внутри бочонка - оторвался наружный светодиод. Оказалось, некритично: при снятии показаний моргает встроенный светодиод на платформе - бочонок прекрасно слабо светится ночью, и возможно оценить частоту моргания светодиода как запись информации с датчика; - на маске не образуется конденсат и не стекает на лицо; - но спустя 1.5ч организм выводит из сна. Апноэ? Хуже. Носопырки напрочь высохли. Скорее всего, т.к. датчик нагревается, воздух постепенно сушит ноздри (хотя в краткосрочной перспективе вообще ничего не ощущаешь). И куда его перемещать, чтобы длительно снимать показания, - фиг знает. Можно попробовать на суперклей к одной из боковых отверстий маски или как-то сделать на расстоянии от центрального отверстия маски, чтобы не смещать центр тяжести маски. Анализ телеметрии кратковременного сна: - требуется автоматически оценивать повторяемость показаний датчика на протяжение всего времени телеметрии. То есть, соседние показания 400 и 420 - это не 2 числа, а 21. Самое меньшее по повторяемости показание - увеличивается шанс найти апноэ мгновенно; - анализ резкого изменения показания углекислого газа за определённый период времени. Требуется как число указания этого периода, так и автоматический поиск такого резкого изменения. Но до этого всего дело не дошло: - при нажатии на экстренную кнопку - micros() сбивалась и писала какую-то дичь; - поиск дичи в HEX-редакторе HxD - временно не давал результата из-за бага: поиск позиции ведётся по HEX-значению (DEC сбрасывается обратно при каждом поиске); - в интернете есть описание такой аппаратной ситуации: нужно цифровой канал через INPUT_PULLUP подключать. Но оказалось всё анальнее и безумно логично. File.write((uint8_t*)micros(), sizeof(float)); - не равно const float fTime = micros(); + oFile.write((uint8_t*)&fTime, sizeof(float));. К этому добавились баги TChart билдера - поэтому вот пока вам кусочек дыхания; а я пошёл спать - а потом в Qt (или вообще небинарно в Excel)... Но интуиция подсказывала, что что-то не так. Мне бы такую интуицию на бирже: удалось скорректировать телеметрию и без серьёзных багов вывести её часть на графике. Уменьшение углекислоты говорит об уменьшении объёма дыхания. Ну а провал - полный пздц: здравствуй, самое скрытое апноэ (без пробуждения). Остаётся починить исходники, датчик на маске переклеить - и словить на ночной телеметрии, надеюсь, только одну такую штуку. А потом - отвечать на вопрос "почему"... График, как минимум, говорит о том, что теперь пожизненно нельзя пить успокоительное и снотворное. Иначе организм может просто не запуститься - смерть во сне. (добавлено 27.04.2026) Каждый раз думаешь: снимешь полную ночь, проанализируешь - и выложишь готовый прибор на сайте. А вот хрен: - датчик по-прежнему продолжает сушить мне нос, даже когда отверстия в трубке маски кислородной сделал (конечно: рассеивать в нагрев почти 1Вт). Сверлом 6мм - создаются отверстия 2мм, сверлом 2мм - создаются отверстия ~0мм (как фиксатор для сверла большего размера). Надо отдалять датчик от отверстия, чтобы он его не затыкал; - заменить кислородную маску на маску от РПГ-67 - не вышло: нужно сильное усилие для вдоха (выдох - прекрасно, и датчик приклеить именно рядом с клапаном маски по центру, а не впритирку, - идеально); - ещё модуль SD глючить начал: сказывается напряжение 5В вместо номинального 3.3В - глючит при многочасовой работе. И само тестирование - полный пздц. Например, что-то случилось с эластичным бинтом. Он полежал на жарком кратковременном весеннем солнце - и стал липким. В итоге, пришлось спать с разрезанным старым носком на лице: разрезав его как длинную полоску - он защитил лицо и волосы от липкого отделяемого от бинта. При сделанных мелких отверстиях - отмечается уменьшение количества углекислого газа в датчике. Должно было быть наоборот (вентиляция же лучше) - ладно, физику плохо понял. Патологий - не замечено. (добавлено 14.05.2026) Длительная телеметрия показала, что при задержке 60мс - реальная задержка составляет 79мс. И это понятно: в COM-порт информация выводится, скорость COM-порта всего 9600бод (при максимуме 19200бод для Nano, как выяснилось), сами исходники неоптимальны (будут, когда холтер самодельный доделаю: те же яйца, только высокочастотные). |
|
| Обновлено ( 14.05.2026 11:21 ) |