STM32__紅外避障模塊的使用

目錄

一、紅外避障模塊?概述

二、直接讀取OUT引腳電平

三、使用中斷方式觸發


一、紅外避障模塊?概述

引腳解釋:

VCC接3.3V?或 5.0V
GND接開發板的GND
OUT數字量輸出(0或1);?低電平時表示前方有障礙 ;?通過可調電阻調整檢測距離?

產品特點:

工作電壓推薦3.3V,?也可以5V
模塊功耗23mA~40mA
檢測距離<=30cm ;?通過可調電阻調整檢測距離?
指示燈電壓燈 +?障礙指示燈

模塊描述:

1、可以廣泛應用于機器人避障、避障小車、流水線計數、黑白線循跡 等眾多場合。

2、采用3.3V?或?5V 直流電源對模塊進行供電。當電源接通時,電源指示燈點亮;

3、該傳感器模塊對環境光線適應能力強,其具有一對紅外線發射與接收管,發射管發射出一定頻率的紅外線,當檢測方向遇到障礙物(反射面)時,紅外線反射回來被接收管接收,經過比較器電路處理之后,綠色指示燈會亮起,同時OUT端口持續輸出低電平信號(0);

4、檢測距離2~30cm,檢測角度35°; 檢測距離可以通過電位器進行調節,順時針調電位器,檢測距離增加;逆時針調電位器,檢測距離減少。

5、傳感器是主動紅外線反射探測, 因此目標的反射率和形狀是探測距離的關鍵。其中黑色探測距離最小, 白色最大; 小面積物體距離小,大面積距離大。

6、輸出端口OUT可直接與單片機IO口連接,使用代碼讀取OUT電平,或使用中斷觸發的方式;? 另外,?OUT引腳也可以直接驅動一個5V繼電器;

7、使用前,建議先用螺絲刀調節好需要的觸發距離 (綠燈亮),再接入單片機進行開發調試。

8、具有3mm的螺絲孔,便于固定、安裝;


二、程序直接讀取OUT引腳電平

OUT接口在閑時(沒有發現障礙物),是持續的高電平狀態;高電平的電壓值是供電電壓值;

當發現障礙物時,OUT接口將持續地輸出低電平,直到障礙物消失時再輸出高電平;

因此,我們可以在STM32工程中,直接用代碼讀取OUT接口的電平,即可知道是否遇到障礙物。

  • 這里以OUT接口,連接PC12引腳為示例;(哪個引腳都可以,只要是空閑的引腳即可)
  • PC12引腳工作模式,無需初始化、設置。因為讀電平,不管哪種模式狀態下都可以直接讀。

在main的while中,編寫以下代碼即可:

HAL_Delay(500);                                            // 延時間隔uint8_t state = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_12);      // 讀取OUT引腳電平; 只是讀引腳電平,用哪個引腳都可以,無需提前初始化
if (state == 0)                                            // 判斷 OUT 引腳是否是低電平(閑時高電平,遇到障礙物時持續輸出低電平)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);  // 點亮藍色LED; 引腳PB2, 低電平通路點亮;printf("發現障礙物!\r\n");                            // 打印提示信息; printf需要預先使能UART1,并重定向到UART1輸出
}
else
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);    // 熄滅藍色LED; 引腳PB2, 高電平斷路熄滅;
}

完成后,位置如下圖:

上面的代碼,當PC12為低電平時(遇到障礙物):亮燈、printf輸出提示信息;


三、使用中斷方式觸發

上面的讀取方式,操作簡單、容易理解。

但這種方式有一個潛在隱患:處理可能不及時。

如,當小車高速開跑中,遇到了障礙物,但程序卻正在運行其它功能的代碼, ......。

小車翻車沒啥事,但如果用在工業現場,如電機、導軌等,?那就嚴重了!

我們可以使用中斷觸發的方式,發現障礙物,立即進入執行處理!

下面,還是以OUT接口連接PC12作示例,示范CubeMX的中斷觸發配置、編寫回調函數代碼。

1、配置引腳的工作模式

  • 點擊需要使用的引腳,選擇:GPIO_EXTI,即 外部中斷模式

2、配置觸發方式

  • 根據OUT接口的工作特點,配置為: Interrupt? Falling ,即下降沿觸發中斷;
  • 設置為上拉,即?閑時引腳電平保持在高電平狀態;

3、使能中斷線

  • 在 NVIC 中斷控制器頁面中,打勾對應的中斷線,令中斷控制器能夠響應該中斷線,從而使芯片能夠接收并處理引腳的電平跳變事件。

引腳編號與中斷線對應的關系是:

GPIO_PIN_0EXTI_Line0
GPIO_PIN_1EXTI_Line
GPIO_PIN_2EXTI_Line
GPIO_PIN_3EXTI_Line
GPIO_PIN_4EXTI_Line
GPIO_PIN_5? ? 至? GPIO_PIN_9? ? 共用一個中斷線EXTI_Line[9:5]
GPIO_PIN_10? 至? GPIO_PIN_15??共用一個中斷線EXTI_LineEXTI_Line[15:10]

至此,引腳的中斷觸發,配置完成,重新生成。

4、編寫中斷回調函數

CubeMX配置上述中斷后,將自動生成底層的初始化、中斷服務函數等代碼。

當引腳發生了配置中的電平跳變時,將觸發硬件自動調用程序里的中斷服務函數,繼而調用程序里的EXTI中斷回調函數:HAL_GPIO_EXTI_Callback ( );

這個回調函數在CubeMX生成時,在stm32xx_hal_gpio.c中已生成了弱定義;

我們在適合的、喜歡的位置,自行重新編寫HAL_GPIO_EXTI_Callback函數,即能被中斷函數調用到。

我們在main.c的下方,/* USER CODE BEGIN 4 */之下,編寫此回調函數:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if (GPIO_Pin == GPIO_PIN_12)                               // 由PC12觸發{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);  // 點亮藍色LED; 引腳PB2, 低電平通路點亮;printf("發現障礙物!\r\n");                            // 打印提示信息; printf需要預先使能UART1,并重定向到UART1輸出}}

完成后,位置如下圖:

如上,即可實現遇到障礙物時,實時地執行處理。

這里的亮燈、printf,只是示范,你可以替換成需要的執行,如剎車、關閉設備電源等。

5、多次觸發的解決思路

當使用中斷觸發,可能會有一個使用上明顯的bug:連續多次觸發!

這個bug的產生,是OUT接口輸出低電平信號過程中的振鈴現象所導致的。

測試了三個不同店家的紅外避障模塊,有兩家模塊存在多次觸發現象。

物理解決方案:

????????在?OUT接口與GND間,并聯一個1uF左右的小電容(1uF只是建議,具體得根據現場而定);

代碼解決方案:

????????在中斷回調函數里,增加5ms延時,即HAL_Delay(10ms),讓程序刻意“錯過”振鈴導致的多次觸發。這種方式有點像按鍵的消抖處理。但是,不建議使用這種方式,因為在中斷里延時死等,有可能導致其它通信的中斷無法及時執行,數據丟包! 如果確定要使用這種方式(在中斷里使用HAL_Delay),? 注意會產生中斷嵌套沖突。需要在CubeMX里修改NVIC的Time base響應優先級,默認是15 (最低),把它修改為0 (最高),然后,把引腳中斷線的優先級,默認是0 (最高),修改為大于0的值,如1、6等。這樣處理后,在EXTI的中斷回調函數里才能使用HAL_Delay函數。

操作如下圖:


如有錯漏,望指正,將及時更新修改~~~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73196.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73196.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73196.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【AI大模型】DeepSeek + 通義萬相高效制作AI視頻實戰詳解

目錄 一、前言 二、AI視頻概述 2.1 什么是AI視頻 2.2 AI視頻核心特點 2.3 AI視頻應用場景 三、通義萬相介紹 3.1 通義萬相概述 3.1.1 什么是通義萬相 3.2 通義萬相核心特點 3.3 通義萬相技術特點 3.4 通義萬相應用場景 四、DeepSeek 通義萬相制作AI視頻流程 4.1 D…

帆軟第二題 - 多源報表

第二題&#xff0c;多源報表 實現功能&#xff1a; 多源報表&#xff1a;供應商與所在地區來源于表PRODUCER 明細來源于表PRODUCT 分組報表&#xff1a;按組顯示數據&#xff0c;每個供應商對應其產品明細 按組分頁&#xff1a;每個供應商一頁 表頭重復&#xff1a; 數據…

SVN忽略不必提交的文件夾和文件方法

最近有小伙伴在問&#xff1a;SVN在提交時如何忽略不必提交的文件夾和文件&#xff0c;如node_modules&#xff0c;.git&#xff0c;.idea等&#xff1f; 操作其實很簡單&#xff0c;下面直接上圖&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 最后一步&#xff1a; 第…

Uthana,AI 3D角色動畫生成平臺

Uthana是什么 Uthana 是專注于3D角色動畫生成的AI平臺。平臺基于簡單的文字描述、參考視頻或動作庫搜索&#xff0c;快速為用戶生成逼真的動畫&#xff0c;支持適配任何骨骼結構的模型。Uthana 提供風格遷移、API集成和定制模型訓練等功能&#xff0c;滿足不同用戶需求。平臺提…

六十天前端強化訓練之第二十九天之深入解析:從零構建企業級Vue項目的完整指南

歡迎來到編程星辰海的博客講解 看完可以給一個免費的三連嗎&#xff0c;謝謝大佬&#xff01; 目錄 一、Vite核心原理與開發優勢 二、項目創建深度解析 三、配置體系深度剖析 四、企業級項目架構設計 五、性能優化實戰 六、開發提效技巧 七、質量保障體系 八、擴展閱讀…

Ceph集群2025(Squid版)導出高可用NFS集群(上集)

#創建一個CephFS 文件系統 ceph fs volume create cephfs02#創建子卷 ceph fs subvolumegroup create cephfs02 myfsg2#查看子卷 ceph fs subvolumegroup ls cephfs02[{"name": "myfsg2"} ]創建 NFS Ganesha 集群 #例子 $ ceph nfs cluster create <c…

第2.3節 Android生成全量和增量報告

覆蓋率報告&#xff08;Coverage Report&#xff09;是一種軟件測試工具生成的報告&#xff0c;用于評估測試用例對代碼的覆蓋程度。它通過統計代碼中哪些部分已經被測試用例執行過&#xff0c;哪些部分還沒有被執行&#xff0c;來衡量測試的充分性。覆蓋率報告通常包括以下幾種…

奇跡科技:藍牙網關賦能少兒籃球教育的創新融合案例研究

一、引言 本文研究了福建奇跡運動體育科技有限公司&#xff08;簡稱‘奇跡科技’&#xff09;如何利用其創新產品體系和桂花網藍牙網關M1500&#xff0c;與少兒籃球教育實現深度融合。重點分析其在提升教學效果、保障訓練安全、優化個性化教學等方面的實踐與成效&#xff0c;為…

高考志愿填報管理系統基于Spring Boot SSM

目錄 摘要 ?一、系統需求分析?&#xff1a; 1.1用戶主體分析 1.2 功能需求分析 1.3、非功能需求分析 二、?技術實現?&#xff1a; ?三、結論?&#xff1a; 摘要 該系統主要實現了&#xff1a;學生信息管理、院校信息查詢、專業信息展示、志愿填報模擬、智能推薦管…

網絡HTTPS協議

Https HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是 HTTP 協議的加密版本&#xff0c;它使用 SSL/TLS 協議來加密客戶端和服務器之間的通信。具體來說&#xff1a; ? 加密通信&#xff1a;在用戶請求訪問一個 HTTPS 網站時&#xff0c;客戶端&#x…

LintCode第1712題 - 和相同的二元子數組

描述 在由若干 0 和 1 組成的數組 A 中&#xff0c;有多少個和為 S 的非空子數組 樣例 1: 輸入&#xff1a;A [1,0,1,0,1], S 2 輸出&#xff1a;4 解釋&#xff1a; 如下面黑體所示&#xff0c;有 4 個滿足題目要求的子數組&#xff1a; [1,0,1] [1,0,1] [1,0,1,0] [0,1,…

【MySQL筆記】庫操作與表操作

&#x1f525;個人主頁&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收錄專欄&#x1f308;&#xff1a;MySQL &#x1f339;往期回顧&#x1f339;&#xff1a;【MySQL】認識MySQL &#x1f516;流水不爭&#xff0c;爭的是滔滔不 一、庫操作1.1 顯示數據庫1.2 創建數據庫…

SpringBoot3實戰(SpringBoot3+Vue3基本增刪改查、前后端通信交互、配置后端跨域請求、數據批量刪除(超詳細))(3)

目錄 一、從0快速搭建SpringBoot3工程、SpringBoot3集成MyBatis、PageHelper分頁查詢的詳細教程。(博客鏈接) 二、實現前端與后端通信對接數據。(axios工具) &#xff08;1&#xff09;安裝axios。(vue工程目錄) &#xff08;2&#xff09;封裝請求工具類。(request.js) <1&…

單播、廣播、組播和任播

文章目錄 一、單播二、廣播三、組播四、任播代碼示例&#xff1a; 五、各種播的比較 一、單播 單播&#xff08;Unicast&#xff09;是一種網絡通信方式&#xff0c;它指的是在網絡中從一個源節點到一個單一目標節點對的傳輸模式。單播傳輸時&#xff0c;數據包從發送端直接發…

【實戰】deepseek數據分類用戶評論數據

在平時的工作中&#xff0c;我們會遇到數據分類的情況&#xff0c;比如將一些文本劃分為各個標簽。如果人工分類這塊的工作量將是非常大&#xff0c;而且分類數據的準確性也不高。我們需要用到一些工具來實現。提高效率的同時也提高準確率。 1.示例數據 用戶ID 時間戳 評論場…

技術視角解讀:游戲出海如何借助AWS全球架構突破性能與合規瓶頸

【場景痛點】 某二次元卡牌手游團隊在東南亞市場遭遇聯機延遲投訴率高達37%&#xff0c;日本地區因數據合規問題面臨下架風險。在傳統IDC架構下&#xff0c;運維團隊需要同時管理3個區域的物理服務器&#xff0c;版本更新耗時長達6小時。 【技術架構升級】 通過AWS Local Zones…

【JavaEE】網絡編程socket

1.????前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 親愛的朋友們&#x1f44b;&#x1f44b;&#xff0c;這里是E綿綿呀????。 如果你喜歡這篇文章&#xff0c;請別吝嗇你的點贊????和收藏&#x1f4d6;&#x1f4d6;。如果你對我的…

第16屆藍橋杯單片機4T模擬賽三

本次模擬賽涉及的模塊&#xff1a;基礎三件套&#xff08;Led&Relay&#xff0c;按鍵、數碼管&#xff09; 進階單件套&#xff08;pcf8591的AD模塊&#xff09; 附件&#xff1a; 各模塊底層代碼在文章的結尾 一、數碼管部分 1.頁面1 頁面1要顯示的格式是&#xff1a; …

網絡華為HCIA+HCIP IPv6

目錄 IPv4現狀 IPv6基本報頭 IPv6擴展報頭 IPv6地址 IPv6地址縮寫規范 ?編輯 IPv6地址分配 IPv6單播地址分配 IPv6單播地址接口標識 IPv6常見單播地址 - GUA &#xff08;2 / 3 開頭&#xff09; IPv6常見單播地址 - ULA IPv6常見單播地址 - LLA IPv6組播地…

基于YOLOv8深度學習的智能小麥害蟲檢測識別系統

作者簡介&#xff1a;Java領域優質創作者、CSDN博客專家 、CSDN內容合伙人、掘金特邀作者、阿里云博客專家、51CTO特邀作者、多年架構師設計經驗、多年校企合作經驗&#xff0c;被多個學校常年聘為校外企業導師&#xff0c;指導學生畢業設計并參與學生畢業答辯指導&#xff0c;…