Преобразование аналоговых показаний в сердцебиение?

Я поддерживаю mcp3008ADC с помощью малины Pi. Я следил за учебником от Adafruit отсюда, https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/mcp3008

и успешно протестировали программу тестирования simeple, размещенную здесь,

https://github.com/adafruit/Adafruit_Python_MCP3008/tree/master/examples

Когда я запускаю simpletest.pyпрограмму, я получаю следующий вывод:

|    0 |    1 |    2 |    3 |    4 |    5 |    6 |    7 |
---------------------------------------------------------
|  813 |  307 |  276 |  277 |  254 |  228 |  231 |  609 |
|  813 |    0 |    0 |    0 |    0 |    0 |    0 |  503 |
|  813 |   50 |  185 |  289 |  292 |  289 |  306 |  514 |
|  813 |  274 |  183 |  153 |   47 |    0 |    0 |  511 |
|  813 |    0 |    0 |    9 |   28 |   44 |  154 |  513 |
|  813 |  302 |  278 |  258 |  226 |  209 |  217 |  507 |
|  813 |    0 |    0 |    0 |    0 |    0 |    0 |  521 |
|  813 |  144 |  292 |  290 |  286 |  285 |  304 |  476 |

Есть два датчика Heartbeat, один на Channel 0одном и один Channel 7. и я использую следующий датчик сердечного ритма, https://www.sparkfun.com/products/11574

Когда я держу датчик на пальце и аккуратно сжимаю его, показания начинают уменьшаться и уменьшаются до 700-690.

Затем я использую следующий код для отображения сердечных сокращений,

http://antoniolopes.info/blog/2013/03/06/pulse_sensing_raspberry_pi/

Вот код после правильного отступов,

#!/usr/bin/env python

# Written by Limor "Ladyada" Fried for Adafruit Industries, (c) 2015
# This code is released into the public domain

import time
import os
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
DEBUG = 1

# read SPI data from MCP3008 chip, 8 possible adc's (0 thru 7)
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
        if ((adcnum > 7) or (adcnum < 0)):
                return -1
        GPIO.output(cspin, True)

        GPIO.output(clockpin, False)  # start clock low
        GPIO.output(cspin, False)     # bring CS low

        commandout = adcnum
        commandout |= 0x18  # start bit + single-ended bit
        commandout <<= 3    # we only need to send 5 bits here
        for i in range(5):
                if (commandout & 0x80):
                        GPIO.output(mosipin, True)
                else:
                        GPIO.output(mosipin, False)
                commandout <<= 1
                GPIO.output(clockpin, True)
                GPIO.output(clockpin, False)

        adcout = 0
        # read in one empty bit, one null bit and 10 ADC bits
        for i in range(12):
                GPIO.output(clockpin, True)
                GPIO.output(clockpin, False)
                adcout <<= 1
                if (GPIO.input(misopin)):
                        adcout |= 0x1

        GPIO.output(cspin, True)

        adcout >>= 1       # first bit is 'null' so drop it
        return adcout

# change these as desired - they're the pins connected from the
# SPI port on the ADC to the Cobbler
SPICLK = 18
SPIMISO = 23
SPIMOSI = 24
SPICS = 25

# set up the SPI interface pins
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)

# 10k trim pot connected to adc #0
pulse_adc = 7

THRESH = 512
#pulse detection
pulse = False


while True:
    #read the analog pin
    analog_value = readadc(pulse_adc, SPICLK, SPIMOSI, SPIMISO, SPICS)
    #draw the equivalent number of points in an attempt to draw a vertical pulse sensing graph
    for i in range(analog_value / 100):
        print ".",
        print analog_value
        #detect beats
        if (analog_value > THRESH):
            if (pulse == False):
                pulse = True
                print "Beat"
            else:
                print ""
        else:
            pulse = False
            print ""
        time.sleep(0.5)

и запуск кода должен давать следующий вывод,

. . .
. .
. . .
. . . . . . Beat
. . . . . . . . .
. . . . . . . . .
. .
. . .
. . .
. . .
. . . .
. . . . . . . . . Beat

Но я только получаю это,

.
.
.
.
.
.

Здесь стоит упомянуть, что я также попробовал обвязать датчик пальцем, но он тоже не работал.

Может кто-нибудь, пожалуйста, скажите мне, как я могу преобразовать аналоговое чтение в значение сердечных сокращений в BPM, как они рассчитываются?

python,raspberry-pi,raspberry-pi3,

0

Ответов: 0

Преобразование аналоговых показаний в сердцебиение?

Я поддерживаю mcp3008ADC с помощью малины Pi. Я следил за учебником от Adafruit отсюда, https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/mcp3008

и успешно протестировали программу тестирования simeple, размещенную здесь,

https://github.com/adafruit/Adafruit_Python_MCP3008/tree/master/examples

Когда я запускаю simpletest.pyпрограмму, я получаю следующий вывод:

|    0 |    1 |    2 |    3 |    4 |    5 |    6 |    7 |
---------------------------------------------------------
|  813 |  307 |  276 |  277 |  254 |  228 |  231 |  609 |
|  813 |    0 |    0 |    0 |    0 |    0 |    0 |  503 |
|  813 |   50 |  185 |  289 |  292 |  289 |  306 |  514 |
|  813 |  274 |  183 |  153 |   47 |    0 |    0 |  511 |
|  813 |    0 |    0 |    9 |   28 |   44 |  154 |  513 |
|  813 |  302 |  278 |  258 |  226 |  209 |  217 |  507 |
|  813 |    0 |    0 |    0 |    0 |    0 |    0 |  521 |
|  813 |  144 |  292 |  290 |  286 |  285 |  304 |  476 |

Есть два датчика Heartbeat, один на Channel 0одном и один Channel 7. и я использую следующий датчик сердечного ритма, https://www.sparkfun.com/products/11574

Когда я держу датчик на пальце и аккуратно сжимаю его, показания начинают уменьшаться и уменьшаются до 700-690.

Затем я использую следующий код для отображения сердечных сокращений,

http://antoniolopes.info/blog/2013/03/06/pulse_sensing_raspberry_pi/

Вот код после правильного отступов,

#!/usr/bin/env python

# Written by Limor "Ladyada" Fried for Adafruit Industries, (c) 2015
# This code is released into the public domain

import time
import os
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
DEBUG = 1

# read SPI data from MCP3008 chip, 8 possible adc's (0 thru 7)
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
        if ((adcnum > 7) or (adcnum < 0)):
                return -1
        GPIO.output(cspin, True)

        GPIO.output(clockpin, False)  # start clock low
        GPIO.output(cspin, False)     # bring CS low

        commandout = adcnum
        commandout |= 0x18  # start bit + single-ended bit
        commandout <<= 3    # we only need to send 5 bits here
        for i in range(5):
                if (commandout & 0x80):
                        GPIO.output(mosipin, True)
                else:
                        GPIO.output(mosipin, False)
                commandout <<= 1
                GPIO.output(clockpin, True)
                GPIO.output(clockpin, False)

        adcout = 0
        # read in one empty bit, one null bit and 10 ADC bits
        for i in range(12):
                GPIO.output(clockpin, True)
                GPIO.output(clockpin, False)
                adcout <<= 1
                if (GPIO.input(misopin)):
                        adcout |= 0x1

        GPIO.output(cspin, True)

        adcout >>= 1       # first bit is 'null' so drop it
        return adcout

# change these as desired - they're the pins connected from the
# SPI port on the ADC to the Cobbler
SPICLK = 18
SPIMISO = 23
SPIMOSI = 24
SPICS = 25

# set up the SPI interface pins
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)

# 10k trim pot connected to adc #0
pulse_adc = 7

THRESH = 512
#pulse detection
pulse = False


while True:
    #read the analog pin
    analog_value = readadc(pulse_adc, SPICLK, SPIMOSI, SPIMISO, SPICS)
    #draw the equivalent number of points in an attempt to draw a vertical pulse sensing graph
    for i in range(analog_value / 100):
        print ".",
        print analog_value
        #detect beats
        if (analog_value > THRESH):
            if (pulse == False):
                pulse = True
                print "Beat"
            else:
                print ""
        else:
            pulse = False
            print ""
        time.sleep(0.5)

и запуск кода должен давать следующий вывод,

. . .
. .
. . .
. . . . . . Beat
. . . . . . . . .
. . . . . . . . .
. .
. . .
. . .
. . .
. . . .
. . . . . . . . . Beat

Но я только получаю это,

.
.
.
.
.
.

Здесь стоит упомянуть, что я также попробовал обвязать датчик пальцем, но он тоже не работал.

Может кто-нибудь, пожалуйста, скажите мне, как я могу преобразовать аналоговое чтение в значение сердечных сокращений в BPM, как они рассчитываются?

00питон, малина-пи, малина-PI3,
Похожие вопросы