ふとした事で手に入れた脈拍センサー(SEN-11574)というセンサーの値をRaspberry-PIで取得してみようと思い、3日ぐらいもがいてみました。
ADコンバータの扱い
そもそも、このセンサーはアナログセンサーである事を知らずに、うかつに手にしてしまいました。
Arduinoはアナログ入力にも対応しているんですが、RaspberryPiはデジタル入力のみしか対応していないらしく、
アナログ-デジタルコンバータ(ADコンバータ)を回路に組み込んでデジタル変換した値を取得しないといけないという事をググって知りました。
そういえば、このセンサーをばらまいていた人達がコンバータチップも同時にばらまいていたが、そういった細かな手続きは無視して行なっていたイベントなので、秋葉で調達してきました。
秋月だと180円で売っていたのに、迂闊に別の店で320円も出してしまった・・・OTL
Raspberry-PIのSPI入力対応
今までのGPIO入力はgpio-valueやw1などのbus経由で取得していたが、今回はまた別のbusで取得しなければうまく採取できないようだ。
とりあえず、色々なやり方がありそうだが、なんとなく取得できたpythonパターンを使ってできた事をメモしておきます。
SPIの有効化
$ vi /etc/modules
## 下記を追記
spidev
$ vi /boot/config.txt
## 下記を追記
dtparam=spi=on
$ sudo reboot
センサー接続
参考
心拍センサーを使ってkintone Hospital
上記参考サイトの配線をそのまま構築します。
正確に構築出来た場合は、写真のように、センサーのランプが点灯します。
python準備
参考
Raspberry PiのPythonからTMP36のアナログ温度センサとMCP3008のADコンバータを使う
インストール
$ apt-get install python-dev
$ curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python
$ curl https://bootstrap.pypa.io/get-pip.py -o - | sudo python
確認
$ python -V
Python 2.7.9
$ pip -V
pip 8.1.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)
spi.py
#!/usr/bin/env python
import time
import sys
import spidev
spi = spidev.SpiDev()
spi.open(0,0)
def readAdc(channel):
adc = spi.xfer2([1,(8+channel)< <4,0])
data = ((adc[1]&3) << 8) + adc[2]
return data
def convertVolts(data):
volts = (data * 3.3) / float(1023)
volts = round(volts,4)
return volts
def convertTemp(volts):
temp = (100 * volts) - 50.0
temp = round(temp,4)
return temp
if __name__ == '__main__':
try:
while True:
data = readAdc(0)
print("adc : {:8} ".format(data))
volts = convertVolts(data)
temp = convertTemp(volts)
print("volts: {:8.2f}".format(volts))
print("temp : {:8.2f}".format(temp))
time.sleep(1)
except KeyboardInterrupt:
spi.close()
sys.exit(0)
実行
python spi.py
adc : 0
volts: 0.00
temp : -50.00
adc : 0
volts: 0.00
temp : -50.00
参考サイトは5秒毎の値更新だったが、1秒毎にしてみた。(sleepの箇所を変えるだけです)
センサーをいじってみると値が変わるのが確認できる。
とりあえず、今回は値が取得できるとこまでの確認で、次回ログ取得して値を参照してアクションできるようにしてみます。
0 件のコメント:
コメントを投稿