|
在本篇文章中,我们将向您展示如何通过PIR传感器和Arduino Nano开发板等简单组件制作一个手势检测器。在本文结束时,您可以学到: ● PIR传感器的应用及其工作原理 ● 运行8像素PIR传感器TPA81 ● 使用PIR传感器检测Arduino的动作和手势 ● 制作一个很酷的检测器来增加或减少扬声器音量
所需的硬件 ● Arduino Nano R3开发板 ● Devantech 8像素热阵列传感器TPA81 ● ElectroPeak HC-SR505红外PIR运动传感器 ● 0.96英寸SPI 128X64 OLED显示模块
PIR被动红外传感器:它是如何工作的? 被动红外传感器(PIR传感器)是一种电子传感器,用于测量从其视野中的物体辐射的红外(IR)光。它们最常用于基于PIR的运动检测器。温度高于绝对零度的所有物体以辐射的形式发出热能。通常,这种辐射对于人眼是不可见的,因为它以红外波长辐射,但是它可以通过为此目的而设计的电子设备来检测。
该术语中,被动是指PIR设备不产生或辐射能量用于检测目的情况。它们完全通过检测物体发射或反射的红外辐射来工作。他们没有检测或测量热量。
TPA81是一种热电堆阵列,可检测2um-22um范围内的红外光。这是辐射热的波长。 Pyro-electric传感器通常用于防盗报警器并打开外部灯光,在同一波段检测红外线。这些热电传感器只能检测热量水平的变化 - 因此它们是运动探测器。虽然在机器人技术中很有用,但它们的应用受到限制,因为它们无法检测和测量静态热源的温度。另一种类型的传感器是热电堆阵列。这些用于非接触式红外线温度计。它们具有非常宽的检测角度或视场(FOV)约100°,并且需要遮盖或透镜或通常两者以获得大约12°的更有用的FOV。有些内置镜头。最近,传感器具有一系列热电堆、内置电子器件和硅透镜。这是TPA81中使用的类型。它有一排排成八排的热电堆。 TPA81可以同时测量8个相邻点的温度。 TPA81还可以控制伺服以平移模块并构建热图像。 TPA81可以检测2米(6英尺)范围内的蜡烛火焰,不受环境光的影响!
PIR传感器类似于只能看到温暖物品的相机。因此TPA81是一款具有8像素分辨率的热像仪,当然,人体总会发热。现在,如果我们通过控制器控制PIR传感器并为PIR传感器定义一些手势,我们可以制作一个简单的手势检测器。
在本篇文章中,我们决定使用PIR和Arduino制作手势探测器系统。我们使用TPA81作为PIR,但它有点贵,所以如果你想省钱,你可以使用8个简单的PIR传感器而不需要白色插头。 TPA81支持I2C协议,与Arduino Nano兼容。这个很酷的项目可以帮助您找到图像处理和手势检测的基础知识。我们开始做吧!
电路连接
如果您想使用8个PIR传感器而不是TPA81,您应该将8个单个PIR传感器连接到Arduino板并一个接一个地读取它们。这样你可以节省一些钱!
代码 对于第一个电路(使用TPA81),您应该复制Arduino IDE中的代码。但首先您必须添加库然后上传代码。从以下链接下载TPA81库。您需要添加库文件,然后上载代码。如果这是您是第一次运行Arduino开发板,请不要担心。只需按以下步骤操作: ● 访问www.arduino.cc/en/Main/Software并下载操作系统的软件。按照说明安装IDE软件。 ● 运行Arduino IDE并清除文本编辑器,然后在文本编辑器中复制以下代码。 ● 导航到草图并包含库。现在单击添加ZIP库并添加库 ● 在tools and boards菜单中选择您使用的Arduino电路板。 ● 将Arduino连接到PC,然后在tools and port中设置COM端口。 ● 按上传(箭头符号)按钮。 ● 现在都准备好了! - #include "Wire.h"
- #include "TPA81.h"
- // Create new TPA81 instance
- TPA81 tpa;
- void setup() {
- Serial.begin(9600);
- // You need to begin the Wire library to use TPA81 library
- Wire.begin();
- }
- void loop() {
- // Print temperature light
- Serial.print(tpa.getAmbient());
- Serial.print(" ");
- // Print all temperature point
- for (int i = 1; i <= 8; i++)
- {
- Serial.print(tpa.getPoint(i));
- Serial.print(" ");
- }
- Serial.println(" ");
- delay(100);
- }
复制代码
运行此代码后,在Arduino IDE中打开串口监视器,查看TPA81检测到的8阵列温度。 每行中的第一个数字属于总温度。 现在将手放在传感器前面,看看身体的温度。 要手动定义手势,您应该知道手的温度并将其设置为偏移量。 我们把它设置为29度。 上传下一个代码,查看TPA81前面的手部动作。 - #include "Wire.h"
- #include "TPA81.h"
- // Create new TPA81 instance
- TPA81 tpa;
- void setup() {
- Serial.begin(9600);
- // You need to begin the Wire library to use TPA81 library
- Wire.begin();
- }
- void loop() {
- // Print temperature light
- Serial.print(tpa.getAmbient());
- Serial.print(" ");
- // Print all temperature point
- for (int i = 1; i <= 8; i++) { if (tpa.getPoint(i)>29)
- Serial.print("# ");
- else
- Serial.print(". ");
- }
- Serial.println(" ");
- delay(100);
- }
复制代码
我们写了一个算法来检测一个简单的手势,比如增加或减少声音播放器的音量。 您可以复制以下代码并进行尝试。
main.rar
(2.29 KB, 下载次数: 29)
使用上述方法,您可以扩展代码以检测其他手势,如点击、拖动、拖放、拉伸等。然后定义命令以在检测到这些动作和手势时执行某些任务。 |