732|1

4810

帖子

0

资源

纯净的硅(中级)

分享一个无线遥控小车的制作

引言

Arduino或ESP32 驱动小车作为一个经典应用,广泛被开源硬件爱好者改装。然而,其交互方式大部分依然是传统的按键交互。本次尝试改变Arduino 小车的交互方式,利用PAJ7620U2 Gesture Sensor 手势识别传感器识别,达到可以用手势直观控制小车的目的。 最终视频中,我们的小车可以接受手势指令:前进,后退,停止,转向,这些指令由手势转化 而来,并通过HC12远距离串口收发模块发送至Arduino,Arduino 控制电机达到作出相应动作。
视频很快奉上,设计思路和部分代码解释都显示在视频里

第一步:展示

手势从下到上,小车前进;手势从下到上,小车后退;手势往左,小车左转;手势往右,小车右转。手势从左往右。小车停止

第二步:无线模块的配置


 
  1. 两块无线模块之间要实现通信,我们把串口波特率设置为9600,我这里用的arduino 的硬串口。就是D0D1两个口。
  2. 另外串口模块的供电我选用了3.3V。目的是省电。

第三步:硬件搭建


 
  1. 所需器材:<a class="decoration-color" href="https://buy.icxbk.com/index.php?ctl=Product&met=lists&key_type=1&keywords=Arduino+UNO" target="_blank">Arduino UNO</a>控制器(2);PAJ7620U2 Gesture Sensor 手势识别传感器(3);HC12-2只(4);12v锂电池;(5);USB数据线;USB Serial to 串口;(6);小车底盘 7);L298N电机驱动模块


根据测试,3.3v下工作良好。
这个无线模块的应用距离根据小范围测试,不少于200M。

第五步:

发一些硬件的图片。让人有个直观的认识


第六步:总体介绍

手势控制小车运动的设计系统是由手势传感器,无线传输模块和遥控小车来完成的。手势传感是通过采集距离模块有30cm的方向采集信号
然后通过arduino做进一步的处理。arduino会对采集的信号发出手势指令集,并通过无线模块发送给遥控小车的。实现小车的前进,后退,
左转和右转。使用手势传感来控制小车,会比传统遥控器的人际互动更为自然。

第七部:连线图

连线图是有两部分,一个是发送端连线图,另一个是接收端的。
发送端



第八部:小车部分的设计

小车部分选用的市L298N电机驱动模块。这个模块的一个特色是可以连外部供电。因为arduino连接电机往往力不从心。需要外部电力支持。同时外部电力也同时为arduio
直接供电。

小车图


发送端的代码如下:


 
  1.  
  2. #include <dfrobot_paj7620u2.h>
  3. DFRobot_PAJ7620U2 paj;
  4.  
  5. void setup(){
  6. Serial.begin(9600);
  7.  
  8. while(paj.begin() != 0){
  9. delay(500);
  10. }
  11. paj.setGestureHighRate(true);
  12. }
  13.  
  14. void loop() {
  15. DFRobot_PAJ7620U2::eGesture_t gesture = paj.getGesture();
  16.  
  17. if(gesture == paj.eGestureUp){
  18. Serial.write(45);
  19. delay(100);
  20. }
  21. else if(gesture == paj.eGestureDown){
  22. Serial.write(46);
  23. delay(100);
  24. }
  25. else if(gesture == paj.eGestureLeft){
  26. Serial.write(47);
  27. delay(100);
  28. }
  29. else if(gesture == paj.eGestureRight){
  30. Serial.write(48);
  31. delay(100);
  32. }
  33. else if(gesture == paj.eGestureClockwise){
  34. Serial.write(49);
  35. delay(100);
  36. }
  37. }

接收端的代码如下:
```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);
}

```

此帖出自RF/无线论坛

回复

1

帖子

0

资源

一粒金砂(初级)

学习了,感谢楼主无私的奉献!

回复
您需要登录后才可以回帖 登录 | 注册

关闭
站长推荐上一条 1/5 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表