资源简介 Arduino创客设计----机器人眼睛之超声波测距篇一、教材分析超声波指向性强,在介质中传播的距离较远,因而超声波经常用于距离的测量。通过超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回,超声波接收器收到反射波就立即停止计时。根据接收器接到超声波时的时间差就可以知道距离了,这与蝙蝠、雷达测距原理相似。利用超声波测距往往比较迅速、方便、易于做到实时控制,因此在汽车倒车雷达、移动机器人上得到了广泛的应用。本节课就是利用超声波模块SR04测量和格挡物体之间的距离,并在串口中显示距离,当距离小于设定值时,报警灯闪烁。二、学生分析高中学生在物理课中学习过声波传播原理,知道声速是340M/S。因此,利用声波测距,测试距离=(返回时间*声速(340M/S))/2。高中学生也学习过简单的电学,对于一些简单的电路原理及连接还是有所了解的。但实际设计中的电子元件、电路连接等跟物理上所学的还是有一定的差距。而这节课使用的HC-SR04超声波模块控制原理简单、距离换算学生还是比较能掌握的。但对于新的知识如串口输出、根据元件时序图写程序、选择语句的程序代码等,都是学生没有接触的,如何让他们在短时间掌握这些知识,成为本节课设计的关键。因此,我在教学中尽可能把复杂问题简单化,通过学生自己摸索,教师参与的方式使学生掌握知识,提高对arduino设计的兴趣。三、教学目标:1、知识与技能:(1)了解HC-SR04模块引脚含义。(2)掌握超声波测距原理及距离换算的算法。(3)掌握利用计算机串口显示距离的方法。(4)学会识读元件时序图并写程序。(5)掌握if判断语句的用法。2、过程与方法:鼓励学生自主探究和合作交流,引导学生自主观察、总结,在与他人的交流中丰富自己的思维方式,获得不同的体验和不同的发展。3、情感态度价值观:提高对生活中技术问题的敏感度和引发出探究欲望,并认识技术在日常生活中的应用。五、教学重难点:1、教学重点:(1) 了解HC-SR04模块引脚含义。(2) 掌握超声波测距原理及距离换算的算法。(3) 掌握if判断语句的用法。2、教学难点:(1) 掌握超声波测距原理及距离换算的算法。(2) 掌握if判断语句的用法。(3)学会识读元件时序图并写程序。六、教学过程1、复习导入 展示一个智能小车行进过程的演示,提出超声波测距的概念。任务:打开上节课所做的让一个灯闪烁程序,把原外接的Led的端口2改为Arduino板子13口自带的一个Led灯,下载程序,观看效果。2、HC-SR04引脚介绍3、超声波测距原理:(1)采用 trig触发测距,给至少10us的高电平信号;(2)模块自动发送 8个40khz的方波,自动检测是否有信号返回;(3)有信号返回,通过 echo输出高电平, 高电平持续的时间就是距离的2倍;(4)超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2 4、接线原理图5、完整程序#define TrigPin 2#define EchoPin 3#define Led 13float Value_cm;void setup(){ Serial.begin(9600); //设定串口波特率为9600 pinMode(TrigPin, OUTPUT); pinMode(EchoPin, INPUT); pinMode(Led,OUTPUT);}void loop(){ digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin delayMicroseconds(2); digitalWrite(TrigPin, HIGH); delayMicroseconds(10); digitalWrite(TrigPin, LOW); Value_cm = float( pulseIn(EchoPin, HIGH) * 17 )/1000; //将回波时间换算成cm Serial.print(Value_cm); //串口输出字符“Value_c”后不换行 Serial.println("cm"); //串口输出cm值 if(Value_cm < 10) //Value_cm值小于设定值,则让灯亮 { digitalWrite(Led, HIGH); delay(500); digitalWrite(Led, LOW); delay(500); } else { digitalWrite(Led,LOW); //关闭LED } delay(500);}七、新知识(1)测距程序核心代码 pulseIn(pin, value) 函数:读取一个引脚的脉冲( HIGH或LOW)。例如,如果 value是HIGH,pulseIn()会等待引脚变为 HIGH,开始计时,再等待引脚变为 LOW并停止计时。返回脉冲的长度,单位微秒。将回波时间换算成cm公式:高电平的时间(us)* 340m/s / 2 =高电平的时间(us) * 17000 cm / 1000000 us =高电平的时间 * 17 / 1000 (cm) (1秒=1000毫秒=1000000微秒)。Value_cm = float( pulseIn(EchoPin, HIGH) * 17 )/1000; (2)串口相关操作Serial.begin(9600); //设定串口波特率为9600Serial.print(Value_cm); //串口输出字符“Value_cm”后不换行 Serial.println("cm"); //串口输出cm值后换行(3)条件判断语句if和if…elseif和if…else可以根据不同的条件来执行不同的语句。if(条件)语句1后续语句if(条件) 语句1else语句2后续语句(4) delayMicrosecond函数(5)数据类型float具体参见开源知识库的网址:http://kb.open.eefocus.com/index.php?title=Arduino_IDE八、拓展思维:1、这节课是利用超声波测距,如果距离小于设定值,则报警灯闪烁。倒车雷达大家都见过,可以根据车辆距离障碍物的距离不同发出不同的声音或控制刹车等,如果本例报警灯改成声、光报警,需要添加什么元件?2、本节课只利用一个超声波传感器检测一个方向的距离,如果同时检测前、后、左、右四个方向障碍物的距离并设置报警方式,需要增加哪些元件,线路如何连接,程序应该如果写呢?3、超声波测距在日常生活中应用很广,除了汽车雷达、导盲拐杖外,像现在用的比较多的扫地机器人、跟随宠物等,现在让你利用测距原理来设计一个可以跟随你走的背包机器人,应该如何设计? 展开更多...... 收起↑ 资源预览