文章目錄
- 前言
- 一、學(xué)習(xí)目的
- 二、模塊介紹
- 三、代碼記錄
前言
今天記錄的是聲音傳感器模塊的學(xué)習(xí)
一、學(xué)習(xí)目的
? ? ? ?我的學(xué)習(xí)目的是學(xué)會(huì)使用聲音傳感器模塊,并通過(guò)檢測(cè)聲音的有無(wú)控制LED的亮滅。我使用的是STM32F103C8T6核心板上的自帶LED,引腳是PC13。
二、模塊介紹
? ? ? ?我用的是上圖所示的聲音傳感器,它只能通過(guò)震動(dòng)判斷聲音的有無(wú),而不能判斷聲音的大小和內(nèi)容等。它和一般的傳感器一樣擁有四個(gè)引腳(AO,DO,GND,VCC)。
? ? ? ? AO:模擬量輸出,實(shí)時(shí)輸出麥克風(fēng)的電壓信號(hào)。DO:當(dāng)聲音強(qiáng)度到達(dá)某個(gè)閾值時(shí),輸出高低電平信號(hào)[閾值靈敏度可以通過(guò)電位器調(diào)節(jié)]。
? ? ? ? 我們不需要太高精度的聲音檢測(cè),只需要檢測(cè)聲音強(qiáng)度夠大就可以實(shí)現(xiàn)聲控?zé)舻男Ч?,所以我們只需要一個(gè)DO口就可以。
接線方面:GND--GND,VCC--5V,DO--PA11(可以自己更改引腳)
三、代碼記錄
voice.h? (聲音傳感器的初始化)
#ifndef __VOICE_H
#define __VOICE_H
void VoiceSensor_Init(void);
uint8_t VoiceSensor_Get(void);
#endif
voice,c? ?
當(dāng)聲音達(dá)到某個(gè)閾值,DO口輸出高電平,對(duì)應(yīng)的PA11口將呈現(xiàn)高電平狀態(tài),通過(guò)GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11) 這個(gè)函數(shù)讀取PA11的電平狀態(tài),從而控制LED。
#include "stm32f10x.h"
void VoiceSensor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
//使能PA11口
uint8_t VoiceSensor_Get(void) //讀取PA11口的電平
{
return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11);
}
bled.h? ?(由DO口的高低電平檢測(cè)控制LED的亮滅)
#ifndef __BLED_H
#define __BLED_H
void BLED_Init(void);
void BLED1_ON(void);
void BLED1_OFF(void);
void BLED1_Turn(void);
#endif
bled.c
#include "stm32f10x.h"
#include "Delay.h"
void BLED_Init(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
}
void BLED1_ON(void){
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
void BLED1_OFF(void){
GPIO_SetBits(GPIOC,GPIO_Pin_13);
}
void BLED1_Turn(void){
if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13)==0){
GPIO_SetBits(GPIOC,GPIO_Pin_13);
}else{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
}
main.c文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-578599.html
通過(guò)讀取PA11口的電平,判斷是否有聲音(有聲音時(shí)為高電平)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-578599.html
#include "stm32f10x.h"
#include "Delay.h"
#include "bled.h"
#include "voice.h"
int main(void)
{
BLED_Init();
VoiceSensor_Init();
while (1)
{
if (VoiceSensor_Get() == 1) //如果PA11口為高電平,即有聲音,燈亮
{
BLED1_ON();
}
else
{
BLED1_OFF();
}
}
}
到了這里,關(guān)于STM32學(xué)習(xí)記錄——聲音傳感器的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!