风筝
发表于: 2022-11-14 07:47:29 | 显示全部楼层

弯曲传感器(Flex Sensor)是一种低成本且易于使用的传感器,专门设计用于测量偏转或弯曲的程度。


由于在90年代在Nintendo Power Glove中用作游戏界面,因此它变得流行。从那时起,人们一直将其用作角度计来确定关节运动、门传感器、碰撞开关用于墙壁检测或机器人抓地力上的压力传感器。


弯曲传感器概述

弯曲传感器实际上是一个可变电阻器,弯曲时电阻变化。由于电阻与弯曲量成正比,因此通常也称为柔性电位器(Flexible Potentiometer)。


弯曲传感器通常有两种尺寸:一个是2.2英寸(5.588厘米),另一个是4.5英寸(11.43厘米)长。

Types-of-Flex-Sensors.jpg


物理构造

弯曲传感器由带有导电墨水沉积的酚醛树脂底物组成。将分段的导体放在顶部,形成柔性电位器,在偏转时电阻会改变。

Flex-Sensor-Construction.jpg


使用的方向

弯曲传感器的设计仅在一个方向上弯曲 - 远离导电墨水(如图所示)。沿另一个方向可能会损坏弯曲传感器。

Directions-to-Use-Flex-Sensor.jpg

还要注意不要将传感器弯曲靠近底部,因为传感器的底部非常脆弱,弯曲时可能会破裂。


弯曲传感器如何工作?

传感器上打印的导电墨水充当电阻。当传感器是笔直的时,这种电阻约为25K。

Flex-Sensor-Working.jpg


当传感器弯曲时,将拉伸导电层,从而减少横截面(想象一下拉伸橡皮筋)。该减少的横截面导致电阻增加。在90°角,这种电阻约为100kΩ。


当传感器再次拉直时,电阻返回其原始值。通过测量电阻,您可以确定传感器弯曲的程度。


读取弯曲传感器的方法

读取弯曲传感器的最简单方法是将其与固定值电阻(通常为47kΩ)连接起来,制作一个分压器。为此,您将传感器的一端连接到电源,而另一端将其连接到下拉电阻。然后将固定值下拉电阻和弯曲传感器之间的点连接到Arduino的ADC输入引脚。


这样,您可以创建一个可变电压输出,可以通过Arduino的ADC输入来读取。

Flex-Voltage-Divider.jpg


请注意,您测量的输出电压是施加在下拉电阻的电压降,而不是弯曲传感器的电压。


分压器配置的输出由等式描述:

Flex1.jpg


在等式中,随着弯曲半径的增加,输出电压降低。例如,使用5V电源和47K下拉电阻,在传感器水平(0°)时,电阻值相对较低(约25kΩ)。这将导致以下输出电压:

Flex2.jpg

当弯曲到最大时(90°),电阻升至100kΩ。这将导致以下输出电压:

Flex3.jpg


弯曲传感器与Arduino Uno开发板的硬件连接

将弯曲传感器连接到Arduino非常容易。您需要将47kΩ下拉电阻串联连接到弯曲传感器,创建分压电路。然后,将下拉电阻和弯曲传感器之间的点连接到Arduino的ADC输入A0引脚。

Wiring-Flex-Sensor-To-Arduino.jpg


请注意,弹性传感器实际上是一个可变电阻。这意味着您可以将它们连接到任何一种方式,工作都可以正常。


Arduino代码

以下是一个简单的草图,该草图从Arduino的ADC引脚中读取传感器数据,并在串口显示器上打印输出。对于大多数项目,可以满足多数需求。

  1. // Change these constants according to your project's design
  2. const float VCC = 5;                        // voltage at Ardunio 5V line
  3. const float R_DIV = 47000.0;        // resistor used to create a voltage divider
  4. const float flatResistance = 25000.0;        // resistance when flat
  5. const float bendResistance = 100000.0;        // resistance at 90 deg

  6. void setup() {
  7.         Serial.begin(9600);
  8.         pinMode(flexPin, INPUT);
  9. }

  10. void loop() {
  11.         // Read the ADC, and calculate voltage and resistance from it
  12.         int ADCflex = analogRead(flexPin);
  13.         float Vflex = ADCflex * VCC / 1023.0;
  14.         float Rflex = R_DIV * (VCC / Vflex - 1.0);
  15.         Serial.println("Resistance: " + String(Rflex) + " ohms");

  16.         // Use the calculated resistance to estimate the sensor's bend angle:
  17.         float angle = map(Rflex, flatResistance, bendResistance, 0, 90.0);
  18.         Serial.println("Bend: " + String(angle) + " degrees");
  19.         Serial.println();

  20.         delay(500);
  21. }
复制代码

如果一切工作正常,则在折弯弯曲传感器时,您应该看到电阻的变化和估算的角度。

Flex-Sensor-Analog-Output.jpg


代码说明

首先在草图中定义弯曲传感器和下拉电阻连接的Arduino引脚编号。

  1. const int flexPin = A0;        
复制代码

接下来,定义了几个常数:VCC是系统电压,R_DIV是用于创建分压器的阻值,flatResistancebendResistance是弯曲传感器在水平和90°弯曲时的阻值。确保您准确设置这些常数。

  1. const float VCC = 5;
  2. const float R_DIV = 47000.0;
  3. const float flatResistance = 25000.0;
  4. const float bendResistance = 100000.0;
复制代码

在setup()函数中,我们将初始化串口通信,并将A0引脚设置为输入。

  1. void setup() {
  2.         Serial.begin(9600);
  3.         pinMode(flexPin, INPUT);
  4. }
复制代码

loop()函数中,我们首先进行ADC读数。

  1. int ADCflex = analogRead(flexPin);
复制代码

当Arduino将此模拟电压转换为数字量时,它实际上将其转换为范围为0到1022的10位数量。因此,为了计算实际输出电压,我们使用以下公式:

  1. float Vflex = ADCflex * VCC / 1023.0;
复制代码

接下来,我们使用分压公式计算弯曲传感器的电阻,并将其显示在串口显示器上。

  1. float Rflex = R_DIV * (VCC / Vflex - 1.0);
  2. Serial.println("Resistance: " + String(Rflex) + " ohms");
复制代码

最后,我们使用计算出的阻值来估算传感器的弯曲角度。为此,我们使用IDE的内置map()函数。


map()函数映射并将传感器的阻值转换为传感器的弯曲角度。因此,当我们调用map(Rflex, flatResistance, bendResistance, 0, 90.0)时,flatResistance值将映射到0°,bendResistance将映射到90°。

  1. float angle = map(Rflex, flatResistance, bendResistance, 0, 90.0);
  2. Serial.println("Bend: " + String(angle) + " degrees");
  3. Serial.println();
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-19 21:17 , Processed in 0.150454 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表