Схема измерителя пульсаЧастота пульса – важный показатель состояния здоровья человека. Данный измеритель пульса можно использовать для измерения частоты сердцебиений после физических нагрузок, и по этому оценивать свою физическую подготовку. Также по изменению частоты пульса можно определять когда человеку снится сон.

Схема собрана на микроконтроллере ATmega88 и операционном усилителе LM324, прошивка написана на BascomAVR.

 

Принципиальная схема измерителя пульса

Основная идея, лежащая в основе проекта в том, что во время сердченых сокращений давление крови в теле изменяется, и как следствие изменяется «прозрачность» кожи для ИК-лучей. По сути дела измеритель пульса «видит» ваш пульс на просвет. В данной схеме измерителя пульса используется пара: ИК-диод и ИК-фоторезистор, между которыми помещается палец. По изменению уровня принимаемого ИК-излучения микроконтроллер вычисляет частоту сердцебиения или пульса.

Измеритель пульса
Схема измерителя пульса состоит из двух частей: аналоговой – это операционный усилитель, который производит усиление и фильтрацию принятого сигнала, и цифровая – это микроконтроллер ATmega8 и семисегментные индикаторы.

ИК-диод и ИК-фоторезистор
На операционном усилителе ОУ LM324 собран чувствительный усилитель и фильтр нижних частот НЧ, который захватывает слабые изменения напряжения на фоторезисторе, которые отражают скачки давления крови.

Измерение пульса
Микроконтроллер ATmega88 работает на частоте 4МГц и тактируется от внешнего  кварцевого резонатора. Можно использовать микроконтроллеры ATmega48, ATmega168 или ATmega8, предварительно изменив вторую строку $regfile = «M88def.dat» в исходнике и перекомпилировав прошивку. Транзисторы можно использовать любые маломощные NPN-типа. Для подстройки и калибровки схемы используется резистор VR1 на 100кОм.

Исходный код для микроконтроллера написан на basic в компиляторе BascomAVR. Сам код:

{codecitation class=»brush: vb; gutter: true;» width=»700px»}

‘ DEFINE TARGET = MEGA88 @ 4MHZ
$regfile = «M88def.dat»
$crystal = 4000000
‘ CONFIGURE IO PORTS
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Config Portb.5 = Output
Config Portb.2 = Output
‘ DEFINE VARIABLES
Dim Led(10) As Byte
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Word
Dim E As Word
Dim F As Integer
Dim G As Word
Dim H As Word
Dim J As Integer
Dim K As Integer
Dim X As Byte
‘ DEFINE LED DIGITS
Led(1) = 8
Led(2) = 187
Led(3) = 97
Led(4) = 49
Led(5) = 178
Led(6) = 52
Led(7) = 4
Led(8) = 185
Led(9) = 0
Led(10) = 48
‘ SET DEFAULT HEART RATE
K = 60
‘ START ADC RUNNING
Start Adc
‘ ********** MAIN LOOP **********
Main:
Do
‘ READ ADC VALUE
D = Getadc(0)
‘ GET ADC CHANGE SINCE LAST
F = D — E
F = Abs(f)
E = D
‘ test bench 1 second = 164 clk
‘X = X + 1
‘F = 0
‘If X = 200 Then
‘X = 0
‘F = 10
‘End If
‘ HEART BEAT FILTER
If G > 0 Then G = G — 1
If F > 4 And G = 0 Then G = 40
‘ HEART BEAT LED FLASHER
If G = 1 Then Portb.2 = 0
If G = 20 Then Portb.2 = 1
‘ CALCULATE HEART RATE PER MINUTE
H = H + 1
If G = 1 Then
J = 9840 / H
H = 0
End If
‘ SLOWLY ADJUST RUNNING AVERAGE
If G = 1 Then
If K > J Then K = K — 1
If K < J Then K = K + 1
End If
‘ DISPLAY DATA ON LEDS
If K > 99 Then
C = K Mod 10
B = K \ 10
B = B Mod 10
A = K \ 100
End If
If K < 100 Then
C = K Mod 10
B = K \ 10
A = 0
End If
If K < 10 Then
C = K
B = 0
A = 0
End If
Gosub Ledshow
‘ RESTART MAIN LOOP
Loop
End
‘ ********** LED DISPLAY ROUTINE **********
Ledshow:
Portb.5 = 1
Portb.4 = 0
Portb.3 = 0
D = A + 1
Portd = Led(d)
Waitms 2
Portb.5 = 0
Portb.4 = 1
Portb.3 = 0
D = B + 1
Portd = Led(d)
Waitms 2
Portb.5 = 0
Portb.4 = 0
Portb.3 = 1
D = C + 1
Portd = Led(d)
Waitms 2
Return

{/codecitation}

Скачать проект и прошивку

Источник: 8051projects.net

Просмотров всего: 3 274, сегодня: 1

Напишите комментарий