电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
手势识别的无线遥控小车
分 享
扫描二维码分享
手势识别的无线遥控小车
手势识别
遥控小车
gada8881
关注
发布时间: 2020-07-27
丨
阅读: 6616
# 引言 **Arduino或ESP32 驱动小车作为一个经典应用,广泛被开源硬件爱好者改装。然而,其交互方式大部分依然是传统的按键交互。本次尝试改变Arduino 小车的交互方式,利用PAJ7620U2 Gesture Sensor 手势识别传感器识别,达到可以用手势直观控制小车的目的。 最终视频中,我们的小车可以接受手势指令:前进,后退,停止,转向,这些指令由手势转化 而来,并通过HC12远距离串口收发模块发送至Arduino,Arduino 控制电机达到作出相应动作。** 视频很快奉上,设计思路和部分代码解释都显示在视频里 ## 第一步:展示 手势从下到上,小车前进;手势从下到上,小车后退;手势往左,小车左转;手势往右,小车右转。手势从左往右。小车停止 ## 第二步:无线模块的配置 两块无线模块之间要实现通信,我们把串口波特率设置为9600,我这里用的arduino 的硬串口。就是D0和D1两个口。 另外串口模块的供电我选用了3.3V。目的是省电。 ## 第三步:硬件搭建 所需器材:Arduino UNO控制器(2);PAJ7620U2 Gesture Sensor 手势识别传感器(3);HC12-2只(4);12v锂电池;(5);USB数据线;USB Serial to 串口;(6);小车底盘 (7);L298N电机驱动模块 ------------ ![](https://cf05.ickimg.com/bbsimages/202007/0fc064b803eb821ead11cffaa5f47932.png) 根据测试,3.3v下工作良好。 这个无线模块的应用距离根据小范围测试,不少于200M。 ## 第五步: 发一些硬件的图片。让人有个直观的认识 ![](https://cf05.ickimg.com/bbsimages/202007/c328b09e6338296d557cbd97dd16fd0c.png) ![](https://cf05.ickimg.com/bbsimages/202007/aa409c6764006ed71274258725b8caa6.jpg) ![](https://cf05.ickimg.com/bbsimages/202007/fa0bb2f88aec9ac6caa98c0c06d2e032.jpg) ## 第六步:总体介绍 手势控制小车运动的设计系统是由手势传感器,无线传输模块和遥控小车来完成的。手势传感是通过采集距离模块有30cm的方向采集信号 然后通过arduino做进一步的处理。arduino会对采集的信号发出手势指令集,并通过无线模块发送给遥控小车的。实现小车的前进,后退, 左转和右转。使用手势传感来控制小车,会比传统遥控器的人际互动更为自然。 ## 第七部:连线图 连线图是有两部分,一个是发送端连线图,另一个是接收端的。 发送端 ![](https://cf05.ickimg.com/bbsimages/202007/9feafa4397196b705862aba33df542e6.jpg) ![](https://cf05.ickimg.com/bbsimages/202007/4113a4b9871214f51a784350c3d5d3f0.jpg) ![](https://cf05.ickimg.com/bbsimages/202007/00273e9fe2c4506f3b63107c5a1c1ca8.png) ![](https://cf05.ickimg.com/bbsimages/202007/062ab7cd69540adb34f27ec528c999f5.jpg) ### 第八部:小车部分的设计 小车部分选用的市L298N电机驱动模块。这个模块的一个特色是可以连外部供电。因为arduino连接电机往往力不从心。需要外部电力支持。同时外部电力也同时为arduio 直接供电。 小车图 ![](https://cf05.ickimg.com/bbsimages/202007/145eecb17acb10ca4555a9661a7582bd.jpg) ![](https://cf05.ickimg.com/bbsimages/202007/4633a3d5c8fbbb149020c16731cec6e3.jpg) 发送端的代码如下: ```c #include
DFRobot_PAJ7620U2 paj; void setup(){ Serial.begin(9600); while(paj.begin() != 0){ delay(500); } paj.setGestureHighRate(true); } void loop() { DFRobot_PAJ7620U2::eGesture_t gesture = paj.getGesture(); if(gesture == paj.eGestureUp){ Serial.write(45); delay(100); } else if(gesture == paj.eGestureDown){ Serial.write(46); delay(100); } else if(gesture == paj.eGestureLeft){ Serial.write(47); delay(100); } else if(gesture == paj.eGestureRight){ Serial.write(48); delay(100); } else if(gesture == paj.eGestureClockwise){ Serial.write(49); delay(100); } } ``` 接收端的代码如下: ```c /@@* */ int byteRead; //Motor1 is controlled by A1 and A2 //Motor2 is controlled by B1 and B2 int ENA = 3; int ENB = 9; int MOTOR_A1 = 4; int MOTOR_A2 = 5; int MOTOR_B1 = 6; int MOTOR_B2 = 7; void setup() { pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); pinMode(MOTOR_A1, OUTPUT); pinMode(MOTOR_A2, OUTPUT); pinMode(MOTOR_B1, OUTPUT); pinMode(MOTOR_B2, OUTPUT); //pinMode(RIGHT, INPUT); //pinMode(LEFT, INPUT); Serial.begin(9600); // start Serial } void loop() { while(Serial.available()) { // If Serial module has data byteRead = Serial.read(); Serial.print(byteRead); //data to Serial monitor if (byteRead==45) { //received number 1 Forward(); delay(2000); //Serial.println("Forward"); } else if (byteRead==46) { Backward(); delay(2000); //Serial.println("Backward"); } else if (byteRead==47) { Left(); delay(2000); //Serial.println("Left"); } else if (byteRead==48) { Right(); delay(2000); //Serial.println("Right"); } else if (byteRead==49) { Stop(); //Serial.println("STOP"); } } } void Right() { analogWrite(ENA, 100); analogWrite(ENB, 100); digitalWrite(MOTOR_A1, LOW); digitalWrite(MOTOR_A2, HIGH); digitalWrite(MOTOR_B1, LOW); digitalWrite(MOTOR_B2, HIGH); } void Left() { analogWrite(ENA,100); analogWrite(ENB, 100); digitalWrite(MOTOR_A1, HIGH); digitalWrite(MOTOR_A2, LOW); digitalWrite(MOTOR_B1, HIGH); digitalWrite(MOTOR_B2, LOW); } void Forward() { analogWrite(ENA, 100); analogWrite(ENB, 100); digitalWrite(MOTOR_A1, LOW); digitalWrite(MOTOR_A2, HIGH); digitalWrite(MOTOR_B1, HIGH); digitalWrite(MOTOR_B2, LOW); } void Backward() { analogWrite(ENA, 100); analogWrite(ENB, 100); digitalWrite(MOTOR_A1, HIGH); digitalWrite(MOTOR_A2, LOW); digitalWrite(MOTOR_B1, LOW); digitalWrite(MOTOR_B2, HIGH); } void Stop() { analogWrite(ENA, 0); analogWrite(ENB, 0); digitalWrite(MOTOR_A1, LOW); digitalWrite(MOTOR_A2, LOW); digitalWrite(MOTOR_B1, LOW); digitalWrite(MOTOR_B2, LOW); } ```
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
1
)
gada8881
关注
评论
(1)
登录后可评论,请
登录
或
注册
xbk_199369
214
天前...
请问有关于51或者stm32单片机的手势识别无线遥控小车吗
0
回复
发布
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交