Имеется вот такой датчик. В принципе с подключением все понятно, один аналоговый вход, показание которого плавает в ритм с сердечным пульсом. Показания разнятся в зависимости от пальца и силе его прижатия, то есть, например может быть от 10 до 20 или от 15 до 40. Задача вычислить частоту пульса в минуту. Первое что пришло в голову, искать одноименные фронты, например растущие и по разнице времени между ними вычислять пульс. В реальности пока не получается это реализовать. Перепробовал кучу вариантов, на данный момент застрял на таком варианте, который вообще ничего не замеряет: Код (C++): raw = analogRead (sensorPin); // показание датчика change = (raw > rawOld); // растущий фронт? rawOld = raw; if (change != changeOld) { // дожидаемся СМЕНЫ фрона на растущий timer2 = millis() - timer1; // вычисляем время между этой сменой и прошлой timer1 = millis(); // запоминаем время текущей смены } changeOld = change; Уже глаз замылился, чувствую, что решение где то рядом. Что я делаю не так?
Если не ошибаюсь у Вас KY-039. У меня ни когда не было такого датчика, вот код из примеров. Код (C++): / Pulse Monitor Test Script int sensorPin = 0; double alpha = 0.75; int period = 100; double change = 0.0; double minval = 0.0; void setup () { Serial.begin (9600); } void loop () { static double oldValue = 0; static double oldChange = 0; int rawValue = analogRead (sensorPin); double value = alpha * oldValue + (1 - alpha) * rawValue; Serial.print (rawValue); Serial.print (","); Serial.println (value); oldValue = value; delay (period); } Взято от отсюда - https://tkkrlab.nl/wiki/Arduino_KY-039_Detect_the_heartbeat_module. Вот видео работы - Там тоже виден код, он минимальный, можно и переписать.
Этот код я видел. Мало того, что он странный (есть лишние строки), так еще и не могу заметить вообще какую либо разумную зависимость показаний от пульса, просто хаос прет. Как вообще проверить ИК светодиод, работает ли он? Через камеру телефона смотрю, не видно (пульты видно). Что то я растерян. (
Увы моих знаний не достаточно, не работал с ИК светодиодами. Хаотические данные, могут быть проблемой подключения или не качественной пайки, не раз сталкивался с таким (то не припаян, то припаяны несколько пинов). UPD. И попробуйте, в получить данные в темноте, нашел данную рекомендацию на одном из форумов. И экранировать как-то датчик от засветок. Источник тут, там обсуждается аналогичная проблема - https://forum.arduino.cc/index.php?topic=209140.0. UPD 2. На видео показано, что можно увидеть на камере телефона работу ИК светодиода, на 39 секунде.
В общем разобрался. Датчик этот никому не рекомендую, гадость редкая, даже в качестве игрушки и тренажера для схемотехника не пойдет. На форумах многие посты о том как хоть что то из него выжать на правду похожее, но ощутимого успеха никто пока не добился. Что стабильного можно извлечь из аналогового датчика, у которого разброс показаний меньше помех, порядка 1-2 единицы на 1024. Пропускает три стука сердца из четырех, но за то видит их там, где их нет. В ведро.
Информация вдогонку. Будь то того мало, светодиод был припаян наоборот. То есть, когда работает датчик -не светит излучатель, при смене полярности излучатель светит, но датчик не работает. Китайские друзья порадовали в очередной раз. Перепаял, показания стали более вменяемые, во всяком случае датчик стал реагировать на отсутствие или наличие подсветки, но пульса как не видел так и не видит. Неудачная конструкция, не покупайте.