首先准备材料:esp32C3(我用的是合宙的)、超声波测距模块、舵机(SG90)、有源蜂鸣器、杜邦线若干、热熔胶枪
首先来说说超声波测距模块的使用原理和方法:
引脚连接:
名称 | pin脚 | 功能 |
GND | GND | 接地 |
VCC | VCC | 电源电压 |
Trig | 22 | 发送超声波(我接在IO1引脚) |
echo | 23 | 接收返回的超声波(我接在IO12引脚) |
接着上代码:
from machine import Pin
import time
trig=Pin(1,Pin.OUT,value=0)
echo=Pin(12,Pin.IN,value=0)
def measure():
#发出开始测距信号
trig.value(1)
time.sleep_us(10)
trig.value(0)
#定时器计时
while echo.value()==0:
t1 = time.ticks_us()
while echo.value()==1:
t2 = time.ticks_us()
t3 = time.ticks_diff(t2, t1) / 10000
return t3 * 170
try:
while True:
print("当前距离:%0.2f cm" % measure())
time.sleep(1)
except KeyboardInterrupt:
pass
解析一下代码:
trig是发射出超声波信号,echo是接收超声波信号。注意time.ticks_us()记录的是时刻,代码的原理是:首先将trig所在的引脚置高电平,向外发射超声波信号,若echo所在的引脚一直没有收到信号,那么ti计时器一直在记录时刻:第11微秒、第12微秒、第13微秒......当echo收到信号后,ti计时器记录下没有信号的最后一个时刻,比如是第15微秒,t2计时器开始记录时刻:第16微秒、第17微秒、第18微秒.......当echo不再接收信号时记录下最后一个时刻,比如第20微秒。t3=t2-t1即为超声波从发出到障碍物再从障碍物被反射回传感器所用的时间。由于声音在空中的传播速度为340米/秒,但超声波从发出到被接收这一过程计算了两次路程,所以为340/2=170