树莓派如何连接使用压力感应电阻?

在此树莓派压力垫教程中,我将逐步完成将力敏电阻器连接到 Pi 的步骤。

压力垫有许多用途,例如检测何时有人坐下或对物体的特定部位施加压力。这是在 IoT 项目等中使用的非常不错的传感器。

在本教程中,我们将逐步完成连接力敏电阻的步骤,以便您可以检测是否施加了足够的压力。我们还将介绍使用电容器或模数转换器 (ADC) 接收变量值的方法。

第一种设计是最简单的,只会告诉您是否有压力。

本教程的第二个设计就像在 LDR 教程中一样使用电容器。使用这种方法,我们可以测量压垫的电阻。如果没有压力,我们将几乎得不到任何价值。一旦施加压力,我们将获得从 100 ,000 + 到 5 ,000 的各种值。

我在本教程中使用的第三个设计使用 ADC 。通过使用 ADC ,我们将能够从压力垫获得可变值。如果您正在编程的软件可以在不同的压力点执行某些操作,则非常理想。

您可以在下面找到完整的教程来设置压力垫。

设备

以下是完成此树莓派压力垫教程所需的设备的完整列表。

推荐的

  • 树莓派

  • Micro SD 卡

  • Ethernet Cord 或 * Wifi dongle (树莓派 3 已内置 WiFi) )

  • 电源

  • 面包板

  • Breadboard Wire

  • 压力垫

  • 1m 电阻器

可选的

  • MCP3008 或类似版本

  • 1uf 电容器

  • 树莓派外壳

  • USB 键盘

  • USB 鼠标

  • GPIO Breakout Kit

电路

该压力垫的电路非常简单。首先,我将介绍组成电路的零件以及我们为什么要使用它们。

请记住,您不需要所有部分,因为它仅取决于您计划要做的事情。

压力垫传感器

压力垫是我们电路中最重要的部分,因为不使用压力垫将无法正常工作。我使用了 FlexiForce 压力垫传感器,但您可以使用更便宜的替代产品。

当您几乎没有施加压力时,FlexiForce 传感器的电阻将接近无限大。如果您施加很大的压力,它将降至 25k 欧姆以下。

它非常类似于依赖光的传感器,但是它使用直接压力来代替周围的光线。

电阻

除电容器电路外,所有其他电路均需要电阻。该电阻将用作分压器,并在压垫和电阻之间分压 3v3 。施加压力时,它将提供足够的电压以将我们的引脚拉高。

下面是可用于计算输入到 GPIO 引脚的电压的公式。例如,如果我们的压力垫为最大电阻,则它将为_(1,000,000 /(1,000,000 + 10,000,000))\ * 3.3 = ** 0.3 伏。** _此电压不足以将引脚拉高。

另一方面,如果我们施加大量压力,因此压垫电阻仅为 50 ,000,则我们的方程将是_(1,000,000 /(1,000,000 + 50,000))\ * 3.3 = ** 3.14 伏特 **** 。** _该电压足以将引脚发送到高电平。

要了解更多关于分压器的信息,建议您阅读有关它们的指南。

由于树莓派没有模拟引脚,因此只会变高或变低。我们可以通过使用电容器或模数转换器来解决此问题,请参见下文。

电容器

电容器将使我们无需使用模数转换器即可获得可变结果。结果不尽如人意,但仍然可以像您看到施加到压力垫的压力变化量一样令人难以置信。电容器将在充电时充当电池充电的状态,在充满或停止充电时会放电。通过与我们的压力垫串联使用,我们可以算出压力垫的电阻。电阻越高,施加的压力越小。

模数转换器

ADC 使我们可以将模拟传感器和设备连接到树莓派。它涉及更多的接线,但将使我们能够获得可变值,而不是简单地打开或关闭。

变量值使我们可以做更多的事情,例如检查施加了多少压力,并根据结果执行不同的功能。如果您需要关注特定区域的压力,那就太好了。

在本教程中,我不会对 ADC 进行过多介绍,因此,如果您想了解更多信息,请务必查看我的将树莓派与 ADC 结合使用的教程。

使用电阻的电路图

设置此电路的步骤非常简单,不需要您花费太多时间。该电路将为您提供压力垫的简单接通或断开结果。

将压力垫的一端连接到 ** 3v3 **。
* 在面包板上放置一个电阻,一端连接到 GND ,另一端连接到引脚 7 *

* 最后,将连接至 ** 引脚 7 ** 的电阻器端也连接至压力垫的另一端。

下图显示了外观。

使用电容器的电路图

我们可以使用电容器来测量压垫的电阻。如果您需要大致了解对传感器施加了多少压力,则此电路非常理想。

将压力垫的一端连接到 ** 3v3 **。
在面包板上放置一个
1uf 电容器负端 * 接至 GND ,另一个接至引脚 7 ** 和压力垫。

如果您需要更多信息,请参考下图。

使用模数转换器的电路

我们正在研究的最后一个电路是利用模数转换器。这将使您能够从压力垫获得半精度值。我们还利用电阻并将其用作分压器。

  • VDD (引脚 16) 连线至 3 .3V
  • VREF (引脚 15) 将其连接到 3 .3V
  • AGND (引脚 14) 接地
  • CLK (Pin 13) 将此线连接到 GPIO11 (Pin 23/SCLK)
  • DOUT (Pin 12) 将此线连接到 GPIO9 (Pin 21/MISO)
  • DIN (Pin 11) 将此线连接到 GPIO10 (Pin 19/MOSI)
  • CS (Pin 10) 将此线连接到 GPIO8 (Pin 24/CE0)
  • DGND (引脚 9) 将此线接地
  • 将压力垫连接到 3v3
  • 将一个电阻从 GROUND 连接到 CH0
  • 同样,将 CH0 接线到压力垫

如果您需要对以上步骤进行说明,请遵守下图。

编码压力垫

每个电路设置需要其自己的唯一代码。最简单的方法是使用电阻,而最复杂的方法是使用模数转换器。

为了更好地了解 Python ,我建议您阅读我们的 Python 语法指南和我们的 [Python 简介](https://pimylifeup。 com/getting-started-with-python/)。

使用电阻的代码

就像电路一样,电阻的代码也很容易,因为我们只在引脚变为高电平时才寻找。

在代码中,我们导入所需的程序包”RPi.GPIO”,以与 GPIO 引脚进行交互,并暂停脚本。

将 RPi .GPIO导入为 GPIO 
导入时间

现在,我们首先设置 GPIO ,使其以 ** BCM 模式 ** 运行,并设置 GPIO ** 引脚 4 ** 作为输入。

GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.IN)

接下来,我们进入无限循环并读取 GPIO 引脚。如果它很高,而以前的读数很低,那么我们将打印一条消息。然后,我们在重复之前稍微暂停一下脚本。

而 True :
    #阅读
    输入= GPIO.input(4)
    #如果最后一个读数很低而这个读数很高,请提醒我们
    if((非 prev _input)和 input ):
        打印("承受压力")
    #更新先前的输入
    prev_input =输入
    #轻微暂停
    time.sleep(0.10)

您可以在下面获得使用电阻的完整代码。

将 RPi .GPIO导入为 GPIO 
导入时间

GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.IN)

#将先前的输入变量初始化为 0 (假设未施加压力)
prev_input = 0
尝试:
    而 True :
        #阅读
        输入= GPIO.input(4)
        #如果最后一个读数很低而这个读数很高,请提醒我们
        if((非 prev _input)和 input ):
            打印("承受压力")
        #更新先前的输入
        prev_input =输入
        #轻微暂停
        time.sleep(0.10)
除了 KeyboardInterrupt :
    通过
最后:GPIO.cleanup()

使用电容器的代码

就像电阻器代码一样,它并不太复杂,它基于我们在上一教程中使用的 LDR 代码。

首先,我们必须插入我们需要的所有程序包以使其正常工作,时间和 GPIO 。

将 RPi .GPIO导入为 GPIO 
导入时间

我们其余的代码非常简单,我们有一个名为 ** rc \ _time 的函数,它带有一个参数。在此功能中,我们等到引脚变为高电平 **,然后返回计数,其中”count” 为” 达到高电平所需的时间”**。

一旦返回计数,我们就将引脚” 用作输出” 并将其” 设置为低电平”,然后” 等待 100ms “,然后再切换回” 输入”。然后它将计数直到引脚变高。

您可以使用计数值来确定有人向压力垫施加了多少压力。如果该值确实很高 **(例如 50k + **),则说明您几乎没有施加压力。 ** 小于 10k ** 表示垫板上有相当大的压力。

完整的代码在下面,或者您可以在我们的 GitHub 上找到它。

#!/usr/local/bin/python

将 RPi .GPIO导入为 GPIO 
导入时间

GPIO.setmode(GPIO.BCM)

#定义进入电路的引脚
pin_to_circuit = 4

def rc_time(pin_to_circuit):
    计数= 0

    #在引脚上输出
    GPIO.setup(pin_to_circuit,GPIO.OUT)
    GPIO.output(pin_to_circuit,GPIO.LOW)
    time.sleep(0.1)

    #将引脚改回输入
    GPIO.setup(pin_to_circuit,GPIO.IN)

    #计数直到引脚变高
    而(GPIO.input(pin_to_circuit)== GPIO.LOW):
        计数+ = 1

    退货计数

#在脚本中断时捕获,正确清理
尝试:
    #主循环
    而 True :
        打印(rc_time(pin_to_circuit))
除了 KeyboardInterrupt :
    通过
最后:
    GPIO.cleanup()

使用模数转换器 (ADC) 的代码

模数转换器代码非常简单,棘手的部分是从 MCP3008 芯片接收值。如果您想进一步了解此代码,请查看我们的模拟到数字转换器教程。

以下是使用 MCP3008 的完整代码,您也可以将其从我们的 GitHub 下载。

#!/usr/bin/python

导入 spidev 
导入时间

#定义变量
延迟= 0.5
pad_channel = 0

#创建 SPI 
spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 1000000

def readadc(adcnum):
    #从 MCP3008 读取 SPI 数据,总共 8 个通道
    如果 adcnum > 7或 adcnum <0:
        返回-1
    r = spi.xfer2([1,8 + adcnum << 4,0])
    数据=((r [1]&3)<< 8)+ r [2]
    返回数据

尝试:
    而 True :
        pad_value = readadc(pad_channel)
        打印("-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - -")
        打印("压力垫值:%d"%pad_value)
        时间。睡眠(延迟)
除了 KeyboardInterrupt :
    通过

如果您不想进行任何编码,也可以使用树莓派 Cayenne 之类的东西。

我希望到本教程结束时,您已将力感测电阻器连接到树莓派。

如果您对此树莓派压力垫教程有任何反馈,请随时在下面给我们留下评论。

分享到