将弯曲传感器与 Arduino 连接

Flex 传感器与 Arduino 接口教程

弯曲传感器也称为弯曲传感器,是一种低成本、易于使用的传感器,用于测量偏转或弯曲量。

由于被纳入 Nintendo Power Glove,它在 20 世纪 90 年代广受欢迎。从那时起,人们就一直将其用作测量关节运动的测角仪、门传感器、检测墙壁的保险杠开关以及机器人抓手上的压力传感器。

柔性传感器概述

弯曲传感器基本上是一个可变电阻器,其电阻在弯曲时会发生变化。由于电阻与弯曲量成正比,因此通常被称为柔性电位器

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

柔性传感器的类型

建造

基于导电墨水的柔性传感器由涂有导电墨水的酚醛树脂基板制成。然后将分段导体放置在顶部以形成柔性电位计。

柔性传感器结构

使用说明

弯曲传感器仅设计为在远离墨水的一个方向上弯曲,如下图所示。如果向相反方向弯曲传感器,您将无法收到准确的数据,甚至可能会损坏传感器。

弯曲传感器使用说明

另外,避免将传感器弯曲得太靠近底座(引脚压接的地方),因为这可能会导致传感器扭结和故障。

弯曲传感器如何工作?

传感器上的导电墨水充当电阻器。当传感器笔直时,该电阻约为 25k。

柔性传感器工作

当传感器弯曲时,导电层被拉伸,导致横截面减小(想象一下拉伸橡皮筋)并增加电阻。在 90° 角时,该电阻约为 100K。

当传感器再次伸直时,电阻恢复到原来的值。通过测量电阻,您可以确定传感器弯曲的程度。

读取弯曲传感器

读取柔性传感器的最简单方法是将其与静态电阻结合起来形成分压器,该分压器产生可由微控制器的模数转换器读取的可变电压。

柔性分压器

需要注意的是,您测量的输出电压是下拉电阻两端的电压降,而不是柔性传感器两端的电压降。

我们可以使用这个方程来计算输出电压(Vo)。

弹性1

在此配置中,输出电压随着弯曲半径的增加而降低。

例如,使用 5V 电源和 47K 下拉电阻,当传感器平坦(0°)时,电阻相对较低(约 25k)。这会产生以下输出电压:

弹性2

当弯曲到最大程度(90°)时,电阻增加到大约 100K。结果,输出电压变为:

弹性3

将 弯曲传感器连接到 Arduino

将柔性传感器连接到 Arduino 非常简单。

您需要将 47kΩ 下拉电阻与柔性传感器串联以创建分压器电路。然后将 Arduino 的 A0 ADC 输入连接到下拉电阻和弯曲传感器的连接点。

将柔性传感器连接到arduino

请记住,柔性传感器实际上只是电阻器,这意味着您可以以任何方式连接它们,它们仍然可以工作。

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) 以及柔性传感器在平坦和弯曲配置中提供的电阻(分别为flatResistancebendResistance)。确保这些常量设置正确。

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();

光电传感器Arduino通信实现计数的方法是通过将光电传感器Arduino连接,并使用适当的库和代码来读取传感器的值。下面是详细的步骤: 1. 准备工作:首先,确保光电传感器Arduino板的连接正确。将光电传感器的输出引脚(通常是一个数字引脚)连接Arduino板上的一个数字引脚。还可以为传感器提供所需的电源和接地。 2. 导入库:打开Arduino IDE,并导入与您使用的光电传感器兼容的库。这些库将提供用于读取传感器值的函数和方法。根据传感器的型号和品牌,可以在网上或开发者社区中找到适合相应传感器的库。 3. 设置引脚和变量:在Arduino代码中,为光电传感器指定一个引脚,并声明一个用于存储计数的变量。例如: ```C++ int sensorPin = 2; int count = 0; ``` 4. 初始化:在Arduino的`setup()`函数中,将传感器引脚设置为输入模式。例如: ```C++ pinMode(sensorPin, INPUT); ``` 5. 读取传感器值:在Arduino的`loop()`函数中,使用适当的函数来读取传感器的值。例如,对于数字引脚上的光电传感器,可以使用`digitalRead()`函数。例如: ```C++ int sensorValue = digitalRead(sensorPin); ``` 6. 计数逻辑:根据所使用的光电传感器的特性,确定传感器是否输出高电平还是低电平来表示光线的检测。根据传感器值的变化情况,更新计数变量。例如,如果传感器从低电平变为高电平,则增加计数值。例如: ```C++ if (sensorValue == HIGH) { count++; } ``` 7. 输出结果:根据需求,您可以通过串口或其他输出方式将计数值发送到计算机或其他设备。例如,可以使用`Serial.print()`函数将计数值发送到串口监视器。 8. 循环延时:为了避免频繁读取传感器值,可以在循环中添加适当的延时。例如: ```C++ delay(100); ``` 通过按照上述步骤进行设置和编程,您将能够使用光电传感器Arduino通信实现计数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值