樹莓派3 聲音感測器(win10)
這段時間太忙了,專案收尾一直沒有時間繼續搗鼓樹莓派,正好趁這個雙休抽點時間來和我的小夥伴玩耍一把。上篇文章提到我想用Win10 Iot Core
和買來的一堆感測器摩擦出一些火花,雖然,已經有很多前輩做過,但是我沒有做過啊,沒做過又怎麼能體會到實踐的樂趣呢。先來一張感測器全家福吧!
這麼一大堆感測器,要先玩那個呢,啊!糾結症又犯了,挑挑揀揀了好久,最後決定先搞一個簡單點的---聲音檢測感測器。那麼,接下來就是看資料
了,還好店家提供相關技術文件,這裡為避嫌,就不提供店家地址。其實原理很簡單,以下是我摘錄的:
一、模組描述
1.可以檢測周圍環境的聲音強度 ,使用注意:此感測器只能識別聲音的有無(根
2 .靈敏度可調(圖中藍色數字電位器調節)
3.工作電壓3.3V-5V
4.輸出形式數字開關量輸出(0和1高低電平)
二、模組介面說明
1. VCC外接3.3V-5V電壓(可以直接與 5v 微控制器和3.3v微控制器相連)
2. GND外接GND
3. DO小板數字量輸出介面(0和 1)
三、使用說明
1.聲音模組對環境聲音強度最敏感,一般用來檢測周圍環境的聲音強度。
2.模組在環境聲音強度達不到設定閾值時,DO口輸出高電平,當外界環境聲音強度超過設定閾值時,模組 D0輸出低電平
3.小板數字量輸出 D0可以與微控制器直接相連,通過微控制器來檢測高低電平,由此來檢測環境的聲音
四、原理圖
接下來,我們要做的就是檢查聲音感測器是否正常:在相對安靜的環境中,將模組的VCC接到樹莓派的3.3V PWR電源正極上,將模組的GND接到樹莓派
的GND上(我選了39),此時,模組的電源指示燈會亮,說明你的感測器OK。如果開關提示也亮了,說明感測器對當前環境聲音太靈敏了,可以調節藍色
數字電位器,使之靈敏度降低。附上測試接線圖和樹莓派GPIO引腳位置圖:
然後就是如何接線了,我使用了6根杜邦線(3根公對母,3根公對公),具體接線步驟:將第一根公對母杜邦線母端接到樹莓派3.3V PWR電源引腳上,
公端接到麵包板的正極上(紅線);將第二根公對母杜邦線母端接到樹莓派
端接到樹莓派GPIO 5引腳上,公端接到LED燈長腳上(灰線);將第一根公對公杜邦線的一端接到麵包板電源正極上,另一端接到感測器VCC上(紅線);
將第二根公對公杜邦線的一端接到麵包板電源負極上,另一端接到感測器GND上(棕線);將最後一根公對公杜邦線的一端接到感測器的OutPut(DO)上,
另一端接到LED等的短腳上(紫線)。最後接線如圖所示:
見證奇蹟的時刻到了,新建一個UWP空白應用(通用Windows),將以下程式碼粘到MainPage中,然後部署到樹莓派中的Win10中即可。至於怎麼安裝
系統、部署應用和web遠端控制,待我下次整理出一個文件,當然,你也可以自己在網上搜。另外:原始碼來源於網友汪宇傑Edi.Wang。
public sealed partial class MainPage : Page
{
//LED燈引腳
public GpioPin LedPin { get; set; }
//聲音感測器引腳
public GpioPin SoundPin { get; set; }
//儲存LED燈的開關狀態
public bool IsLightOn { get; set; }
public MainPage()
{
this.InitializeComponent();
Loaded += OnLoaded;
}
/// <summary>
/// Loaded事件
/// </summary>
/// <param name="sender"></param>
/// <param name="routedEventArgs"></param>
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
//初始化GPIO控制器
var controller = GpioController.GetDefault();
if (null != controller)
{
//LED是高電平輸出表示開,所以第一次啟動的時候要關燈,輸出低電平
LedPin = controller.OpenPin(5);
LedPin.SetDriveMode(GpioPinDriveMode.Output);
LedPin.Write(GpioPinValue.Low);
//FC-04的GPIO 06埠是接受訊號的,所以是輸入
SoundPin = controller.OpenPin(6);
SoundPin.SetDriveMode(GpioPinDriveMode.Input);
//監測聲音感測器引腳值得變化
SoundPin.ValueChanged += (pin, args) =>
{
//讀取引腳值(FC-04感測器只有兩個值0、1)
var pinValue = SoundPin.Read();
//FC-04檢測到聲音時候會在DO輸出低電平
if (pinValue == GpioPinValue.Low)
{
Debug.WriteLine("Sound Detected!");
//開關燈操作(設定LED引腳值)
LedPin.Write(IsLightOn ? GpioPinValue.Low : GpioPinValue.High);
IsLightOn = !IsLightOn;
}
};
}
}
}
總結:在實踐過程中遇到了不少問題,畢竟是小白,有很多不懂不會的地方,但是,還是那句話,只要思想不倒退,辦法總比困難多。最後,來看一