完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
很多朋友制作了超声波避障智能小车,有的带有舵机的“摇头”功能,有的没有。不过可惜超声波测量平面物体相对比较准确,对于细长形的物体,经常无法形成有效的反射,因此测量不到,使得智能小车容易“卡”在桌子、凳子脚下或其他障碍物下面。 又由于超声波一般装在车头,对于左右两侧出现的“障碍”无法处理。所以我在小车底盘左右两侧加装了红外线感应,基本达到小车在房间了到处走,不会“卡死”的效果,也能够及时处理突然在车身左右出现的障碍物,行走时速度快,比较灵活。 本人使用某国内厂家的小车底盘,他们自己生产的HJduino控制板,拓展板(兼容Arduino),红外感测器,通用的超声波。我不是厂家的人,没必要在这里给他做广告,只是本人穷,在两百多块左右的价位选择这个厂家的东西还是比较合适的。 红外感应器的感测距离我自己可以调到6cm至7cm左右,但是这仪器“怕太阳光”。即使没有直接被阳光直射到,白天在室内也可能被太阳辐射热影响到红外信号,小车失灵。一般是晚上八点之后,小车的红外感应比较灵敏、准确。 从理论上说,在小车上多装几个超声波或者红外线是没有问题的。 我也计划过买一台小孩开的玩具车(可以坐人的那种)来改装成“自动行驶”避障车,但是由于时间、精力、财力等问题,目前实现不了。希望有朋友可以做出来。 个人拍的一些视频已经上传到优酷,有兴趣的朋友可以去看看。 智能小车超声波找出路2—在线播放—优酷网,视频高清在线观看 http://v.youku.com/v_show/id_XMjkzNzQzMjE5Mg==.html?spm=a2h3j.8428770.3416059.1 智能小车超声波避障1—在线播放—优酷网,视频高清在线观看 http://v.youku.com/v_show/id_XMjkzNzQyODc1Mg==.html?spm=a2h3j.8428770.3416059.1 智能小车超声波找出路3—在线播放—优酷网,视频高清在线观看 http://v.youku.com/v_show/id_XMjkzNzQzMjU2OA==.html?spm=a2h3j.8428770.3416059.1 智能小车从角落里出来—在线播放—优酷网,视频高清在线观看 http://v.youku.com/v_show/id_XMjkzNzQzMjUyOA==.html?spm=a2h3j.8428770.3416059.1 智能小车自主走出角落—在线播放—优酷网,视频高清在线观看 http://v.youku.com/v_show/id_XMjkzNzQyODc5Mg==.html?spm=a2h3j.8428770.3416059.1 智能小车超声波舵机避障4—在线播放—优酷网,视频高清在线观看 http://v.youku.com/v_show/id_XMjkzNzQzMTU2MA==.html?spm=a2h3j.8428770.3416059.1 智能小车超声波舵机避障3—在线播放—优酷网,视频高清在线观看 http://v.youku.com/v_show/id_XMjkzNzQzMTU1Mg==.html?spm=a2h3j.8428770.3416059.1 视频管理-全部视频 http://vm.tudou.com/video/list 视频管理-全部视频 http://vm.tudou.com/video/list 我的自频道-优酷视频 优酷用户1475903255365918 我拍视频时是用手机随便拍的,没有分清是“1路”避障还是“3路”避障。个人感觉3路避障灵活些,不过我做的1路避障效果也还可以。 以下是源代码: //ARDUINO超声波(舵机)加红外线智能避障小车 L = 左 R = 右 F = 前 B = 后 #include intpinLB=14; intpinLF=15; intpinRB=17; intpinRF=16; intMotorRPWM=3; intMotorLPWM=5; intinputPin = 9; // 超声波接收管脚号 intoutputPin =8; // 超声波发射管脚号 constint SensorLeft = 12; //左红外传感器管脚号 constint SensorRight = 13; //右红外传感器管脚号 intSL; //左 intSR; //右 intFspeedd = 0; // 前进速度 intRspeedd = 0; // 右转速度 intLspeedd = 0; // 左转速度 intdirectionn = 0; //方向 Servomyservo; // 设 myservo intdelay_time = 250; // 舵机转向后稳定的时间 intFgo = 1; // 前进 intRgo = 5; // 右转 intLgo = 3; // 左转 intBgo = 7; // 后退 voidsetup() { Serial.begin(9600); //波特率 pinMode(pinLB,OUTPUT); //电机 pinMode(pinLF,OUTPUT); pinMode(pinRB,OUTPUT); pinMode(pinRF,OUTPUT); pinMode(MotorLPWM, OUTPUT); //PWM pinMode(MotorRPWM, OUTPUT); pinMode(inputPin, INPUT); // 超声波接收 pinMode(outputPin, OUTPUT); //超声波发射 pinMode(SensorLeft, INPUT); //定义左红外传感器 pinMode(SensorRight, INPUT); //定义右红外传感器 myservo.attach(10); // 舵机 } voidadvance(int a) // 前进 { digitalWrite(pinRF,HIGH); digitalWrite(pinRB,LOW); analogWrite(MotorRPWM,150); digitalWrite(pinLF,HIGH); digitalWrite(pinLB,LOW); analogWrite(MotorLPWM,150); delay(a * 100); } voidright(int b) //单轮 { digitalWrite(pinRB,LOW); digitalWrite(pinRF,HIGH); analogWrite(MotorRPWM,200); digitalWrite(pinLB,LOW); digitalWrite(pinLF,LOW); delay(b * 100); } voidleft(int c) //单轮 { digitalWrite(pinRB,LOW); digitalWrite(pinRF,LOW); digitalWrite(pinLB,LOW); digitalWrite(pinLF,HIGH); analogWrite(MotorLPWM,200); delay(c * 100); } voidturnR(int d) //双轮右转 { digitalWrite(pinRB,HIGH); digitalWrite(pinRF,LOW); analogWrite(MotorRPWM,150); digitalWrite(pinLB,LOW); digitalWrite(pinLF,HIGH); analogWrite(MotorLPWM,150); delay(d * 100); } voidturnL(int e) //双轮左转 { digitalWrite(pinRB,LOW); digitalWrite(pinRF,HIGH); analogWrite(MotorRPWM,150); digitalWrite(pinLB,HIGH); digitalWrite(pinLF,LOW); analogWrite(MotorLPWM,150); delay(e * 100); } voidstopp(int f) //停止 { digitalWrite(pinRB,LOW); digitalWrite(pinRF,LOW); digitalWrite(pinLB,LOW); digitalWrite(pinLF,LOW); delay(f * 100); } voidback(int g) //后退 { digitalWrite(pinRF,LOW); digitalWrite(pinRB,HIGH); analogWrite(MotorRPWM,150); digitalWrite(pinLF,LOW); digitalWrite(pinLB,HIGH); analogWrite(MotorLPWM,150); delay(g * 100); } voiddetection() //测量3个方向 { int delay_time = 200; // 舵机转向后稳定的时间 ask_pin_F(); // 读取前方距离 if(Fspeedd < 30) // 假如前方距离小于30厘米 { stopp(5); ask_pin_L(); // 读取左边距离 delay(delay_time); // 等待舵机稳定 ask_pin_R(); // 读取右边距离 delay(delay_time); // 等待舵机稳定 if(Lspeedd > Rspeedd) //假如左边距离大于右边距离 { directionn = Lgo; //向左走 } if(Lspeedd <= Rspeedd) //假如 左边距离小于或等于右边距离 { directionn = Rgo; //向右走 } if (Lspeedd < 15 && Rspeedd< 15) //假如左边距离和右边距离均小于15厘米 { directionn = Bgo; //后退 } } else //假如前方距离不小于30厘米 { directionn = Fgo; //前进 } } voidask_pin_F() // 测量前方距离 { myservo.write(90); digitalWrite(outputPin, LOW); // 超声波发射低电平2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // 超声波发射高电平10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // 维持超声波发射低电平 float Fdistance = pulseIn(inputPin,HIGH); //读取相差时间 Fdistance= Fdistance/5.8/10; //将时间转化为距离(单位:厘米) Fspeedd = Fdistance; // 将距离输入前进速度 } void ask_pin_L() // 测量左边距离 { myservo.write(5); delay(delay_time); digitalWrite(outputPin, LOW); delayMicroseconds(2); digitalWrite(outputPin, HIGH); delayMicroseconds(10); digitalWrite(outputPin, LOW); float Ldistance = pulseIn(inputPin,HIGH); Ldistance= Ldistance/5.8/10; Lspeedd = Ldistance; // 将距离输入左转速度 } voidask_pin_R() // 测量右边距离 { myservo.write(177); delay(delay_time); digitalWrite(outputPin, LOW); delayMicroseconds(2); digitalWrite(outputPin, HIGH); delayMicroseconds(10); digitalWrite(outputPin, LOW); float Rdistance = pulseIn(inputPin,HIGH); Rdistance= Rdistance/5.8/10; Rspeedd = Rdistance; // 将距离输入右转速度 } voidloop() { myservo.write(90); //让舵机回到预备位置,准备下一次的测量 detection(); //测量角度,并且判断向哪边移动 SL = digitalRead(SensorLeft); SR = digitalRead(SensorRight); if(directionn == 7) //假如方向 = 7 后退 { back(8); turnL(2); //稍微左转,防止卡死 } if(directionn == 5) //假如方向 = 5 右转 { back(4); turnR(6); } if(directionn == 3) //假如方向 = 3 左转 { back(4); turnL(6); } if(directionn == 1) //假如方向= 1 前进 { advance(1); if (SL == HIGH & SR == LOW) // 如果右边红外线感测到物体,单轮向左 { left(6); } else if (SR == HIGH & SL == LOW) // 如果左边红外线感应到物体,向右 { right(6); } else if (SR == LOW & SL == LOW) // 如果两个红外线均感应到物体,后退 { back(4); } } } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
5305 浏览 0 评论
11532 浏览 9 评论
4664 浏览 1 评论
13946 浏览 0 评论
14250 浏览 0 评论
FRSE 2023 | 机器人与软件工程前沿国际会议诚征优秀稿件
2934浏览 0评论
哪位大哥有库卡KUKA.EtherNetIP MS(2.X版本)软件包?
4241浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-22 10:51 , Processed in 0.627942 second(s), Total 53, Slave 43 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191