首页 > 编程知识 正文

arduino超声波避障程序,arduino超声波模块损坏

时间:2023-05-05 22:38:28 阅读:144155 作者:2692

我是小学六年级学生。 请叫我花生。 我在北京市朝阳区垂柳中心小学金都分校上学。 我学习Python编程两年多了,获得了蓝桥杯全国选拔大赛二等奖(Python中级青少年组)和北京复赛二等奖。 我打算明年年初开始学习C。 因为Arduino语言和c语言相似而且简单,所以在父亲的帮助下学习了Arduino单片机和Arduino编程语言。 本文介绍了用Arduino单片机制造超声波红外智能障碍车,并附上程序源代码。

第一个我做的是超声波避障手推车。 制作后,发现超声波测量距离有死角和死角。 购物车在稍微复杂的障碍物环境下无法检测到障碍物,购物车会撞到障碍物上。 和父亲谈话后,父亲建议我在超声波传感器的两侧增加两条红外线传感器来检测超声波死角和死角障碍物。 这样超声波红外线一起检测障碍物,消除了小车在复杂障碍物环境下碰撞的现象。

使用材料:

1. Arduino UNO R3大师

2. L298P电机驱动扩展版

3 .超声波传感器(HC-SR04 ) )。

4.2个红外线屏障传感器

5 .直流减速机x2(6v ) )。

6 .舵机云台

7 .小车底板直流电机安装支架万向轮

8.4个led指示灯模块

9 .有几个铜柱配件

10 .杜邦线几条

11 .电池和电池盒

12 .扎带

13 .巡逻传感器X3 )此购物车不可用。 为其他程序提前组装)。

14.HC-05蓝牙模块(此购物车不可用。 为其他程序提前组装)。

以上这些材料从4家淘宝电商分别采购,价格如下图:

我的小车接线图(所有的线都接在L298P电机驱动扩展板上),接线示意图如下:

我计划要小车实现的运动和功能:

小车运行中检测到40CM以内有障碍物,或者红外隐身传感器检测到障碍物时,小车停止,舵机左右摆动,摆动时用超声波检测小车左侧和右侧的距离。 左侧大于右侧时左转,否则右转。 前进时前照灯点亮,后退时背光源点亮蜂鸣器发出,左转时左侧灯点亮蜂鸣器发出。 右侧的灯点亮,蜂鸣器响。 所有的灯都亮了。

在程序编写和调试过程中遇到的困难和发现的问题:

1 .舵机的控制我开始调用库函数Servo.h,发现只要使用梯形图存储库代码,有一个直流电机就一直不能旋转。 之后,根据学习凌寒11的博客,梯形图存储库将禁用Arduino数字10针的PWM功能。 另一方面,L298P电机驱动扩展板固化了Arduino的数字10、11、12、13号引脚,而且10号引脚固化用于调速(PWM )。

解决方案:参考凌寒11博客: (第19条新闻(arduino-解决舵机与直流电机的碰撞问题_u010351766专栏-CSDN博客3359 blog.csdn.net/u 010351766/artion

2 .我的L298P电机驱动扩展板的D3端子和D5端子之间的GND端子实际上既不是GND,也不是5V,建议避开该GND端子进行接线。

程序代码:

int EchoPin=8; int TrigPin=7; int lval; int rval; int buzz=4; int E1=10; int M1=12; int E2=11; int M2=13; int fleft=A3; int fright=A0; int bleft=A1; int bright=A2; int lsensor=6; int rsensor=5; int servoPin=9; 浮点距离、距离_ left、距离_ right; void setup () pinmode(m1,OUTPUT ); pinmode(m2,OUTPUT ); pinmode(echopin,INPUT ); 拼音模式(trig pin,OUTPUT ); pinmode(E1,OUTPUT; pinmode(E2,OUTPUT; pinmode(servopin,OUTPUT ); pinmode(fleft,OUTPUT ); pinmode(fright,OUTPUT ); pinmode(bleft,OUTPUT ); pinmode(Bright,OUTPUT ); pin mode (l传感器,INPUT ); pin mode (r传感器,INPUT ); pinmode(buzz,OUTPUT ); 服务器(90; }void buzz0() { digit

alWrite(buzz,LOW);}void buzz1(){ digitalWrite(buzz,HIGH); delay(135); digitalWrite(buzz,LOW); delay(135);}void buzz2(){ digitalWrite(buzz,HIGH);}void servo(int angle) { for(int i=0;i<50;i++){ int pulsewidth = (angle * 11) + 500; digitalWrite(servoPin, HIGH); delayMicroseconds(pulsewidth); digitalWrite(servoPin, LOW); delayMicroseconds(20000 - pulsewidth); } delay(100);}void measdist(){ digitalWrite(TrigPin,LOW); delayMicroseconds(10); digitalWrite(TrigPin,HIGH); delayMicroseconds(10); digitalWrite(TrigPin,LOW); distance = pulseIn(EchoPin,HIGH); distance = distance / 58;}void scsr(){ measdist(); lval = digitalRead(lsensor); rval = digitalRead(rsensor); if(distance<40||lval==0||rval==0) { car_stop(); servo(165); //舵机左转 delay(1000); measdist(); distance_left = distance; distance_left = distance_left / 58; servo(0);//舵机右转 delay(1000); measdist(); distance_right = distance; distance_right = distance_right / 58; servo(90);//舵机转回中间 delay(1000); if(distance_left<distance_right) { car_back(); delay(500); car_right(); delay(450); car_stop(); } else { car_back(); delay(500); car_left(); delay(450); car_stop(); } } else { car_up(); }}void car_left(){ digitalWrite(M1,HIGH); digitalWrite(M2,HIGH); analogWrite(E1,80); analogWrite(E2,0); digitalWrite(fleft,HIGH); digitalWrite(fright,LOW); digitalWrite(bleft,HIGH); digitalWrite(bright,LOW); buzz1();}void car_right(){ digitalWrite(M1,HIGH); digitalWrite(M2,HIGH); analogWrite(E1,0); analogWrite(E2,80); digitalWrite(fright,HIGH); digitalWrite(fleft,LOW); digitalWrite(bleft,LOW); digitalWrite(bright,HIGH); buzz1();}void car_up(){ digitalWrite(M1,HIGH); digitalWrite(M2,HIGH); analogWrite(E1,85); analogWrite(E2,85); digitalWrite(fleft,HIGH); digitalWrite(fright,HIGH); digitalWrite(bleft,LOW); digitalWrite(bright,LOW); buzz0();}void car_back(){ digitalWrite(M1,LOW); digitalWrite(M2,LOW); analogWrite(E1,85); analogWrite(E2,85); digitalWrite(bleft,HIGH); digitalWrite(bright,HIGH); digitalWrite(fleft,LOW); digitalWrite(fright,LOW); buzz2();}void car_stop(){ digitalWrite(M1,LOW); digitalWrite(M2,LOW); analogWrite(E1,0); analogWrite(E2,0); digitalWrite(fleft,HIGH); digitalWrite(fright,HIGH); digitalWrite(bleft,HIGH); digitalWrite(bright,HIGH); buzz1();}void loop() { scsr();}

本文手稿原作者:小花生

本文的修改 / 网络排版 / 网络码字:小花生父亲

以下是原作手稿的一部分截图:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。