首先认识一下两个新的模块
如图,左边的是传感器扩展版,这里选择的是 Electronic Brick Shield 系列,另一个是超声波发射接收装置。
传感器扩展版将Arduino复杂的传感器线路连接进行了规整,类似于一个线路整理器,我们可以看到在上面除去两个电阻之外就没有别的元件了,基本上都是引脚的归纳。同时,扩展版是支持完美插入Arduino板卡的,在后面的图片中可以看到。
扩展板对传感器的连接,以超声波模块为例,其传输的是数字信号,所以我们需要将其对接至于扩展板的数字信号接口,接线如图
红线是VCC(电源+)接在VCC上,黑线为GND(电源-)接在GND上,这两个比较好理解。
棕线为Trip(触发控制信号)因为是数字信号所以任意找一个2-13的引脚口,白线Echo(回响信号)同理任意连接一个数字信号引脚上,到时代码调用这两个引脚即可。
这里我们的Trip接在了D2(2号引脚),Echo接在了D3上。(注意,接在D0,D1上是无效的,后面会解释)
可以看到,这次我们的接线都较为集中,因为在扩展版对vcc和gnd接口进行了归纳。
所有连接都应当在断电状态下进行。完成硬件连接之后接下来我们进入编码环节:
先看一下超声波模块的一些参数
注意输入触发信号——10uS的TTL脉冲,这里的意思是我们需要给Trip口输入一个10毫秒的脉冲信号来触发超声波发射。同时会经过Echo口返回一个表示距离值的回响电平,这个电平值即是声波来回经过的时间以微秒计算。了解这一点之后我们就知道如何着手编程了。
先看代码,这里先简单测试一下超声波模块是否工作正常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | const int TrigPin = 2; const int EchoPin = 3; long distance; void setup() { Serial.begin(9600); pinMode(TrigPin, OUTPUT); pinMode(EchoPin, INPUT); } void loop() { digitalWrite(TrigPin, HIGH);//发送高电平脉冲 delayMicroseconds(10);//延迟10ms digitalWrite(TrigPin, LOW);//关闭高电平脉冲 distance = pulseIn(EchoPin, HIGH);//读取电平值 Serial.println(distance); delay(1000); } |
将代码烧入arduino中,打开串口监听,按一下板卡上的reset,然后用手掌或远或近在超声波感应模块前移动,回显数据如下
说明此刻超声波模块已经正常工作了。
接下来,我们需要将电平数据值即时间换算成距离,这里需要用到一段公式,官方给出的是:uS/58=厘米,uS/148=英寸 或者 高电平时间*音速(340m/s)/2 = 米,其实最后得出的结果即是 uS/58 , 这里的uS即我们之前得出的电平值。修改下代码,比较简单就不列出来了
最终效果如图
出现3646cm这个值说明测试距离已经远远超出了有效接收范围(此超声波模块的接收范围是2-400cm)。
初步测试了下,作为机器人的壁障系统这个精确度还是非常足够的,甚至你可以在自己的车上自己加装一个倒车雷达。
关于传感器的使用这里仅仅只是很小的一部分,更多功能欢迎大家一同讨论开拓。
本篇到此,谢谢关注。
BeiTown
2013.03.26