STM32 HAL庫快速實戰【八】《聲音傳感器的使用》--基於黑龍江科技大學機電工業機器人實訓


系列目錄

點擊查看

前言

本章介紹聲音傳感器的簡單使用,和其他系列關聯性較低。前置章節需要《藍牙控制》,至少需要《串口的簡單實用》

模塊介紹與使用

介紹

image
1.可以檢測周圍環境的聲音強度,使用注意:此傳感器只能識別聲音的有無(根據震動原理)不能識別聲音的大小或者特定頻率的聲音
2 .靈敏度可調(圖中藍色數字電位器調節)
3.工作電壓3.3V-5V
4.輸出形式數字開關量輸出(0和1高低電平)

使用

1.聲音模塊對環境聲音強度最敏感,一般用來檢測周圍環境的聲音強度。
2.模塊在環境聲音強度達不到設定閾值時,OUT口輸出高電平,當外界環境聲音強度超過設定閾值時,OUT口輸出低電平
3.模塊數字量輸出OUT可以與單片機直接相連,通過單片機來檢測高低電平,由此來檢測環境的聲音

調節

1.將模塊電源接到最小版上,電源指示燈亮。
2.找到一個相對安靜的環境,此時開關指示亮。如果不亮,可以調節數位器改變閾值,直至開關指示燈亮。
3.制造出一定的聲音,此時開關指示燈滅。如果不滅或者一直閃爍,以調節數位器改變閾值,直至沒有聲音時開關指示燈常亮,有聲音時開關指示燈常滅。
調節完畢后,將OUT與SD6端口相連。

CUBEMX配置

復制上一節的工程繼續配置。
image
可以看到SD6與PA7相連接。
配置PA7為輸入模式
image
打上標簽方便使用
image

編寫代碼

首先新建sensor.c和sensor.h用來存放傳感器相關代碼。注意加入工程中。
通過HAL_GPIO_ReadPin(sound_GPIO_Port,sound_Pin)來讀取OUT的值。
實際上每次使用該函數讀取電平較為麻煩,我們可以直接宏定義一個值到該函數上,這樣只需要判斷該值即可。
在.h文件中加入#define sound_vol HAL_GPIO_ReadPin(sound_GPIO_Port,sound_Pin)
在本節中,我們需要獲取聲音傳感器的狀態並作出相關操作
在.h中聲明sound_task()函數,並在.c中定義

@sensor.h
#define sound_vol HAL_GPIO_ReadPin(sound_GPIO_Port,sound_Pin)
void sound_task(void);
@sensor.c
#include "sensor.h"
/**
 * @brief  :獲取聲音傳感器的值,並執行對應操作
 * @param  :None
 * @retval None
 **/
 void sound_task(void)
 {}

由於聲音是連續的,並且很多時間存在抖動,只判斷一次容易誤判,所以可以使用軟件消抖處理,當兩次電平都為低時才認為有聲音。

void sound_task(void)
 {
	 if(!sound_vol){
		 HAL_Delay(10);//消抖
		 if(!sound_vol)
		 {	//放入需要執行的代碼

執行的代碼可以根據需求設計,這里放一個簡單的報警功能,發送消息給藍牙

 void sound_task(void)
{
	 if(!sound_vol){
		 HAL_Delay(10);//消抖
		 if(!sound_vol)
		 {	//放入需要執行的代碼
			usart_send_str(&huart3,(unsigned char *)"Warning,is ringing\r\n");
			}
		 }
	 return;
 }

注意usart_send_strmotor.h中聲明,因此在.文件頭部include下

#include "sensor.h"
#include "motor.h"

然后在在合適的地方引用sound_task(),一般需要一直循環執行。注意到main中使用了input=get_cmd();等待命令,在get_cmd()中使用了while(HAL_UART_Receive_IT(&huart3, &ch, 1)!=HAL_OK)循環等待命令。
也就是說,實際上將任務放到main中的while(1)中並不會實時執行,這里直接放到get_cmd()中。

char get_cmd(void)
{
  uint8_t ch =0;
	//HAL_UART_Receive(&huart1, &ch, 1, 0xffff);//輪詢阻塞方式
	while(HAL_UART_Receive_IT(&huart3, &ch, 1)!=HAL_OK)
	{sound_task();};
  return ch;
}

同樣也需要在motor.c中#include "sensor.h"
實際上放到這里不是最好的,使用中斷回調函數,在PA7觸發下降沿時執行最省資源。
編譯后燒錄。
當聲音傳感器接收到聲音后,藍牙APP會收到對應報警信息。
image

工程源碼

國內用戶請使用gitee克隆或是使用代理訪問Github
https://github.com/USTHzhanglu/stm32-hal/tree/main/sound


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM