Arduino驱动超声波传感器SR04代码
const int TrigPin = 2; //触发引脚const int EchoPin = 3; //测量引脚float cm; void setup() { Serial.begin(9600); pinMode(TrigPin OUTPUT); //设置触发引脚为输出pinMode(EchoPin INPUT); //设置测量引脚为输入} void loop() { //发一个10us的高脉冲去触发TrigPin digitalWrite(TrigPin LOW); delayMicroseconds(2); digitalWrite(TrigPin HIGH); //拉高引脚delayMicroseconds(10); //保持10usdigitalWrite(TrigPin LOW); cm = pulseIn(EchoPin HIGH) / 58.3; //算成厘米 cm = (int(cm * 100.0)) / 100.0; //保留两位小数 Serial.print(cm); //输出打印结果Serial.print("cm"); //输出单位Serial.println(); //回车换行delay(1000); }
公式: uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S) /2
原理图
这个模块好像挺简单吧,我记得是脉冲是模块上面的电路实现的,单片机只需要给一个类似于启动的信号,然后模块会产生频率驱动发射雷达,如果有返回的声波,则接受雷达会受到返回的声波,然后模块的输出引脚就会有输出电平信号,我在学校使用的时候是按照以下流程处理的,(也许不全面,记不太清楚了)
1、给模块一个启动信号。
2、等待模块返回信号(模块收到声波后的输出信号)。
3、一旦收到模块信号(上升沿),则立即启动定时器计时。
4、模块的输出信号变为低电平(下降沿),立即停止计时。
3、根据计时时间计算实际距离。
嗯,我觉得你可以先指定你的开发平台,楼上袁兄给出了arduino的应用,基本试用于C环境的各平台,注意时钟就行。
python类似,稍晚一点我可以尝试改写一个出来。
但据我的经验,在实际应用中,距离范围可能是最限制你应用的,距离近了,检测不出来,距离远了,也检测不出来。只能在某个范围内使用,而且精度可能也不会太高,还会被干扰。。。
这里有一个程序
https://blog.csdn.net/tcjy1000/article/details/70170058
可以参考一下这篇文章http://blog.sina.com.cn/s/blog_62efd1040100v4hn.html
这类器件都是去操作它的寄存器进行相关配置的,不用太关注它实现的细节