In [ ]:
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
# 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 Raspberry Pi</h1>
SPICLK = 18
SPIMISO = 23
SPIMOSI = 24
SPICS = 25
GPIO.setwarnings(False)
#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)
#pulse sensor connected to adc #0
pulse_adc = 0
#Threshold for pulse sensing (half of values between 0-1023)
THRESH = 512
In [ ]:
#Pulse graph
pulse = False
THRESH = 512
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
output = int(analog_value / 100) * "."
#detect beats
if (analog_value > THRESH):
if (pulse == False):
pulse = True
output += " Beat {}".format(analog_value)
else:
pulse = False
print(output)
#hang out and do nothing for a tenth of a second
time.sleep(0.1)
In [ ]:
#BPM
previous_seconds = time.time()
while True:
#read the analog pin
analog_value = readadc(pulse_adc, SPICLK, SPIMOSI, SPIMISO, SPICS)
if (analog_value > THRESH):
if (pulse == False):
pulse = True
new_seconds = time.time()
duration = new_seconds - previous_seconds
print(analog_value)
print(60 / duration)
previous_seconds = new_seconds
else:
pulse = False
time.sleep(0.01)