超聲波傳感器傳感器應(yīng)該是‘少兒編程’中最喜歡的一個(gè)模塊膨报,大概是因?yàn)殚L(zhǎng)相呆萌静浴,經(jīng)逞呙ィ看到一些樂(lè)高機(jī)器人不管用到用不到這個(gè)模塊,都安裝上一個(gè)苹享,就感覺(jué)氣勢(shì)不一樣了双絮。
超聲波傳感器傳感器測(cè)量距離的物理原理并不算復(fù)雜,就是利用聲速的340m/s和接受信號(hào)的時(shí)間得问,在用上我們小學(xué)就會(huì)的速度公式v = s/t囤攀,就可以求解出距離s,少兒編程中的使用超聲波模塊完全不用考慮原理性的問(wèn)題宫纬,直接讀取超聲波傳感器與障礙物的距離焚挠。
現(xiàn)在市面上的學(xué)習(xí)類的單片機(jī),Arduino漓骚、樹(shù)莓派蝌衔、microbit等,已經(jīng)對(duì)硬件底層做了封裝蝌蹂,軟件層面就給留點(diǎn)操作空間吧噩斟,青少年學(xué)習(xí)編程,更多學(xué)習(xí)的是程序的數(shù)據(jù)結(jié)構(gòu)孤个,設(shè)計(jì)模式剃允,數(shù)學(xué)應(yīng)用,多數(shù)的圖形化編程只是提取了編程中的邏輯部分齐鲤,而這一部分我們?cè)谌粘5纳顚W(xué)習(xí)中接觸的并不少斥废,沒(méi)有必要刻意練習(xí),并且在中學(xué)數(shù)學(xué)中的 ‘程序框圖’ 本身就是圖形化編程佳遂。
樂(lè)高超聲波傳感器價(jià)格也是非常感人营袜!
我們來(lái)看一下常見(jiàn)的超聲波傳感器的價(jià)格!你品丑罪,你細(xì)品荚板!
我們來(lái)正式介紹一下超聲波傳感器凤壁,下面內(nèi)容基于Arduino,適合非IT從業(yè)人員跪另。
超聲波傳感器
初識(shí)HC-SR04超聲波測(cè)距模塊
超聲波測(cè)距模塊其實(shí)有很多種拧抖,其中HC-SR04是我們較為常見(jiàn)的一種型號(hào),在這里我們使用HC-SR04超聲波測(cè)距模塊來(lái)實(shí)現(xiàn)我們的測(cè)距功能免绿。HC-SR04支持2cm-400cm之間的非接觸式距離測(cè)量功能唧席,測(cè)量精度可以到達(dá)3mm!該模塊集成了超聲波發(fā)射器嘲驾、接收器和其他控制電路等淌哟。
模塊驅(qū)動(dòng)方法:
向TRIG口輸出至少持續(xù)10us的高電平信號(hào),在這之后模塊內(nèi)部控制電路將自動(dòng)發(fā)送8個(gè)40khz的方波辽故,并自動(dòng)檢測(cè)是否有信號(hào)返回徒仓,若有信號(hào)返回,模塊ECHO將會(huì)輸出一個(gè)高電平誊垢,****持續(xù)時(shí)間就是超聲波從發(fā)射到返回的時(shí)間掉弛。
下圖為HC-SR04超聲波模塊的時(shí)序圖:**
詳細(xì)參數(shù):
使用電壓:5V
感應(yīng)角度:不大于15度
探測(cè)距離:2cm-450cm
精度:3mm
引腳:VCC接電源正極,GND接地喂走,Trig和Echo接控制引腳殃饿。
用到的函數(shù)介紹:
pulseIn()函數(shù):
pulseIn()函數(shù)用來(lái)讀取一個(gè)引腳的脈沖(HIGH或LOW)。
例如:如果value是HIGH芋肠,pulseIn()會(huì)等待引腳變?yōu)镠IGH乎芳,開(kāi)始計(jì)時(shí),再等待引腳變?yōu)長(zhǎng)OW并停止計(jì)時(shí)业栅。
返回脈沖的長(zhǎng)度秒咐,單位毫秒。
如果在指定的時(shí)間內(nèi)無(wú)脈沖函數(shù)返回碘裕。計(jì)時(shí)范圍從10微秒至3分鐘携取。
(1秒=1000毫秒=1000000微秒)
語(yǔ)法:pulseIn(pin, value) pulseIn(pin, value, timeout)
參數(shù):
pin:你要進(jìn)行脈沖計(jì)時(shí)的引腳號(hào)(int)。
value:要讀取的脈沖類型帮孔,HIGH或LOW(int)雷滋。
timeout (可選****):指定脈沖計(jì)數(shù)的等待時(shí)間,單位為微秒文兢,默認(rèn)值是1秒(unsigned long)?
?
關(guān)于赫茲:
這里我們要明白超聲波傳感器的測(cè)距原理晤斩,其實(shí)就是v = s/t,pulseIn(Echo,HIGH)其實(shí)就是Echo成為高電平的持續(xù)時(shí)間姆坚,單片機(jī)的晶振頻率約為14MHZ澳泵,(1兆赫相當(dāng)于1000千赫(KHz) ),這里有一個(gè)赫茲的單位兼呵,我們必須知道什么是赫茲兔辅,就要知道什么是頻率腊敲。
頻率是單位時(shí)間內(nèi)完成周期性變化的次數(shù),是描述周期運(yùn)動(dòng)頻繁程度的量维苔,常用符號(hào)f或ν表示碰辅,單位為秒分之一。為了紀(jì)念德國(guó)物理學(xué)家赫茲的貢獻(xiàn)介时,人們把頻率的單位命名為赫茲没宾,簡(jiǎn)稱“赫”,符號(hào)為Hz沸柔。常用的頻率單位還有千赫(KHz)循衰、兆赫(MHz)、吉赫(GHz)等勉失,每個(gè)物體都有由它本身性質(zhì)決定的與振幅無(wú)關(guān)的頻率羹蚣,叫做固有頻率。
f=1/T
我們不難看出數(shù)值越大乱凿,在1秒內(nèi)完成周期次數(shù)就越多。
而把信號(hào)波形變化一次所需的時(shí)間稱作“周期”,用T表示,以秒為單位咽弦。波行進(jìn)一個(gè)周期所經(jīng)過(guò)的距離稱為“波長(zhǎng)”,用λ表示,以米為單位徒蟆。f(頻率)、T(周期)和λ(波長(zhǎng))存在如下關(guān)系:
c=λ×f
c是電磁波的傳播速度,等于3x10^8米/秒型型。
如何求解距離:
pulseIn()單位為微秒段审,聲速340m/s,單片機(jī)的晶振頻率約為14MHZ闹蒜,所以
Distance = 340100 pulseIn() / 2 / (1000000 -14000 )寺枉,化簡(jiǎn)為
pulseIn()/[(1000000-14000)2/(340100)]
等于pulseIn()/58.0
解釋一下,340*100是把單位換算成cm绷落,pulseIn() / 2是因?yàn)檫@個(gè)來(lái)回的時(shí)間姥闪,單位是毫秒,所以除以1000000砌烁,是毫秒換算成秒的單位筐喳,減去的14000是單片機(jī)的振頻。
程序測(cè)試:
// 超聲波控制引腳
int Trig = 2;
int Echo = 4;
// 超聲波檢測(cè)距離
float check_distance()
{
digitalWrite(Trig,LOW);
delayMicroseconds(2);
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
float distance = pulseIn(Echo,HIGH)/58.00;
delay(10);
return distance;
}
void setup()
{
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
Serial.begin(9600);
}
void loop()
{
Serial.println(check_distance());
delay(500);
}