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