弯曲传感器(Flex Sensor)是一种低成本且易于使用的传感器,专门设计用于测量偏转或弯曲的程度。
由于在90年代在Nintendo Power Glove中用作游戏界面,因此它变得流行。从那时起,人们一直将其用作角度计来确定关节运动、门传感器、碰撞开关用于墙壁检测或机器人抓地力上的压力传感器。
弯曲传感器概述 弯曲传感器实际上是一个可变电阻器,弯曲时电阻变化。由于电阻与弯曲量成正比,因此通常也称为柔性电位器(Flexible Potentiometer)。
弯曲传感器通常有两种尺寸:一个是2.2英寸(5.588厘米),另一个是4.5英寸(11.43厘米)长。
物理构造 弯曲传感器由带有导电墨水沉积的酚醛树脂底物组成。将分段的导体放在顶部,形成柔性电位器,在偏转时电阻会改变。
使用的方向 弯曲传感器的设计仅在一个方向上弯曲 - 远离导电墨水(如图所示)。沿另一个方向可能会损坏弯曲传感器。
还要注意不要将传感器弯曲靠近底部,因为传感器的底部非常脆弱,弯曲时可能会破裂。
弯曲传感器如何工作? 传感器上打印的导电墨水充当电阻。当传感器是笔直的时,这种电阻约为25K。
当传感器弯曲时,将拉伸导电层,从而减少横截面(想象一下拉伸橡皮筋)。该减少的横截面导致电阻增加。在90°角,这种电阻约为100kΩ。
当传感器再次拉直时,电阻返回其原始值。通过测量电阻,您可以确定传感器弯曲的程度。
读取弯曲传感器的方法 读取弯曲传感器的最简单方法是将其与固定值电阻(通常为47kΩ)连接起来,制作一个分压器。为此,您将传感器的一端连接到电源,而另一端将其连接到下拉电阻。然后将固定值下拉电阻和弯曲传感器之间的点连接到Arduino的ADC输入引脚。
这样,您可以创建一个可变电压输出,可以通过Arduino的ADC输入来读取。
请注意,您测量的输出电压是施加在下拉电阻的电压降,而不是弯曲传感器的电压。
分压器配置的输出由等式描述:
在等式中,随着弯曲半径的增加,输出电压降低。例如,使用5V电源和47K下拉电阻,在传感器水平(0°)时,电阻值相对较低(约25kΩ)。这将导致以下输出电压:
当弯曲到最大时(90°),电阻升至100kΩ。这将导致以下输出电压:
弯曲传感器与Arduino Uno开发板的硬件连接 将弯曲传感器连接到Arduino非常容易。您需要将47kΩ下拉电阻串联连接到弯曲传感器,创建分压电路。然后,将下拉电阻和弯曲传感器之间的点连接到Arduino的ADC输入A0引脚。
请注意,弹性传感器实际上是一个可变电阻。这意味着您可以将它们连接到任何一种方式,工作都可以正常。
Arduino代码 以下是一个简单的草图,该草图从Arduino的ADC引脚中读取传感器数据,并在串口显示器上打印输出。对于大多数项目,可以满足多数需求。 - // Change these constants according to your project's design
- const float VCC = 5; // voltage at Ardunio 5V line
- const float R_DIV = 47000.0; // resistor used to create a voltage divider
- const float flatResistance = 25000.0; // resistance when flat
- const float bendResistance = 100000.0; // resistance at 90 deg
- void setup() {
- Serial.begin(9600);
- pinMode(flexPin, INPUT);
- }
- void loop() {
- // Read the ADC, and calculate voltage and resistance from it
- int ADCflex = analogRead(flexPin);
- float Vflex = ADCflex * VCC / 1023.0;
- float Rflex = R_DIV * (VCC / Vflex - 1.0);
- Serial.println("Resistance: " + String(Rflex) + " ohms");
- // Use the calculated resistance to estimate the sensor's bend angle:
- float angle = map(Rflex, flatResistance, bendResistance, 0, 90.0);
- Serial.println("Bend: " + String(angle) + " degrees");
- Serial.println();
- delay(500);
- }
复制代码如果一切工作正常,则在折弯弯曲传感器时,您应该看到电阻的变化和估算的角度。
代码说明 首先在草图中定义弯曲传感器和下拉电阻连接的Arduino引脚编号。 接下来,定义了几个常数:VCC是系统电压,R_DIV是用于创建分压器的阻值,flatResistance和bendResistance是弯曲传感器在水平和90°弯曲时的阻值。确保您准确设置这些常数。 - const float VCC = 5;
- const float R_DIV = 47000.0;
- const float flatResistance = 25000.0;
- const float bendResistance = 100000.0;
复制代码
在setup()函数中,我们将初始化串口通信,并将A0引脚设置为输入。 - void setup() {
- Serial.begin(9600);
- pinMode(flexPin, INPUT);
- }
复制代码
在loop()函数中,我们首先进行ADC读数。 - int ADCflex = analogRead(flexPin);
复制代码当Arduino将此模拟电压转换为数字量时,它实际上将其转换为范围为0到1022的10位数量。因此,为了计算实际输出电压,我们使用以下公式: - float Vflex = ADCflex * VCC / 1023.0;
复制代码接下来,我们使用分压公式计算弯曲传感器的电阻,并将其显示在串口显示器上。 - float Rflex = R_DIV * (VCC / Vflex - 1.0);
- Serial.println("Resistance: " + String(Rflex) + " ohms");
复制代码最后,我们使用计算出的阻值来估算传感器的弯曲角度。为此,我们使用IDE的内置map()函数。
map()函数映射并将传感器的阻值转换为传感器的弯曲角度。因此,当我们调用map(Rflex, flatResistance, bendResistance, 0, 90.0)时,flatResistance值将映射到0°,bendResistance将映射到90°。 - float angle = map(Rflex, flatResistance, bendResistance, 0, 90.0);
- Serial.println("Bend: " + String(angle) + " degrees");
- Serial.println();
复制代码
|