初投稿です. 今日からスマブラspが始まるのでこれが最後の投稿になります.
ラズパイで心拍センサの情報を読み取ります.
###準備するもの
###配線
このサイトをそのまま使用.
肝心の心拍センサが映ってなくてすいません...
###SPI
このサイトの通りpy-spidevをインストールする(ラズパイ上でSPI driverを有効にしておく必要あり).
$ git clone git://github.com/doceme/py-spidev
$ cd py-spidev
$ sudo python setup.py install
###サンプルプログラム
以下のPythonファイルを作成.
pulse.py
#!/usr/bin/python
#coding: utf-8
import spidev
import time
import sys
Vref = 3.3
Criteria = 530
#spiパスへのアクセスを開く
spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 1350000
adc_channel = 0
delay = 0.01
f = open('pulse.dat', 'w')
pulse = 0
digital = 0.0
index = 0
#ADコンバータからSPIデータの読み込み
def ReadChannel(channel):
adc = spi.xfer2([1, (8+channel)<<4, 0])
data = ((adc[1]&3)<<8) + adc[2]
return data
try:
while True:
#心拍センサの値読み取り
analog_level = ReadChannel(adc_channel)
#値がいったん基準を超え、次に基準を下回った瞬間に"pulse"を出力
if(analog_level == 0):
time.sleep(delay)
continue
if((analog_level < Criteria) and (pulse == 1)):
print("Pulse")
if (analog_level < Criteria):
pulse = 0
else:
pulse = 1
#値を電圧[V]に変換
digital = analog_level * Vref / float(1023)
data = "{} {} {} \n".format(index, analog_level, digital)
f.write(data)
time.sleep(delay)
index += 1
except KeyboardInterrupt:
print("Exit")
f.close()
コマンドプロンプトで実行. 拍動に合わせて"Pulse"と出力されれば成功です.
datファイルに書き込んでいますが今回は使用していません.
$ python pulse.py
###補足
先ほどのpulse.pyで書いた以下の文
spi.max_speed_hz = 1350000
最初はこれを書かずに実行するとMCP3008から値が読み取れませんでした. こちらのサイトを読み上の文を付け加えると上手く値を読み取ることができましたが, 読み取れなかった原因は不明です.
data = ((adc[1]&3)<<8) + adc[2]
この謎の文の意味についてはこちらのサイトに詳しく書かれています. ADコンバータを用いる際に頻繁に出てくるコードなので勉強になりました.