摘要:超聲波傳感器,英文,既可以發(fā)射超聲波,也可以接收超聲波,它有一個(gè)重要作用,可以提前探測(cè)到附近的物體,而且通過(guò)聲波速度,能夠推算出附近物體離傳感器的大概距離。
超聲波傳感器,英文ultrasonic sensor,既可以發(fā)射超聲波,也可以接收超聲波,它有一個(gè)重要作用,可以提前探測(cè)到附近的物體,而且通過(guò)聲波速度,能夠推算出附近物體離傳感器的大概距離。
HC-SR04是一種非常流行的、很便宜的超聲波傳感器,非常適合進(jìn)行嵌入式編程的技術(shù)試驗(yàn),它是智能避障小車的一個(gè)關(guān)鍵部件,可以提前發(fā)現(xiàn)小車前方的障礙物,相應(yīng)做出轉(zhuǎn)彎或后退的動(dòng)作。
HC-SR04長(zhǎng)的模樣見(jiàn)下圖,它的工作電壓為5V,據(jù)說(shuō)HC-SR04P或HC-SR04+新型號(hào)可以工作在3V電壓下。
現(xiàn)在我們的任務(wù)是把它接入樹(shù)莓派Pico里,來(lái)感知位于它前方物體的距離。
先觀察它的針腳,只有4個(gè),左邊是Vcc,接5V正極,右側(cè) GND接地。我手里的HC-SR04是5V版本的,Vcc接Pico的VBUS即可。
現(xiàn)在還剩下2個(gè)針腳,Trig和Echo。
Trig負(fù)責(zé)控制是否發(fā)射超聲波,如果給它高電位,則發(fā)射;如果低電位,則停止發(fā)射。這里,我們要把它接到Pico的一個(gè)GPIO引腳,讓Pico控制它,我把它直接連接到GP18引腳。
Echo的連接稍微復(fù)雜一點(diǎn),Echo的英文意思是“回聲”,意思是接收超聲波信號(hào)。如果接收到超聲波,則高電位;如果沒(méi)收到,則為低電位。
重要提醒:
我的HC-SR04的工作電壓為5V,那么echo針腳的電位也相應(yīng)是5V,而Pico的工作電壓為3.3V,如果直接把echo的輸出信號(hào)連接到GPIO引腳上,會(huì)超過(guò)Pico的工作電壓,有損壞Pico的可能性,所以需要做降壓處理。
網(wǎng)上有些教程沒(méi)有說(shuō)明這個(gè)問(wèn)題,把echo輸出直接連到GPIO引腳上,比如這篇文章。
一種解決方案是加入3.3V-5.5V電平轉(zhuǎn)換器,一個(gè)非常便宜的小元件,比如這篇文章。
還有一種解決方案,只需要增加2個(gè)電阻,再加上清晰的頭腦和認(rèn)真的連線即可,我參考了這篇文章的說(shuō)明。
用到高中物理知識(shí),得到電阻的計(jì)算公式。我們這里的Vin=5,Vout=3.3,所以R1/R2 = 0.515,如果R1選1000歐,那么R2約為2000歐。
所以,從Echo串上一個(gè)1000Ω的電阻,接到GP26引腳,再串一個(gè)2000Ω的電阻接地,就可以有效保護(hù)Pico的引腳。最后的邏輯連線圖:
實(shí)際連接圖(電阻絲非常細(xì),又比較長(zhǎng),拍攝角度不容易看清楚連接關(guān)系):
看懂代碼,需要了解一下超聲波測(cè)距的基本原理。傳感器的T端(Transmitter)發(fā)出超聲波,遇到障礙物之后,超聲波返回,被傳感器的R端(Receiver)接收到,根據(jù)時(shí)間差和聲音的速度,可以求出距離。
HC-SR04就是這樣工作的:
1)Trigger收到一個(gè)長(zhǎng)達(dá)10us的方波后,開(kāi)始發(fā)出超聲波
2)傳感器內(nèi)部發(fā)出8組40KHz的方波,然后接收回聲
3)方波發(fā)送完成后,ECHO變?yōu)楦唠娢?,收到回聲的時(shí)候,ECHO為低電位
下面這段代碼,一開(kāi)始的2us是把電位置零,再產(chǎn)生10us的方波。
trigger.low()utime.sleep_us(2)trigger.high()utime.sleep_us(10)trigger.low()
然后把ECHO處于高電位的時(shí)間段計(jì)算出來(lái),乘以聲音的速度,由于超聲波跑了雙程,所以還要除以2,最后求出距離,這里的單位是厘米。
while echo.value() == 0: start = utime.ticks_us()while echo.value() == 1: end = utime.ticks_us()d = (end - start) * 0.0343 / 2
最后的所有源代碼:
from machine import Pinimport utime# 超聲波測(cè)距,單位:厘米def getDistance(trigger, echo): # 產(chǎn)生10us的方波 trigger.low() utime.sleep_us(2) trigger.high() utime.sleep_us(10) trigger.low() while echo.value() == 0: start = utime.ticks_us() while echo.value() == 1: end = utime.ticks_us() d = (end - start) * 0.0343 / 2 return d# 主程序trigger = Pin(18, Pin.OUT)echo = Pin(26, Pin.IN)while True: distance = getDistance(trigger, echo) print("距離:{:.2f} cm".format(distance)) utime.sleep(1)
看HC-SR04的規(guī)格說(shuō)明書(shū),它能判斷出傳感器前方15度范圍內(nèi)的2厘米~5米距離的障礙物,分辨率達(dá)3毫米。
這里的計(jì)算距離的函數(shù)已經(jīng)非常簡(jiǎn)化,有時(shí)會(huì)不太準(zhǔn)確,可以多取幾次求平均,另外,如果你對(duì)距離精度有更高的要求,那就要換其它的傳感器了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/122388.html
基于STM32f103c8t6和L292N驅(qū)動(dòng)設(shè)計(jì)避障小車(核心函數(shù)的建立為自己所寫(xiě)) 一.項(xiàng)目感觸 完成這個(gè)項(xiàng)目自己一開(kāi)始也是無(wú)法從本身上出發(fā),看著這個(gè)最小系統(tǒng)板和這個(gè)電機(jī)驅(qū)動(dòng)模塊上面想著怎樣實(shí)現(xiàn)讓這兩塊板子實(shí)現(xiàn)四個(gè)電機(jī)上面轉(zhuǎn)動(dòng)呢,還要加入避障模塊,自己一開(kāi)始一頭霧水,于是開(kāi)始了漫長(zhǎng)的借鑒之路,首先作為一個(gè)開(kāi)發(fā)者,我覺(jué)得學(xué)習(xí)的地方首選是B站,所以我找了相關(guān)的做智能小車的視頻 首先是B站智能小車教...
摘要:在我已經(jīng)制作完成一輛可以運(yùn)行的遙控車時(shí),公司發(fā)布了一個(gè)自駕車項(xiàng)目,來(lái)展示自動(dòng)駕駛汽車的工作原理。需要注意的是,這里用的都是語(yǔ)言而非,其主要原因有兩個(gè)一方面,近來(lái)似乎已成為運(yùn)用機(jī)器學(xué)習(xí)技術(shù)時(shí)實(shí)際使用的語(yǔ)言。 最近,Mapbox 的 Android 工程師 Antonio 使用計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)技術(shù),為他的女兒 Violeta 重新制作了一臺(tái)遙控車。接下來(lái)我們看看 Antonio 是如何...
摘要:所以我必須基于自己現(xiàn)在的情況走出一條適合自己情況的成長(zhǎng)路線。下位機(jī)上位機(jī)的思想下位機(jī)上位機(jī)這就是我自己探索出來(lái)的技術(shù)成長(zhǎng)路線。對(duì)和嵌入式的朋友感興趣的朋友可以試一下我這條學(xué)習(xí)路線 ...
閱讀 1986·2021-11-25 09:43
閱讀 3761·2021-11-24 10:32
閱讀 1264·2021-10-13 09:39
閱讀 2447·2021-09-10 11:24
閱讀 3422·2021-07-25 21:37
閱讀 3544·2019-08-30 15:56
閱讀 929·2019-08-30 15:44
閱讀 1515·2019-08-30 13:18