1. 程式人生 > >樹莓派3 聲音感測器(win10)

樹莓派3 聲音感測器(win10)

這段時間太忙了,專案收尾一直沒有時間繼續搗鼓樹莓派,正好趁這個雙休抽點時間來和我的小夥伴玩耍一把。上篇文章提到我想用Win10 Iot Core

和買來的一堆感測器摩擦出一些火花,雖然,已經有很多前輩做過,但是我沒有做過啊,沒做過又怎麼能體會到實踐的樂趣呢。先來一張感測器全家福吧!


這麼一大堆感測器,要先玩那個呢,啊!糾結症又犯了,挑挑揀揀了好久,最後決定先搞一個簡單點的---聲音檢測感測器。那麼,接下來就是看資料

了,還好店家提供相關技術文件,這裡為避嫌,就不提供店家地址。其實原理很簡單,以下是我摘錄的:

模組描述

1.可以檢測周圍環境的聲音強度 ,使用注意:此感測器只能識別聲音的有無(根

據震動原理)不能識別聲音的大小或者特定頻率的聲音

2 .靈敏度可調(圖中藍色數字電位器調節)

3.工作電壓3.3V-5V

4.輸出形式數字開關量輸出(01高低電平)

模組介面說明

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電源引腳上,

公端接到麵包板的正極上(紅線);將第二根公對母杜邦線母端接到樹莓派

GND負極引腳上,公端接到麵包板負極上(棕線);將第三根公對母杜邦線母

端接到樹莓派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;
                    }
                };
            }
        }
    }


總結:在實踐過程中遇到了不少問題,畢竟是小白,有很多不懂不會的地方,但是,還是那句話,只要思想不倒退,辦法總比困難多。最後,來看一