快捷搜索: 王者荣耀 脱发

Arduino提高篇25—手势识别

随着科技的发展,人机交互也发生了翻天覆地的变化,从最开始的手动控制,到后来的遥控,再到语音识别以及图像识别。一切都是为了解放人类,毕竟能吵吵就不会动手对不对,现在都懒得吵吵了,图像识别分析就好。本篇我们来介绍高大尚的手势识别,用手比划就能进行控制了。

1. APDS-9960模块介绍

APDS-9960是一个体积非常小的传感器,它集成了非接触手势检测、接近检测、数字环境亮度测量和色彩检测等诸多功能。很多手机上也采用了该传感器,例如三星的Galaxy S5。

本篇我们使用搭载了APDS-9960传感器的模块,模块提供了APDS-9960传感器的外部工作电路,同时将管脚引出,方便接线使用,其实物图如下:

模块特点:

    工作电压:3.3V 环境光及RGB色彩感应 接近检测 手势检测 测量范围:10-20cm 通信接口:IIC通讯 IIC地址:0x39

管脚定义:

    VL:如果PS跳线断开,则IR LED的可选电源。必须为3.0-4.5V GND:接地 VCC:用于为APDS-9960传感器供电。必须为2.4-3.6V SDA:IIC数据引脚 SCL:IIC时钟引脚 INT:外部中断引脚。中断事件时为低电平有效

2. 安装驱动库

本篇我们需要安装「Adafruit_APDS9960」驱动库。在Arduino IDE中,点击「项目」—「加载库」—「管理库」,搜索选择最新版本进行安装即可。

3. 实验材料

    Uno R3开发板 配套USB数据线 面包板及配套连接线 OLED显示屏 APDS-9960模块

4. 实验步骤

1. 根据原理图搭建电路图。

OLED屏和手势识别模块都使用了IIC通讯方式。将两个模块的VCC、GND分别连接开发板的3.3V、GND,两个模块的SDA、SCL分别连接开发板的A4、A5。

实验原理图如下图所示:

实物连接图如下图所示:

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

#include "Adafruit_APDS9960.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_APDS9960 apds;
Adafruit_SSD1306 oled(128, 64, &Wire, -1);

void setup() {
          
   
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  oled.setTextColor(WHITE);//开像素点发光
  oled.clearDisplay();//清屏
  oled.setTextSize(2); //设置字体大小

  apds.begin();
  apds.enableProximity(true);
  apds.enableGesture(true);
}

void loop() {
          
   

  uint8_t gesture = apds.readGesture();
  oled.clearDisplay();//清屏
  oled.setCursor(15, 2);//设置显示位置
  oled.println("APDS-9960");
  oled.setCursor(32, 40);//设置显示位置

  switch (gesture)
  {
          
   
    case APDS9960_UP: oled.println("[ Up ]"); break;
    case APDS9960_DOWN: oled.println("[Down]"); break;
    case APDS9960_LEFT: oled.println("[Left]"); break;
    case APDS9960_RIGHT: oled.println("[Right]"); break;
    default: oled.println("[----]"); break;
  }
  oled.display(); // 开显示
}

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

5. 实验现象

我们从不同方向移动手进入传感器检测范围,然后慢慢移出,模块会对应识别出移动方向。当然识别结果也会受环境光影响,但大概率识别还是很准确的。


经验分享 程序员 微信小程序 职场和发展