成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 to send you MicroZine.

arduino. 电容传感器

arduino. 电容传感器:在这里,您可以了解如何使用a 单针 没有外部硬件 创建通过木材,塑料或玻璃操作的按钮。

对于某些设计,您需要隐藏的按钮,这是 实际方法 - 电容式触摸感应。实际上 技术通过测量充电时间来真正测量电容 外部电容。


标准Arduino电容传感器方法

用于检测电容式触摸输入的通常方法是使用两个 带有高值电阻的引脚。在这个设置中 通过操纵两个引脚来测量传感器销处的电容。这 电容传感器 库用于此(双引脚)方法。

  • 一个引脚是控制器。
  • 一个引脚是传感器。

当控制器引脚设置为高电平的电容时 通过电阻充电。当传感器处的输入电压时 达到输入的高阈值电压(VIH),表示有效 输入(逻辑电平高)。

传感器的总电容和电容器电阻到输入的电容决定了上升时间 (充电率),当您添加更多电容时 将手指放在传感器附近,电容增加(减慢 充电率)。这是因为并行地加在一起的电容。

测量上升时间允许您检测手指的存在!

笔记: 当您使用电容传感器库时,可以使用相同的控制引脚进行多个电容传感器。

Compuitivensor库文档谈论更改阻力的值,如下所示:

  • 1 Mohm绝对触摸
  • 10 MoHM 4-6英寸检测
  • 40 MoHM 12-24英寸检测

您可以根据您的设计选择这些参数。使用 下面的单引脚ADC方法可以通过更改调整灵敏度 测量ADC阈值。

提示: 您甚至可以仅使用一段长度作为探测器!

ADC Arduino电容传感器

该ADC Arduino电容传感器方法的优点是它只需要一个 单个模拟密码 每个输入。

因此,这种方法最适合针限制设计 作为ATTINY85(8个引脚 - 6个可用),而电容器库 如果您有许多输入,是有用的,因为你有更好的控制 选择外部组件时的传感能力。

该方法有三种元素:

  1. 具有已知值(14pF)的样品和保持电容器。
  2. 可控的上拉。
  3. 将ADC样品和保持电容接地的能力。

ADC电容传感器如何工作

arduino. ADC和PIN块图

如果将上述元素绘制为单个图表,则会获取:


 ADC触摸框图操作电容式触摸使用ADC

将小铜板连接到模拟输入引脚(带串联 ESD保护的电阻 - 显示不显示)。当对象(或手指)是 将板靠近其电容增加。

该想法是将外部电容与内部进行比较 样品并保持电容 - 如果它们相似,则ADC将读取 2.5V,随着C增加而变低。

充电外部和地面盖

为此,外部电容充电至5V,而内部电容放电到地面:

使用ADC初始化电容触摸

将充电和连接到ADC

现在断开上拉并连接电容器,然后根据相对电容值电荷分配。

内部盖式连接操作电容触摸使用ADC

现在使ADC读数检测电容变化。

arduino. 图书馆

电容式触摸传感器的库:Adctouch

从: //github.com/martin2250/ADCTouch 并解压缩到库文件夹(通常是C:/用户//文件/ arduino /图书馆)。

或使用库管理器,搜索AdCtouch。

图书馆安装详细信息是 这里 .

Adctouch Souce Code.

电容式触摸传感器的该源代码来自表示核心操作码的AdCtouch库。

更新后来的代码已更新以适应学历,如此 寄存器值不同,所以您应该使用最新版本但是 下面的代码是arduino uno,更容易读取(来自github 2016).

/*
  ADCTouch.cpp - Library for Capacittive touch sensors using only one ADC PIN
  Created by martin2250, April 23, 2014.
  Released into the public domain.
*/
#include "Arduino.h"
#include "ADCTouch.h"

 在 t ADCTouchClass::read(byte ADCChannel,  在 t 样本)
{
	long _value = 0;
	for( 在 t _counter = 0; _counter < 样本; _counter ++)
	{
		pinMode(ADCChannel, INPUT_PULLUP);

		ADMUX |=   0b11111;
		ADCSRA |= (1<<ADSC); //start conversion
		while(!(ADCSRA & (1<<ADIF))); //wait for conversion to finish
		ADCSRA |= (1<<ADIF); //reset the flag

		pinMode(ADCChannel, INPUT);
		_value += analogRead(ADCChannel);
	}
	return _value / 样本;
}

最新代码有一些评论,但基本操作是这样的:

  1. 将输入上拉向上设置为充电外部电容。
  2. 将mux设置为选择作为输入以排出s&H capacitor.
  3. 执行转换(不确定这是严格必要的)。
  4. 释放上拉 - 设置无效。
  5. 执行ADC阅读
  6. 重复1'samples'时间,然后将结果除以数量'samples'采取了平均值。

示例测试代码

使用硬件:Arduino Uno。

arduino. 电容传感器的以下代码是一个例子 显示连接到两个电容式触摸传感器输入的读取 模拟输入引脚A0和A1。请注意,使用标准感测 方法您需要三个引脚进行两种电阻和两个电阻 可能有两个电容器。

你需要的只是电线和铜板(我使用了压电盘 仅使用连接到铜板的电线)。你所做的就是 在Arduino Uno上的A0和A1引脚中的这些连接。

当线连接到A1时,铜盘连接到A0。您可以看到草图下面的输出结果。

#include <ADCTouch.h>

 在 t ref0, ref1;     //reference values to remove offset

void setup()
{
    // No pins to setup, pins can still be used regularly, although it will affect readings

    Serial.begin(9600);

    ref0 = ADCTouch.read(A0, 500);    //create reference values to
    ref1 = ADCTouch.read(A1, 500);    //account for the capacitance of the pad
}

void loop()
{
     在 t value0 = ADCTouch.read(A0);   //no second parameter
     在 t value1 = ADCTouch.read(A1);   //   --> 100 samples

    value0 -= ref0;       //remove offset
    value1 -= ref1;

    Serial.print(value0 > 40);    //send (boolean) pressed or not pressed
    Serial.print("\t");           //use if(value > threshold) to get the state of a button

    Serial.print(value1 > 40);
    Serial.print("\t\t");

    Serial.print(value0);             //send actual readingc
    Serial.print("\t");

    Serial.println(value1);
    delay(100);
}

ADCTouchClass ADCTouch;

示例代码结果


0	0		1	2
0	0		1	1
0	0		0	2
0	0		1	0
0	0		1	0
0	0		1	1
0	0		1	3
0	0		0	1
0	0		1	0
0	0		1	1
0	0		0	2
0	0		2	1
0	0		5	1
1	0		293	8
1	0		338	8
1	0		382	2
1	0		355	3
0	0		1	0
0	0		1	0
0	0		1	2
0	0		0	2
0	0		1	4
0	0		1	6
0	0		0	10
0	0		1	15
0	1		2	70
0	1		1	78
0	1		2	77
0	1		2	79
0	1		2	84
0	1		2	70
0	0		1	5
0	0		1	2
0	0		1	0

左边的结果 如果感测到手指,则显示1。在右侧是原始ADC值。 由于铜盘附着到A0,因此电容值是 在结果中显示出更高。

 

新的! Comments

让你说到你刚刚阅读的东西!留下下面的框中的评论。




隐私政策 | 接触 | 关于我

网站地图 | 使用条款


 ezoic. 报告此广告

访问我们的Facebook页面:

    点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino. 模拟输出...易模拟输出生成

    arduino. 模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号 和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你这么好
对于所有信息
你已经提供了
你的网站 's

高超 极好的 ."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航! "


-
Matt_tr. <at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你的网页。

非常有用,揭开,
诚实明确。

非常感谢
你的时间和作品。
问候。 "


- Anon.

回到顶部