1、PPT自动切换模块简介
本模块利用北醒公司两台TFmini Plus、Arduino DUE板、一个低功率红外激光指向灯、两个LED指示灯、一个单向开关、一个双向开关和连接线结合设计。
系统作用:通过检测人的手势,操作PPT的上一页、下一页切换。
2、试验设备及接线
2.1 实验设备
-
Benewake TFmini Plus 标品
TFmini Plus(如图2.1所示),详细参数见TFmini Plus使用说明;
本模块用来检测人的手势,当手或者手臂扫过时,测距状态发生改变。 -
Arduino DUE板
本模块使用DUE板检测雷达1和雷达2的测距状态,并利用自带的USB通信实现HID功能。
Arduino DUE板(如图2.2所示),详细介绍和学习,请参考以下两个网站:
中文社区
英文官网 -
激光指示灯
如图2.3所示,为红外激光指示灯,用来指示雷达的工作方向和大致区域。
具体说明参考:https://m.tb.cn/h.eml6WNY?sm=032032 -
LED灯
如图2.4所示,为LED灯,用来指示模块功能状态:绿灯为功能开启,红灯为功能关闭。 -
单向开关
如图2.5所示,为单向开关,用来控制红外激光指示灯的打开和关闭。 -
双向开关
如图2.6所示,为双向开关,用来控制PPT切换模块功能的打开和关闭。 -
电脑
如图2.3所示,作为该系统的上位机,用来编写程序并上传到DUE板,并为模块供电。 -
连接线
如图2.7所示,为杜邦线和USB数据线。
杜邦线——用于TFmini Plus与UNO板连接;
USB数据线——用于DUE板与电脑连接、供电。
2.2 接线
如图2.9所示,为PPT切换模块的接线图,接线需要注意一下几个方面:
- TFmini Plus供电电压为5V,直接连接Arduino DUE板的5V和GND,其他雷达需查阅产品规格书,确保供电正常;
- 雷达1(RX,TX)连接DUE板的(TX3,RX3); 雷达2(RX,TX)连接DUE板的(TX1,RX1);
- 功能指示灯连接23,25引脚,通过检测开关状态,对应功能指示灯的关闭和打开。当功能打开时,绿灯亮起;功能关闭时,红灯亮起;
3、PPT切换原理及注意事项
3.1 注意事项
- TFmini Plus的采样率最大为1000,手臂挥动速度不应太大;
- 手臂滑动速度不应过小,即触发时间符合正常操作;
- 可以实现人一般速度走过,不触发PPT切换。
3.2 流程图
4、系统程序编写
#include <Keyboard.h>
/****************************************************************
定义引脚功能,控制引脚为27,29,显示引脚为23,25
*****************************************************************/
#define ON 23
#define OFF 25
#define LED_ON 27
#define LED_OFF 29
char left = KEY_LEFT_ARROW;
char right = KEY_RIGHT_ARROW;
const int HEADER=0x59;//数据包帧头
/****************************************************************
定义模块功能初始状态参数
*****************************************************************/
bool receiveok1=false;
bool receiveok2=false;
bool status_complete1=false;
bool status_complete2=true;
/****************************************************************
变量DELAY可以控制模块的延迟时间,用以滤除人行走带来的误操作
*****************************************************************/
int DELAY=180;
int distance1=0;
int distance2=0;
int DISTANCE1=1200;
int DISTANCE2=1200;
int threshold=0;
unsigned long tim[2]={
0};
int period=0;
/****************************************************************
声明函数,雷达数据获取函数和采集环境距离阈值函数
*****************************************************************/
int TFminione(void);
int TFminitwo(void);
int lidar_average(void);
/****************************************************************
引脚功能定义,初始化;
串口初始化;
采集周边环境,确定模块工作阈值;
*****************************************************************/
void setup()
{
pinMode(ON,INPUT);
pinMode(OFF,INPUT);
pinMode(LED_ON,OUTPUT);
pinMode(LED_OFF,OUTPUT);
digitalWrite(ON,HIGH);
digitalWrite(OFF,HIGH);
digitalWrite(LED_ON,LOW);
digitalWrite(LED_OFF,LOW);
Serial1.begin(115200);//设置TFmini1与arduino的串口波特率
Serial2.begin(115200);//设置TFmini2与arduino的串口波特率
Serial3.begin(115200);//设置电脑与arduino的串口波特率
int threshold1=lidar_average();
threshold=threshold1-100;
Serial3.print("threshold=");
Serial3.println(threshold);