树莓派实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称:实验12-PIR传感器和语音识别实验
专业班级:姓名:学号:实验日期:
一、实验目的:
(1)熟悉人体红外传感器、语音识别和文本转语音(TTS)。
(2)掌握在Windows 10 IoT Core中使用GPIO读取人体红外传感器输出的方法。
(3)掌握在Windows 10 IoT Core中使用SpeechRecognition和SpeechSynthesis进行语音识别和语音合成的方法。
二、实验内容:
(1)将人体红外传感器PIR、LED灯分别连接到树莓派的GPIO5和GPIO6,运行程序12-1后,先点击初始化PIR按钮,若附近有人活动时,即程序检测到上升沿,指示的LED灯亮;没有人活
动时,即程序检测到下降沿,LED灯熄灭,与应用程序界面上的状态同步。如下图所示。
在实验12-1的基础上,使用树莓派、人体红外传感器PIR、LED灯、电阻、面包板和跳线,实现Security Camera。即检测到附近有人活动时,程序自动拍照,存储到本地。
(2)使用树莓派(IoT Core系统烧写版本为14986)、USB声卡、耳机、麦克风、LED灯、电阻、面包板和跳线,实现本地的语音合成和语音识别,从而达到控制LED灯的目的。程序12-2给出了语音控制一个LED的场景,即使用语音turn on bedroom led或者turn off bedroom led来控制GPIO5引脚连接的LED灯。同时,可以在Visual Studio的Output窗口看到语音识别的实时结果。如下图所示。
用户可以在应用程序界面输入文字,点击按钮,可以让系统读出该内容,如下图所示。
请在此基础上,添加LED灯,修改语音定义文件和程序,从而达到控制两个不同的LED的功能。
三、实验结果(注意:所有截图需要加注自己的姓名+学号水印):
1. 利用Fritzing软件画出硬件连接图,给出实验内容1对应的所有关键代码,给出测试结果和说
明,附调试截图。
硬件连接图:
硬件连接图如左图所示,将led连接在GPIO5上,将pri的
数据输出接口接在GPIO18上
关键代码:
private void PinPIR_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
{
// toggle the state of the LED every time the button is pressed
if (e.Edge == GpioPinEdge.RisingEdge)
{
ledPin.Write(GpioPinValue.Low);
}
if (e.Edge == GpioPinEdge.FallingEdge)
{
ledPin.Write(GpioPinValue.High);
}
var task = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
if (e.Edge == GpioPinEdge.FallingEdge)
{
ledEllipse.Fill = grayBrush;
GpioStatus.Text = "PIR FallingEdge";
}
if (e.Edge == GpioPinEdge.RisingEdge)
{
ledEllipse.Fill = redBrush;
GpioStatus.Text = "PIR RisingEdge";
takePhoto_Click(takePhoto, new RateChangedRoutedEventArgs());
}
});
}
如上面的代码所示在原来的代码段中调用takePhoto_Click(takePhoto, new RateChangedRoutedEventArgs());函数,在主页面的圆点控制的代码中添加调用拍照功能的代码。当人体红外传感器检测到时输出高电平,GPIO口接受到后检测到上升沿便会进行拍照并且点亮led
实验结果:
实验结果如图所示,当红外设备检测到有人时
就会进行拍照,并且将照片进行保存,于此同时,
照片展示框下的指示点便会由灰色变为红色以指示
检测到红外信息,同时连接在树莓派GPIO上的led
小灯点亮。没有检测到红外信息时,便不会拍照。也不会执行任何操作。
2. 利用Fritzing软件画出硬件连接图,给出实验内容2对应的所有关键代码,给出测试结果和说明,附调试截图。
硬件连接图:
如右图所示,在此次的试验中需要用到两个
GPIO引脚,分别为GPOI6和GPIO12。
关键代码:
private async void LightControl(string command, string target)
{
if (target == "Bedroom")
{
//===========================
if (command == "ON")
{
if (BedRoomLED_GpioPin != null)
{
await
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDi spatcherPriority.Normal, () =>
{
bedRoomTimer.Start();
}
);
}
}
else if (command == "OFF")
{
await
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDi spatcherPriority.Normal, () =>
{
bedRoomTimer.Stop();
if (BedRoomLED_GpioPinValue == GpioPinValue.Low)
{
BedRoomLED_GpioPinValue = GpioPinValue.High;
BedRoomLED_GpioPin.Write(BedRoomLED_GpioPinValue);
//LED.Fill = redBrush;
}
}
);
}
//===========================
}
else if (target == "kitchen")
{
//===========================
if (command == "ON")
{
if (kITCHENLED_GpioPin != null)
{
await