読者です 読者をやめる 読者になる 読者になる

Raspberry Pi 備忘録 / Mbedもあるよ!

Raspberry Pi であれこれやった事の記録

圧力センサー FSR406 を試す

FSR406 と ADコンバーター MCP3008

f:id:pongsuke:20170222171403j:plain

f:id:pongsuke:20170222172418j:plain

配線

FSR406 が、圧力によって変化するタイプのスイッチ的な性格なので、プルダウン抵抗的な配線にする、、、のだと思います。
皆様の例に習いました。

抵抗が CH0(1) と Vdd(16) を繋いでいます。

MCP3008 Vdd(16), Vref(15) > RPI 3.3v
MCP3008 AGND(14),DGND(9)   > RPI GND

MCP3008 CLK(13)     > RPI GPIO 11 (SCLK)
MCP3008 DOUT(12)    > RPI GPIO 9 (MISO)
MCP3008 DIN(11)     > RPI GPIO 10 (MOSI)
MCP3008 CS/SHDN(10) > RPI GPIP 8 (CE0)

MCP3008 CH0(1) > RPI GPIP 8 (CE0)

に配線します。

コーディング

#!/usr/bin/env python
# -*- coding: utf-8 -*-

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 convertPressure(data):
        pressure = 1023 - data
        return pressure

if __name__ == '__main__':
        try:
                while True:
                        data = readAdc(0)
                        volts = convertVolts(data)
                        pressure        = convertPressure(data)
                        print("adc: {:4}, volts : {:.2f}, pressure : {:.2f}".format(data, volts, pressure))

                        time.sleep(1)

        except KeyboardInterrupt:
                pass

spi.close()
sys.exit(0)

接触を感知できれば何でも良かったので、面積の大きい FSR406 を購入したのですが、重さへの演算は、出来ないタイプのセンサーだと思う。

どのような仕組みで抵抗が変わるのか調べていませんが、分銅の置き方で数値が変わります。