Arduino创客设计----机器人眼睛之超声波测距教案

资源下载
  1. 二一教育资源

Arduino创客设计----机器人眼睛之超声波测距教案

资源简介


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 13
float 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); //设定串口波特率为9600
Serial.print(Value_cm); //串口输出字符“Value_cm”后不换行
Serial.println("cm"); //串口输出cm值后换行
(3)条件判断语句if和if…else
if和if…else可以根据不同的条件来执行不同的语句。
if(条件)
语句1
后续语句
if(条件)
语句1
else
语句2
后续语句
(4) delayMicrosecond函数
(5)数据类型float
具体参见开源知识库的网址:
http://kb.open.eefocus.com/index.php?title=Arduino_IDE
八、拓展思维:
1、这节课是利用超声波测距,如果距离小于设定值,则报警灯闪烁。倒车雷达大家都见过,可以根据车辆距离障碍物的距离不同发出不同的声音或控制刹车等,如果本例报警灯改成声、光报警,需要添加什么元件?
2、本节课只利用一个超声波传感器检测一个方向的距离,如果同时检测前、后、左、右四个方向障碍物的距离并设置报警方式,需要增加哪些元件,线路如何连接,程序应该如果写呢?
3、超声波测距在日常生活中应用很广,除了汽车雷达、导盲拐杖外,像现在用的比较多的扫地机器人、跟随宠物等,现在让你利用测距原理来设计一个可以跟随你走的背包机器人,应该如何设计?

展开更多......

收起↑

资源预览