这里用的模块,是SRF04超声测距模块,淘宝上买的,10块钱,加八块运费
测距的时序图如下:
想给触发信号trig一个约10us的高电平,模块会发送测距信号,回响信号echo会输出一个高电平,高电平的次序时间,与检测距离成正比,这就是该模块超声定位的基本原理
先面是相关的pytho代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #srf04.py coding:utf-8 srf04超声测距模块驱动 import RPi.GPIO as GPIO import time from time import ctime, sleep __gproTrig = 16 trig __gproEcho = 12 echo #初始化输入、输出gpio口 def init(): GPIO.setmode(GPIO.BCM) GPIO.setup(__gproTrig, GPIO.OUT) GPIO.setup(__gproEcho, GPIO.IN) def measure(): #确保启动前为低电平 GPIO.output(__gproTrig, False) time.sleep(0.0001) #启动测距 GPIO.output(__gproTrig, True) time.sleep(0.00001) #10us GPIO.output(__gproTrig, False) #开始记时 start = 0 stop = 0 # print("measure--1") while start == 0 or stop == 0: val = GPIO.input(__gproEcho) if stop == 0 and start == 0 and val == 1: # print("measure--2") start = time.time() if start > 0 and stop == 0 and val == 0: # print("measure--3") stop = time.time() #根据驱动公式计算测距结果 elapsed = stop - start distance = (elapsed * 34300)/2 return distance if __name__ == '__main__': init() for i in range(300)://五分钟测试 # print("srf05-start:", i) dis = measure() print('--------------dis:', dis) sleep(1) |
over~
~~~~~~后记
其实这个超声模块已经到手很久了,但是看到驱动要使用10us信号后,就一直纠结怎么来做10us的时钟,测试用python的sleep实现时钟,又特别不精确,那么,就需要100MHz的晶振,可晶振怎么接到树莓派上。。。于是就卡到这里了。
后来偶然搜到了类似模块的驱动方式,才发现其实是我想多了,要什么晶振,sleep足够了~~~嘿嘿,照着这种思路做下去,居然真的成功了
很多事情就是这样:先有一个大概的思路,没有更好地办法的情况下,就先照着这个思路走,大部分时候都能走的过去
——本文为原创,转载请注明出处 昆仑的山头