风筝
发表于: 2019-1-9 17:25:23 | 显示全部楼层

在本篇文章中,我们将向您展示如何通过PIR传感器和Arduino Nano开发板等简单组件制作一个手势检测器。在本文结束时,您可以学到:

●    PIR传感器的应用及其工作原理

●    运行8像素PIR传感器TPA81

●    使用PIR传感器检测Arduino的动作和手势

●    制作一个很酷的检测器来增加或减少扬声器音量

PIR Arduino.jpeg


所需的硬件

●    Arduino Nano R3开发板

●    Devantech 8像素热阵列传感器TPA81

●    ElectroPeak HC-SR505红外PIR运动传感器

●    0.96英寸SPI 128X64 OLED显示模块

comp.jpg


PIR被动红外传感器:它是如何工作的?

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


该术语中,被动是指PIR设备不产生或辐射能量用于检测目的情况。它们完全通过检测物体发射或反射的红外辐射来工作。他们没有检测或测量热量。

detect or measure heat.jpeg

TPA81是一种热电堆阵列,可检测2um-22um范围内的红外光。这是辐射热的波长。 Pyro-electric传感器通常用于防盗报警器并打开外部灯光,在同一波段检测红外线。这些热电传感器只能检测热量水平的变化 - 因此它们是运动探测器。虽然在机器人技术中很有用,但它们的应用受到限制,因为它们无法检测和测量静态热源的温度。另一种类型的传感器是热电堆阵列。这些用于非接触式红外线温度计。它们具有非常宽的检测角度或视场(FOV)约100°,并且需要遮盖或透镜或通常两者以获得大约12°的更有用的FOV。有些内置镜头。最近,传感器具有一系列热电堆、内置电子器件和硅透镜。这是TPA81中使用的类型。它有一排排成八排的热电堆。 TPA81可以同时测量8个相邻点的温度。 TPA81还可以控制伺服以平移模块并构建热图像。 TPA81可以检测2米(6英尺)范围内的蜡烛火焰,不受环境光的影响!

tpa81.jpg

PIR传感器类似于只能看到温暖物品的相机。因此TPA81是一款具有8像素分辨率的热像仪,当然,人体总会发热。现在,如果我们通过控制器控制PIR传感器并为PIR传感器定义一些手​​势,我们可以制作一个简单的手势检测器。


在本篇文章中,我们决定使用PIR和Arduino制作手势探测器系统。我们使用TPA81作为PIR,但它有点贵,所以如果你想省钱,你可以使用8个简单的PIR传感器而不需要白色插头。 TPA81支持I2C协议,与Arduino Nano兼容。这个很酷的项目可以帮助您找到图像处理和手势检测的基础知识。我们开始做吧!


电路连接

cir1.jpg

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

scacscs.jpg


代码

对于第一个电路(使用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端口。

●    按上传(箭头符号)按钮。

●    现在都准备好了!

  1. #include "Wire.h"
  2. #include "TPA81.h"
  3. // Create new TPA81 instance
  4. TPA81 tpa;
  5. void setup() {
  6. Serial.begin(9600);
  7. // You need to begin the Wire library to use TPA81 library
  8. Wire.begin();
  9. }
  10. void loop() {
  11. // Print temperature light
  12. Serial.print(tpa.getAmbient());
  13. Serial.print(" ");
  14. // Print all temperature point
  15. for (int i = 1; i <= 8; i++)
  16. {
  17.    Serial.print(tpa.getPoint(i));
  18.    Serial.print(" ");
  19. }
  20. Serial.println(" ");
  21. delay(100);
  22. }
复制代码

vid11.gif


运行此代码后,在Arduino IDE中打开串口监视器,查看TPA81检测到的8阵列温度。 每行中的第一个数字属于总温度。 现在将手放在传感器前面,看看身体的温度。 要手动定义手势,您应该知道手的温度并将其设置为偏移量。 我们把它设置为29度。 上传下一个代码,查看TPA81前面的手部动作。

  1. #include "Wire.h"
  2. #include "TPA81.h"
  3. // Create new TPA81 instance
  4. TPA81 tpa;
  5. void setup() {
  6. Serial.begin(9600);
  7. // You need to begin the Wire library to use TPA81 library
  8. Wire.begin();
  9. }
  10. void loop() {
  11. // Print temperature light
  12. Serial.print(tpa.getAmbient());
  13. Serial.print(" ");
  14. // Print all temperature point
  15. for (int i = 1; i <= 8; i++) { if (tpa.getPoint(i)>29)
  16.    Serial.print("#  ");
  17.    else
  18.    Serial.print(".  ");
  19. }
  20. Serial.println(" ");
  21. delay(100);
  22. }
复制代码

vid22.gif


我们写了一个算法来检测一个简单的手势,比如增加或减少声音播放器的音量。 您可以复制以下代码并进行尝试。 main.rar (2.29 KB, 下载次数: 29)

ezgif.com-video-to-gif-7.gif


使用上述方法,您可以扩展代码以检测其他手势,如点击、拖动、拖放、拉伸等。然后定义命令以在检测到这些动作和手势时执行某些任务。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-8 02:38 , Processed in 0.040531 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表