弯曲传感器也称为弯曲传感器,是一种低成本、易于使用的传感器,用于测量偏转或弯曲量。
由于被纳入 Nintendo Power Glove,它在 20 世纪 90 年代广受欢迎。从那时起,人们就一直将其用作测量关节运动的测角仪、门传感器、检测墙壁的保险杠开关以及机器人抓手上的压力传感器。
柔性传感器概述
弯曲传感器基本上是一个可变电阻器,其电阻在弯曲时会发生变化。由于电阻与弯曲量成正比,因此通常被称为柔性电位器。
弯曲 传感器通常有两种尺寸:2.2 英寸(5.588 厘米)长和 4.5 英寸(11.43 厘米)长。
建造
基于导电墨水的柔性传感器由涂有导电墨水的酚醛树脂基板制成。然后将分段导体放置在顶部以形成柔性电位计。
使用说明
弯曲传感器仅设计为在远离墨水的一个方向上弯曲,如下图所示。如果向相反方向弯曲传感器,您将无法收到准确的数据,甚至可能会损坏传感器。
另外,避免将传感器弯曲得太靠近底座(引脚压接的地方),因为这可能会导致传感器扭结和故障。
弯曲传感器如何工作?
传感器上的导电墨水充当电阻器。当传感器笔直时,该电阻约为 25k。
当传感器弯曲时,导电层被拉伸,导致横截面减小(想象一下拉伸橡皮筋)并增加电阻。在 90° 角时,该电阻约为 100K。
当传感器再次伸直时,电阻恢复到原来的值。通过测量电阻,您可以确定传感器弯曲的程度。
读取弯曲传感器
读取柔性传感器的最简单方法是将其与静态电阻结合起来形成分压器,该分压器产生可由微控制器的模数转换器读取的可变电压。
需要注意的是,您测量的输出电压是下拉电阻两端的电压降,而不是柔性传感器两端的电压降。
我们可以使用这个方程来计算输出电压(Vo)。
在此配置中,输出电压随着弯曲半径的增加而降低。
例如,使用 5V 电源和 47K 下拉电阻,当传感器平坦(0°)时,电阻相对较低(约 25k)。这会产生以下输出电压:
当弯曲到最大程度(90°)时,电阻增加到大约 100K。结果,输出电压变为:
将 弯曲传感器连接到 Arduino
将柔性传感器连接到 Arduino 非常简单。
您需要将 47kΩ 下拉电阻与柔性传感器串联以创建分压器电路。然后将 Arduino 的 A0 ADC 输入连接到下拉电阻和弯曲传感器的连接点。
请记住,柔性传感器实际上只是电阻器,这意味着您可以以任何方式连接它们,它们仍然可以工作。
Arduino 示例代码
这是一个简单的草图,它从 Arduino 的 ADC 引脚读取传感器数据并将其显示在串行监视器上。对于大多数项目来说,这几乎就是所需要的。
const int flexPin = A0; // Pin connected to voltage divider output
// 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 引脚。
const int flexPin = A0;
然后,定义一些常数,包括系统电压 ( VCC
)、用于制作分压器的电阻器 ( R_DIV
) 以及柔性传感器在平坦和弯曲配置中提供的电阻(分别为flatResistance
和bendResistance
)。确保这些常量设置正确。
const float VCC = 5;
const float R_DIV = 47000.0;
const float flatResistance = 25000.0;
const float bendResistance = 100000.0;
在设置中,我们建立串行通信并将其配置flexPin
为输入。
void setup() {
Serial.begin(9600);
pinMode(flexPin, INPUT);
}
在循环中,我们首先读取 ADC。
int ADCflex = analogRead(flexPin);
当Arduino将传感器的模拟输出电压转换为数字值时,会将其转换为0到1023之间的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();