Привет! Сегодня сделаем обзор на датчик сердцебиения или пульсометр KY-039. Соберем простую схему для отображения пульса на графике плоттера.
Содержание
В прошлый раз мы рассматривали еще один интересный датчик, датчик наклона KY-027. И собрали с ним интересную схему. Посмотрите тот пост, если пропустили или уже забыли.
А сегодня попробуем собрать простую схему для отображения пульса и немного поэкспериментируем с датчиком сердцебиения или пульсометром.
Для выполнения этого урока нам понадобятся
- Ардуино UNO
- Макетная плата
- Перемычки
- Пульсометр KY-039
- Кабель USB
Пульсометр KY-039
Датчик KY-039 состоит из инфракрасного светодиода и фототранзистора. Инфракрасный свет светодиода поступает на фототранзистор сквозь палец. При изменении кровяного давления в капиллярах пальца, меняется сопротивление фототранзистора. И эти данные отображаются на выходе с датчика.
Для более точных показаний датчика, следует закрыть фототранзистор от солнечного или искусственного света.
Принципиальная схема
Датчик KY-039 работает от 5 вольт. которые подаются на центральный контакт. Данные с выхода S нужно считать на аналоговом пине Ардуино. А оставшийся контакт соединим с землей.
Простейший скетч позволит нам снять показания с аналогового пина Ардуино. И проверить работоспособность датчика.
Просто выведем на плоттер показания пина A0.
int sensorPin = 0;
void setup() {
Serial.begin(9600);
}
void loop (){
Serial.println(analogRead(sensorPin));
delay(100);
}
Откроем кно плоттера, чтобы увидеть примерно такую картину.
Измерения происходят слишком быстро. И обработать их пока что трудно. Но мы можем изменить программу для более точной обработки данных.
Попробуем сделать более плавное отображение данных. Возьмем среднее значение от нескольких измерений и выведем уже его.
#define samp_siz 20 // 20 измерений
Заполним этими данными массив.
int reads[samp_siz];
Удаляем старые данные из массива и заменяем их новыми.
reader = analogRead (sensorPin);
sum -= reads[ptr];
sum += reader;
reads[ptr] = reader;
last = float(sum) / samp_siz; // вычисляем среднее
ptr++;
ptr %= samp_siz;
С усредняющей программой мы можем увидеть настоящий сердечный ритм.
Полный текст программы
#define samp_siz 4
#define rise_threshold 5
int sensorPin = 0;
void setup(){
Serial.begin(9600);
}
void loop (){
float reads[samp_siz], sum;
long int now, ptr;
float last, reader, start;
float first, second, third, before, print_value;
bool rising;
int rise_count;
int n;
long int last_beat;
for (int i = 0; i < samp_siz; i++)
reads[i] = 0;
sum = 0;
ptr = 0;
while(1){
n = 0;
start = millis();
reader = 0.;
do {
reader += analogRead (sensorPin);
n++;
now = millis();
} while (now < start + 20);
reader /= n;
sum -= reads[ptr];
sum += reader;
reads[ptr] = reader;
last = sum / samp_siz;
if (last > before){
rise_count++;
if (!rising && rise_count > rise_threshold){
rising = true;
first = millis() - last_beat;
last_beat = millis();
print_value = 60000. / (0.4 * first + 0.3 * second + 0.3 * third);
Serial.print(print_value);
Serial.print('\n');
third = second;
second = first;
}
} else {
rising = false;
rise_count = 0;
}
before = last;
ptr++;
ptr %= samp_siz;
}
}
Заключение
Мы рассмотрели пульсометр KY-039 и его подключение к Ардуино. Использовали простую программу для просмотра данных с датчика. Написали скетч для более удобного считывания данных с датчика. И посмотрели на плоттере Ардуино сердечный ритм.