这段时间太忙了,项目收尾一直没有时间继续捣鼓树莓派,正好趁这个双休抽点时间来和我的小伙伴玩耍一把。上篇文章提到我想用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电源引脚上,
公端接到面包板的正极上(红线);将第二根公对母杜邦线母端接到树莓派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; } }; } } }
总结:在实践过程中遇到了不少问题,毕竟是小白,有很多不懂不会的地方,但是,还是那句话,只要思想不倒退,办法总比困难多。最后,来看一
下效果图吧!