1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
避障车
视频教程 https://www.bilibili.com/video/BV1nJ411P7dR/?spm_id_from=333.788.recommend_more_video.-1 中英文对照表: ULTASONIC SENSOR:超声波雷达传感器 L293D电机驱动模块:
3:直流电机M2的PWM信号端,与左边的L293D芯片(IC1)的9号脚相连 4:74HC595芯片的数据输入时钟端(上升沿有效),与中间的74HC595芯片(IC3)的11号脚相连 5:直流电机M4的PWM信号端,与右边的L293D芯片(IC2)的1号脚相连 6:直流电机M3的PWM信号端,与右边的L293D芯片(IC2)的9号脚相连 7:74HC595芯片的输出使能端(低电平有效),与中间的74HC595芯片(IC3)的13号脚相连 8:74HC595芯片的串行数据输入端,与中间的74HC595芯片(IC3)的14号脚相连 9:舵机2的PWM信号端 10:舵机1的PWM信号端 11:直流电机M1的PWM信号端,与左边的L293D芯片(IC2)的1号脚相连 12:74HC595芯片的并行数据输出时钟端(上升沿有效),与中间的74HC595芯片(IC3)的12号脚相连 A0~A5可以自行焊接排针作为扩展,可以提供给舵机也可以提供给测速模块,接线柱的电机驱动电源是提供给4个直流电机的,引脚的5V电路驱动电源是提供给芯片和舵机的,以及右下脚的5V电源,黄色的跳线帽将电机驱动电源和9V引脚相连,电机驱动电源提供多少伏的电压,9V接脚就是多少伏的,并不是固定9V,所以请注意,关于电机驱动电源资料上说的是4.5V到36V,建议在12V之内,L293D的芯片是4.5V到36V的,但是该模块上的其他元件不一定能承受,本人就弄坏一个板子,起初是74HC595芯片莫名其妙的烧坏,然后更换芯片后,在20V电压下调压时拧错了反向,导致一个电容爆炸了,但是肯定是没有超过36V的,该模块的电容的击穿电压是16V,20V以下是没有问题的,还要注意的是电流,不能过大,一般12V的电压绝对够用了。 模块上还有一些被焊死的接口,是和直流电机接线柱相邻的(蓝色区域其他引脚是GND),可以自行焊上排针,这样就可以使用杜邦线连接电机了或者串上电阻接上LED做指示灯,我的板子是自己把引脚都焊上来了。 连接程序图 程序代码: 上传代码前确保已经安装了下面三个类库
//ARDUINO OBSTACLE AVOIDING CAR// #include #include #include #define ECHO_PIN A0 //定义接受回传超声波信号为模拟引脚A0 #define TRIG_PIN A1 //定义发送超声波信号为模拟引脚A1 #define MAX_DISTANCE 200 //定义超声波信号发射的最大距离为200 #define MAX_SPEED 200 // 设置电机的最高速200 #define MAX_SPEED_OFFSET 20 设置最大速度补偿为20 NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); //使用构造函数新建一个超声波传感器对象 AF_DCMotor motor1(1, MOTOR12_1KHZ); //定义电机M1 AF_DCMotor motor2(2, MOTOR12_1KHZ); //定义电机M2 Servo myservo; //新建舵机对象 boolean goesForward = false; int distance = 100; int speedSet = 0; void setup() { //Serial.begin(115200); myservo.attach(9); //若连接在servo1则端口号是10 myservo.write(115); delay(1000); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); } void loop() { int distanceR = 0; int distanceL = 0; delay(40); //如果检测到障碍物小于15cm就往后退,再对比左右两边障碍距离,再转弯然后直行 if (distance <= 15) { moveStop(); delay(100); moveBackward(); delay(300); moveStop(); delay(200); distanceR = lookRight(); delay(200); distanceL = lookLeft(); delay(200); if (distanceR >= distanceL) { turnRight(); moveStop(); } else { turnLeft(); moveStop(); } } else { moveForward(); } distance = readPing(); } int lookRight() { myservo.write(50); delay(500); int distance = readPing(); delay(100); myservo.write(115); return distance; } int lookLeft() { myservo.write(170); delay(500); int distance = readPing(); delay(100); myservo.write(115); return distance; delay(100); //acktomas:此语句是否执行? } int readPing() { delay(70); int cm = sonar.ping_cm(); //Serial.println(cm); if (cm == 0) { cm = 250; } return cm; } void moveStop() { motor1.run(RELEASE); motor2.run(RELEASE); } void moveForward() { if (!goesForward) { goesForward = true; motor1.run(FORWARD); motor2.run(FORWARD); for (speedSet = 0; speedSet < MAX_SPEED; speedSet += 2) // 缓慢增加电机速度 { motor1.setSpeed(speedSet); motor2.setSpeed(speedSet); delay(5); } } } void moveBackward() { goesForward = false; motor1.run(BACKWARD); motor2.run(BACKWARD); for (speedSet = 0; speedSet < MAX_SPEED; speedSet += 2) // 后退逐步增加电机速度 { motor1.setSpeed(speedSet); motor2.setSpeed(speedSet); delay(5); } } void turnRight() { motor1.run(FORWARD); motor2.run(BACKWARD); delay(500); motor1.run(FORWARD); motor2.run(FORWARD); } void turnLeft() { motor1.run(BACKWARD); motor2.run(FORWARD); delay(500); motor1.run(FORWARD); motor2.run(FORWARD); } |
|
|
|
只有小组成员才能发言,加入小组>>
2434 浏览 0 评论
9096 浏览 4 评论
36765 浏览 19 评论
5025 浏览 0 评论
24737 浏览 34 评论
1525浏览 2评论
1740浏览 1评论
2189浏览 1评论
1550浏览 0评论
521浏览 0评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 17:51 , Processed in 1.439193 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号