在此树莓派压力垫教程中,我将逐步完成将力敏电阻器连接到 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 之类的东西。
我希望到本教程结束时,您已将力感测电阻器连接到树莓派。
如果您对此树莓派压力垫教程有任何反馈,请随时在下面给我们留下评论。