stm32超声波测距代码_超声波模块另类用法,悬浮,你也能做到
今天,給大家介紹一個(gè)
「超酷的DIY聲波懸浮」研究項(xiàng)目。
雖然超聲波懸浮,不能像磁懸浮那樣懸浮比較重的物品。不過(guò)能把小泡沫球、水滴或者螞蟻這樣的小物體懸浮起來(lái)也是很有意思的。
制作這樣一個(gè)簡(jiǎn)易的超聲波懸浮器并不需要多少成本,而且材料很容易獲得。你只需要:
- Arduino Nano/UNO
- HC-SR04超聲波測(cè)距模塊
- L293D步進(jìn)電機(jī)驅(qū)動(dòng)模塊
拆解超聲波測(cè)距模塊
常見的超聲波模塊一般有兩個(gè)柱狀頭。一個(gè)是發(fā)生器,一個(gè)是接收器。我們把它們拆下來(lái)。
這里特別提一點(diǎn),拆下來(lái)的柱頭里有圓形的網(wǎng)格,留一個(gè)備用。
連接電路
準(zhǔn)備好L298N型步進(jìn)驅(qū)動(dòng)板。 將四個(gè)輸入中的兩個(gè)連接到Arduino的端口A0和A1,然后連接GND和5V。輸出正負(fù)極接兩個(gè)發(fā)生器的正負(fù)極。
上傳代碼
將下面的代碼上傳到Arduino,Arduino在setup()階段執(zhí)行大部分工作。 首先,它將所有模擬端口設(shè)置為輸出。 然后,Timer1配置為觸發(fā)時(shí)鐘頻率為80kHz的比較中斷。 每個(gè)中斷只是反轉(zhuǎn)模擬端口的狀態(tài)。 將80kHz方波信號(hào)轉(zhuǎn)換為40kHz的全波循環(huán)。 loop()部分沒有任何操作。
byte TP = 0b10101010;
void setup() {
DDRC = 0b11111111;
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 200;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS10);
TIMSK1 |= (1 << OCIE1A);
interrupts();
}
ISR(TIMER1_COMPA_vect) {
PORTC = TP;
TP = ~TP;
}
void loop() {
}
尋找最優(yōu)距離
接下去是個(gè)體力活。我們需要不斷地調(diào)整兩個(gè)柱頭之間的距離來(lái)找到一個(gè)能讓小物品完美懸浮起來(lái)。 這里需要一些技巧和工具。
首先,這個(gè)距離必須完全正確,以產(chǎn)生具有足夠強(qiáng)的高氣壓和低氣壓區(qū)域的駐波。 我們可以使用以下公式估算距離,基于室溫下的聲速,343米/秒:
343,000毫米/秒/ 40,000赫茲= 8.575毫米
所以,這個(gè)距離應(yīng)該是8.575毫米的倍數(shù)。但是發(fā)射器屏幕之間的距離與聲波所包圍的區(qū)域不同,因此結(jié)果不會(huì)很正確,最終還是需要手動(dòng)微調(diào)的。
所以我們可以把柱頭距離調(diào)整到20毫米左右,然后不斷地調(diào)整。
這里我們需要制作一個(gè)小工具,如下圖,找一跟牙簽用膠水把它合成如圖這樣的小勺。
它會(huì)幫你把那些小的泡沫塑料球放在適當(dāng)?shù)奈恢?#xff0c;因?yàn)樗诼晫W(xué)上是透明的。 如果你試圖用手或鑷子,它們可能會(huì)干擾傳感器產(chǎn)生的波,使得超生波無(wú)法形成或者不穩(wěn)定。
調(diào)試
- 如果小泡沫球感覺馬上就能懸浮了,但突然又掉了,可以嘗試用再小一點(diǎn)的泡沫球。而且也不用特別圓的,實(shí)驗(yàn)發(fā)現(xiàn)越不規(guī)則的碎片似乎越容易懸浮
- 如果小物體能懸浮住,但不停地抖動(dòng)“跳舞”,可以嘗試降低電源電壓,或者串聯(lián)1N4007二極管,每個(gè)二極管可以降低0.7V。供電電壓建議在9V-11V之間,最方便當(dāng)然是用可調(diào)節(jié)的電源。
- 如果你成功將泡沫球懸浮了,可以嘗試懸浮不同的物體,還可以嘗試懸浮多個(gè)物體。
總結(jié)
以上是生活随笔為你收集整理的stm32超声波测距代码_超声波模块另类用法,悬浮,你也能做到的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu16版本安装截图软件Flam
- 下一篇: linux的exec函数