Arduino设计篇—手势识别

描述

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

实验现象

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分