超聲波測距模塊(樹莓派)

来源:https://www.cnblogs.com/learn-program/archive/2018/08/23/9523940.html
-Advertisement-
Play Games

首先來看一下這個測距模塊長什麼樣子: 就是HC-SR04模塊。 這個模塊有四個引腳,分別是Vcc(高電平),GND(低電平),Trig(觸發測距)以及Echo(返回測距結果)。 那麼這個模塊怎麼使用呢,資料上的說明是這樣的: 首先給出時序圖: 從上面的步驟可以看出,我們只需要測量Echo腳為高電平的 ...


 首先來看一下這個測距模塊長什麼樣子:

就是HC-SR04模塊。


 

這個模塊有四個引腳,分別是Vcc(高電平),GND(低電平),Trig(觸發測距)以及Echo(返回測距結果)。

那麼這個模塊怎麼使用呢,資料上的說明是這樣的:

首先給出時序圖:

  1. 在Vcc和GND的電平都正確的時候,如果想要讓模塊開始測距,需要給Trig腳一個不小於10us的高電平脈衝。
  2. 發出這個脈衝之後,模塊會自動將Echo腳設置為高電平,並且模塊會在這個時候發出超聲波脈衝(圖上說明是8個連續的脈衝,這個脈衝數字我們不用管,反正就是發出了脈衝)。
  3. 當超聲波遇到障礙物反彈回來之後,會被模塊接受到。接收到之後Echo腳會自動變成低電平,從而完成一次測距。

 從上面的步驟可以看出,我們只需要測量Echo腳為高電平的時間,然後乘上聲速/2就可以了(除2是因為超聲波來回了一趟,路程為距離的兩倍)

我們是在空氣中測速的,聲波為340m/s。

根據上面的過程,可以寫出代碼如下:

 1 import RPi.GPIO as GPIO
 2 import time
 3 
 4 Vcc_Pin=33
 5 Echo_Pin=37
 6 Trig_Pin=35
 7 
 8 def initDist():
 9     GPIO.setup(Vcc_Pin,GPIO.OUT,initial=GPIO.HIGH)
10     GPIO.setup(Trig_Pin,GPIO.OUT,initial=GPIO.LOW)
11     GPIO.setup(Echo_Pin,GPIO.IN)
12 
13 def _getDist():
14     time.sleep(0.1)
15     GPIO.output(Trig_Pin,GPIO.HIGH)
16     time.sleep(0.00002)  #這裡延時了20us,只要大於10us即可
17     GPIO.output(Trig_Pin,GPIO.LOW)
18     while GPIO.input(Echo_Pin)==GPIO.LOW:  #等待Echo腳為高電平
19         pass
20     #print("echo gpio is high")
21     t=time.time()    #開始計數
22     while GPIO.input(Echo_Pin)==GPIO.HIGH:  #等待Echo腳為低電平
23         pass
24     #print("echo gpio is low")
25     t=time.time()-t  #計數停止
26     #print(t,"s passed")
27     if t<=0:
28         print("Can't get distance")
29         return -1
30     return t*340/2  #返回距離(m為單位)
31 
32 def getDist():
33     dist=[]
34     print("measuring")
35     for i in range(0,5):
36         temp=_getDist()
37         if not temp==-1:
38             dist.append(temp)
39     sum=0
40     for i in dist:
41         sum+=i
42     return sum/len(dist)
43 
44 if __name__=='__main__':
45     GPIO.setmode(GPIO.BOARD)
46     initDist()
47     str="you can input q to quit,or press other key to get a distance"
48     r=input(str)
49     try:
50         while not r =='q':
51             print(getDist()*100,"cm")
52             time.sleep(1)  #延時1s
53             r=input(str)
54     except KeyboardInterrupt:
55         pass
56     GPIO.cleanup()

 8~11行的initDist()函數初始化模塊的引腳

13~30行_getDist()函數進行一次測距(其實這裡已經獲得了一次測量的距離了,但是為了防止數據偏差較大,後面還使用了getDist()函數取了平均值)

32~42行進行4次測距,並取平均值

44~56行main入口,當用戶輸入不為q的時候測距。測出的結果轉化為cm。

 這裡14和52行的延時是為了模塊能夠反映過來。因為我在測試的時候發現不延時的話程式容易卡住。


具體的結果在這裡:

結果

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 有一天我編譯內核模塊驅動的時候發現如下錯誤 Linux kernel版本:4.1.15 代碼如下: 當我做這樣的修改後: 編譯就不報錯了 這樣讓我很是奇怪,接下來咱們跟入代碼一看究竟 首先我們看下__ATTR的實現: 繼續跟入,我們發現如下的演算法,顯而易見,此版本的內核對許可權做了一個小小的演算法,如下 ...
  • 1、信息安全運維服務 信息安全運維服務是一種信息安全保障服務,面向信息系統使用單位,從客戶IT技術部門的角度出發。是一種外包托管服務。 信息安全運維服務目的是提高用戶網路運行質量、提升網路支撐能力、提高網路管理、安全管理水平、保證業務及網路的穩定和持續運行。 信息安全運維服務包含安全設備運維、網路設 ...
  • 原文地址:http://ilikedo.iteye.com/blog/1554822 linux下安裝Oracle 一般都會修改/etc/security/limits.conf這個文件,但是這裡面的具體含義未必每個人都會,剛開始我也不是很清除,只知道要修改,每次安裝按照文檔配置就可以了。今天看到一 ...
  • 如果我們使用**war** 包進行部署項目的時候,需要把包放進Tomcat的目錄下,為了使我們的服務能夠在伺服器重啟的時候自動啟動起來,我們需要把Tomcat設置成自起服務。## 配置 Tomcat 服務新建服務腳本```[root@localhost ~]# vim /etc/init.d/tom... ...
  • 這裡使用樹莓派來操作sg90的舵機。先看一下這個舵機的樣子: 這就是傳說中的SG90舵機啦,轉角是0~180. SG90舵機接線: SG90舵機有三條線:黃線,紅線和灰(還是黑?)線。 這三條線的作用是:紅線VCC,灰線GND,黃線控制線。所以我們這裡主要是操控黃線來控制舵機。 然後這裡有個非常非常 ...
  • 一、通過命令行查找埠被誰占用 1、window+R組合鍵,調出命令視窗 2、輸入命令:netstat -ano,列出所有埠的情況。在列表中我們觀察被占用的埠 3、查看被占用埠對應的PID,輸入命令:netstat -aon | findstr 9090,回車,記錄最後一位數字,即PID,這裡 ...
  • 1、環境 VMware 14.1.1 虛擬系統:Windows Server 2008 32位 2、解決辦法 打開虛擬網路編輯器 有紅框中的提示出現時,就點擊更改設置 點擊橋接模式,在VMnet信息中選擇橋接到的網卡,選擇主機當前連接到網路使用的網卡即可 ...
  • 1.ls [選項] [目錄名 | 列出相關目錄下的所有目錄和文件 -a 列出包括.a開頭的隱藏文件的所有文件 -A 通-a,但不列出"."和".." -l 列出文件的詳細信息 -c 根據ctime排序顯示 -t 根據文件修改時間排序 color[=WHEN] 用色彩辨別文件類型 WHEN 可以是'n ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...