超声波传感器 URM04 V2.0 的使用
最近购买了DFrobot的超声波传感器URM04 V2.0, 采用Arduino + Xbee 传感器扩展板V5 + URM04 V2.0 的结构,可是程序就是调不好。从URM04上无法读取数据。参考了Wiki (这个Wiki上的东西不可信,2012-02-06注) 中的说明,依然不好使: 问题是无法从传感器获取数据。
经过多次试验,终于将程序调试出来。之前无法获取数据,是因为我在激发测量后,用一个循环死等返回的数据,但是(不知道是不是我手上的芯片的问题)有时后传感器是不返回数据的,因此不能死等。修改程序后,只等待一定的时间,如果超时后依然没有数据返回,就放弃,而进行下一次测量。
代码如下:(代码修改自淘宝卖家wxxmickey发给我的程序,特此向他表示感谢)
// Measure distance using the URM04V2 ultrasonic sensor.
void measureDistance(byte device) {digitalWrite(EN, HIGH);// Trigger distance measurement.uint8_t DScmd[6]={0x55,0xaa,device,0x00,0x01,0x00}; for(int i=0; i<6; i++) {Serial.write(DScmd[i]);DScmd[5] += DScmd[i];}delay(30);// Send command to read measured distance.uint8_t STcmd[6]={0x55,0xaa,device,0x00,0x02,0x00}; for(int i=0; i<6; i++) {Serial.write(STcmd[i]);STcmd[5] += STcmd[i];} delay(3);
}// Return last measured distance by the URM04V2 ultrasonic sensor.
// -1 means the last measurement is out of range or unsuccessful.
int readDistance() {uint8_t data[8];digitalWrite(EN,LOW);boolean done = false;int counter = 0;int result = -1;while(!done){int bytes = Serial.available();if(bytes==8) { for(int i=0; i<8; i++) {data[i] = Serial.read();}result = (int)data[5] * 256 + data[6];done = true;} else {delay(10);counter++;if(counter==5) { // If failed to read measured data for 5 times, give up and return -1.done = true;}}}return result;
}
// Usage code sample:
int EN = 2; // Pin number to enable XBee expansion board V5void setup() {pinMode(EN, OUTPUT);Serial.begin(19200);delay(200);digitalWrite(EN,HIGH);delay(2000);
}void loop() {measureDistance(0x11);int distance = readDistance();delay(1000);
}
方法measureDistance用于激发测量,其参数device用于指定要激发的URM传感器的ID,默认传感器ID为0x11,如果你只有一个传感器,用0x11就是了。方法readDistance用于返回测量所得的距离值。如果测量失败或是测量距离超出传感器可测范围,readDistance均返回-1。
注意事项:
- URM04 V2.0 的默认设备ID是0x11。
- URM04 V2.0 的波特率为固定值19200。
- URM04 V2.0 初始化的时候,其上的LED灯会慢速闪烁4下。
- URM04 V2.0 如果与主板有数据交流,其上的LED灯会一闪一闪的。
- 由于URM04 V2.0 是通过 由于Xbee 传感器扩展板V5 上的RS485传输数据,而RS485又占用了Arduino上的串行口Serial,因此在从电脑往Arduino下载程序的时候,要把Xbee 传感器扩展板V5从Arduino上拔出。
- Xbee 传感器扩展板V5上的跳线(三个跳线都要这么做)要拨到标有485的那一端。
- 如果想用两头都有接口的4P线把URM04和Xbee 传感器扩展板V5连接起来,需要把4P线的一段剪断,然后接入RS485插头中。
![](/assets/blank.gif)
Xbee 传感器扩展板V5
4P线
超声波传感器 URM04 V2.0 的使用相关推荐
- 超声波传感器特性测量:发送与接收传感器之间的差异
简 介: 本文针对超声波传感器的测量方法,探讨了使用NanoVNA测量过程, 对比发射和接收传感器在特性方面的不同. 对于整个过程编写了APPLE脚本. 关键词: 超声波传感器,发送,接收,NanoV ...
- hc sr04流程图_超声波传感器HC-SR04完整应用以及程序讲解
带有Arduino的超声波传感器HC-SR04完整应用指南 本文是有关流行的超声波传感器HC – SR04的应用指南.我们将解释其工作原理,向您展示其某些功能,并分享一个您可以遵循的Arduino项目 ...
- 超声波的四个特性_超声波传感器,超声波的特性
超声波传感器的超声波是一种人耳无法听到的.频率一般超过20kHz的声音. 超声波的基本特性如下所述: 1. 波长与辐射 波的传播速度是用频率乘以波长来表示.电磁波的传播速度 是3×108m/s,而声波 ...
- 将Kinect的v2.0 Motion存储到BVH文件中
本文翻译自:Store Kinect's v2.0 Motion to BVH File I would like to store the motion capture data from Kine ...
- paip.2013年技术趋势以及热点 v2.0 cae
paip.2013年技术趋势以及热点 v2.0 cae HTML5 多核编程 物联网 可穿戴计算设备 3. 物联网 无论是M2M(机器对机器)通信应用,还是NFC(进距离通信)技术,都是物联网的组成部 ...
- 米斯齐超声波传感器显示测量距离(oled)内附Arduino代码
用到的东西: 超声波传感器,uno,SSD1306 OLED显示屏 超声波:gnd-gnd vcc-5v trig-接脚这里是A0 ...
- 机器人技术-HC-SR04超声波传感器数据及机器人避障的应用
比较详细的HC-SR04超声波传感器数据及机器人避障的应用方法 言.超声波传感器概述 超声波传感器型号繁多,价格从几元钱到几百元不等,主要用于检测距离,同时根据声速计算出物体的距离.但超声波传感器有四 ...
- 比较详细的HC-SR04超声波传感器数据及机器人避障的应用方法
引言.超声波传感器概述 超声波传感器型号繁多,价格从几元钱到几百元不等,主要用于检测距离,同时根据声速计算出物体的距离.但超声波传感器有四个缺点: 1.声音速度易受温度和风向等环境因素干扰,在室内应用 ...
- 树莓派控制超声波传感器
看到大二的时候有写过关于树莓派控制HC-SR04超声波测距模块的教程,当时并未给出代码(也不知道是什么原因,估计初写博客并不熟悉吧),所以在三年后的今天贴代码出来,给大家参考下. //树莓派控制超声波 ...
最新文章
- 学习笔记整理之对象的转型
- C语言函数指针的MFC版本Demo
- 系统调用004 SSDT
- 消息队列系列二(IOT中消息队列的应用)
- 操作系统 课堂练习题01【15道 经典题目】
- iOS之深入解析如何构建静态库
- Zookeeper基于Java访问-授权对象
- 牛客多校4 - Count New String(序列自动机+广义后缀自动机)
- LeetCode 204. Count Primes
- Impala查询 - HDFS缓存数据
- python 交易日_Python判断某天是否为A股“交易日”?
- 软件工程第二次作业(原型设计)
- Hibernate的Cascade——级联操作
- 2017 Multi-University Training Contest - Team 7:1005. Euler theorem(答案是(n+3)/2)
- redis事务冲突问题 - 乐观锁和悲观锁
- 图像上采样和图像下采样
- 地震数据的获取与处理
- 哪个软件测试上传速度最准,哪个软件测网速准确,360怎么测网速
- 凤凰架构4——透明多级分流系统
- 阿里热修复方案Sophix