通过热释红外传感器和Arduino运动和手势识别

 

分享自爱板网论坛,六周年庆翻译征集活动...

在本文中,我们使用PIR(热释红外)传感器和Arduino来检测手的运动。该检测方法可用于操作电子设备。
本介绍使用到的电路及模块:

硬件名称
数量
Arduino Nano R3
1
8像素热阵列传感器 TPA81
1
红外运动传感器 HC-SR505
8
0.96inch SPI 128X64 OLED显示模块
1
面包板
1
杜邦线
1
软件:Arduino IDE
1
从本文中,我们将向您展示如何通过PIR传感器和Arduino Nano等简单元器件制作手势探测器。在本文结尾处,您可以学习到:

  • 热释红外传感器的应用及其工作原理
  • 使用 TPA81 传感器
  • 使用红外传感器检测动作和手势
  • 制作一个炫酷的检测器来增加或减少你的扬声器音量
▌热释红外传感器:它是如何工作的?

热释红外传感器(也叫被动红外传感器(PIR传感器))是一种电子传感器,用于测量从其视野中的物体辐射的红外(IR)光。它们最常用于    基于PIR的运动探测器。温度高于绝对零度的所有物体以辐射的形式发射热能。它以红外波长辐射,对于人眼是不可见的,但是可以通过该传感器来检测。

在这里,术语被动是指PIR设备不产生或辐射能量用于检测目的的事实。它们完全通过检测物体发射或反射的红外辐射来工作。他们没有检测或测量热量。(来源:维基百科)
TPA81是一种热电堆阵列,可检测2um-22um范围内的红外线。这是辐射热的波长。热释电传感器(Pyro-electric Sensor)通常用于防盗报警器并打开外部灯光,在同一波段检测红外线。这些热电传感器只能检测热量水平的变化, 因此它们是运动探测器。虽然在机器人技术中很有用,但它们的应用受到限制,因为它们无法检测和测量静态热源的温度。另一种类型的传感器是热电堆阵列。这些用于非接触式红外线温度计。它们具有非常宽的检测角度或视场(FOV),约100°,通过遮盖或透镜,或者遮盖和透镜两者结合用来获得大约12°的有效视场(FOV)。有些内置镜头。最近有带热电堆阵列的传感器,内置电子设备和硅透镜已经上市。比如TPA81就是这种类型传感器。TPA81有八个的热电堆。TPA81可以同时测量8个相邻点的温度。还可以结合伺服控制器用平移模块来构建热图像。TPA81可以检测2米(6英尺)范围内的蜡烛火焰,不受环境光的影响!
热释红外传感器可以当做只能看到发热物品的相机。TPA81就像一款具有8像素分辨率的热像仪,人体会持续向外释放热量。现在,如果我们通过控制器控制PIR传感器,并为PIR传感器定义一些手势,我们就可以制作一个简单的手势识别器。

在这个项目中,我们决定使用PIR传感器和Arduino制作手势识别器系统。我们使用TPA81作为传感器,但它有点贵,所以如果你想省钱,你可以使用8个没有透镜的红外传感器()。TPA81支持I2C协议,与Arduino Nano电平兼容。这个很酷的项目可以帮助您找出图像处理和手势识别的基础知识。我们开始做吧!

▌电路连接
如果您想使用8个PIR传感器而不是TPA81,您应该将8个单个PIR传感器连接到Arduino板并逐个读取。这样你可以节省一些钱!
▌编程

对于第一个电路(使用 TPA81),您可以把代码复制到 Arduino IDE 中。但首先必须要添加库,然后再上传(其实就是下载到开发板)代码。从文末的链接下载 TPA81 库。如果这是您第一次使用 Arduino ,不要担心。只需按照以下步骤即可:

  • 转到www.arduino.cc/en/Main/Software,下载你的操作系统对应的软件。按照指令安装。
  • 运行 Arduino IDE 并删除默认的代码,然后将下面的代码复制到 IDE 中。
  • 导航到菜单栏,依次点击“项目”-“加载库”-“添加 .ZIP 库”
  • 在“工具”菜单栏中选中 Arduino Nano 开发板
  • 将 Arduino 连接到 PC 并在“工具”中设置好 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


    关注 爱板网


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册