目录 第1章 引言 7 1.1 选题的背景及意义 7 1.2 智能家居技术的发展历程 8 1.2.1 国内智能家居技术发展情况 9 1.2.2 国外智能家居技术的发展情况 9 1.3 本课题研究目标及主要研究内容 9 1.3.1 研究目标 9 1.3.2 研究内容和方法 10 1.3.3 主要考核要求或指标 10 第2章 单片机及相关器件介绍 11 2.1 主控芯片简介 11 2.2 主要器件介绍——LD3320 11 2.2.1 功能介绍 12 2.2.2 电路说明 13 2.3 DC3V-6V直流减速电机 14 2.4 电机驱动模块 15 2.5 继电器模块 15 2.5.1 继电器介绍 15 2.5.2 电磁继电器工作原理 16 2.5.3 继电器模块电路 17 第3章 系统软件设计 18 3.1 MDK5简介 18 3.2 FlyMcu代码烧写工具 19 3.3 source insight 介绍 19 3.4 程序流程图 21 3.5 软件功能代码 22 3.5.1 主程序部分 22 3.5.2 STM32的IO输出部分 22 3.5.3 语音控制部分 23 3.5.4 外部按键控制 24 第4章 系统硬件设计 25 4.1 元器件清单 25 4.2 电路原理图简介 26 4.3硬件实物成果图 27 第5章 系统调试与系统效果展示 28 5.1 系统软硬件调试 28 5.1.1硬件检查 28 5.1.2 硬件功能检查 28 5.2 软件功能模块的调试 28 5.3 智能家居语音控制系统效果展示 29 5.3.1 房间灯控制 29 5.3.2 大厅灯控制 30 5.3.3 取暖器控制 30 5.3.3 窗帘开关控制 31 5.4 智能家居语音控制系统不足与展望 31 第7章 参考文献 34 程序 36 第5章 系统调试与系统效果展示 5.1 系统软硬件调试 完成了软件的编程和硬件的搭建之后,下一步的主要工作就是对软硬件系统进行整体的调试工作了。调试工作对于整个设计来说必不可少,以防止硬件连接错误造成的元器件损坏,同时也能够有效避免设计的不合理带来的安全问题。系统软硬件调试主要包含两个主要内容,一个是对硬件部分的检查和调试。另外一个则是对软件系统进行检查和调试。如果软件和硬件都没有问题,接下来则是对软硬件系统进行整体调试。 5.1.1硬件检查 硬件检查主要包含以下三个方面的检查: 1.检查硬件焊接是不是有虚焊。 2.对照电路图检查是不是有焊接错误。 3.线路连接是不是有问题。 5.1.2 硬件功能检查 硬件功能检查则是根据编写的语言要求,通电之后检查是不是能按照程序运行。该过程可以设置简单的LED显示来判断硬件电路连接有无故障。

5.2 软件功能模块的调试 软件功能调试则是对软件部分的程序进行详细检查,其中包含函数初始化部分,包括按键的初始化定义,LED用到的GPIO口定义,以及定时器和外部中断的初始化定义等。一旦出现了Bug或者程序没有按照指定想法运行,该部分出现错误的可能性较大,因此,初始化部分也是软件检查的第一步。本文转载自http://www.biyezuopin.vip/onews.asp?id=14488接下来则对主函数中的功能程序部分进行详细检查,因为程序可能出现跑飞或者卡死的情况,或者出现同一个IO口重复定义或者使用,导致排插困难的情况。因此,需要对用到的每一个模块进行软件功能模块的调试,从而确保所用到的每一个功能模块都能够正常工作,最后才能进行整体软硬件的调试。 5.3 智能家居语音控制系统效果展示 在完成智能家居语音控制系统的软硬件调试之后,发现了一系列问题,解决各种问题之后,接下来就到了系统效果展示的环节。由于调试工程中将问题都一一解决了,因此,软硬件联合测试比较顺利。下图21是系统通电之后的效果图。该系统中通过充电宝给取暖器进行加热,为了保证实验过程中的安全性,图中采用加热片来代替取暖器。通过STM32的IO口来控制继电器的通断从而来控制取暖器的加热与否,也能够实现效果。

/***************************飞音云电子****************************

** 文件名称:LDV4语音识别开发板 基础版驱动程序

** CPU: STM32f103RCT6

** 晶振:8MHZ

** 波特率:9600 bit/S

** 配套产品信息:YS-LDV4语音识别开发板

** 说明:本程序 具备语音识别、串口通信、开发板基本功能演示。

***************************飞音云电子******************************/

/*************端口信息********************

* 接线说明

LD3320接口 STM32接口

* RST PB6

* CS PB8

* WR/SPIS PB9

* P2/SDCK PB3

* P1/SDO PB4

* P0/SDI PB5

* IRQ PC1

* A0 PB7

* RD PA0

--------------------------

* K1 RST (复位键)

* K2 PA1 (U盘处罚按键(加强版程序才有))

* K3 PA2 (未定义功能)

* LED1 PC4 (流水灯)

* LED2 PC2 (流水灯)

* LED3 PC3 (流水灯)

* LED4 PC0 (流水灯)

*****************************************/

#include "includes.h"

/* Private function prototypes -----------------------------------------------*/

void RCC_Configuration(void);

//void NVIC_Configuration(void);

void USART_Configuration(void);

void PrintCom(USART_TypeDef* USARTx, uint8_t *Data);

void PrintComBit(USART_TypeDef* USARTx, uint8_t Data);

extern void LD3320_main(void);

/***********************************************************

* 名 称: 主函数

* 功 能: 程序入口

* 入口参数: 无

* 出口参数: 无

* 说 明: 无

* 调用方法: 无

**********************************************************/

int main(void)

{

/* System Clocks Configuration */

RCC_Configuration(); //外设时钟配置

delay_init(72); //延时函数初始化

USART_Configuration();//USART 配置

LD3320_main(); //LD3320 主函数函数

while(1)

{ };

}

/***********************************************************

* 名 称: void USART_Configuration(void)

* 功 能: 串口配置

* 入口参数:

* 出口参数:

* 说 明:

* 调用方法:

**********************************************************/

void USART_Configuration(void)

{

USART_InitTypeDef USART_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitStructure.USART_BaudRate = 9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

/* Configure USART1 */

USART_Init(USART1, &USART_InitStructure); //类似与GPIO口,配置完后初始化一次

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能接收 中断

USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //使能发送 中断

USART_Cmd(USART1, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //USART1 TX

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_Init(GPIOA, &GPIO_InitStructure); //A端口

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1 RX

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //复用开漏输入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure); //A端口

}

/***********************************************************

* 名 称:void PrintCom(USART_TypeDef* USARTx, uint8_t *Data)

* 功 能:串口数据打印

* 入口参数:

* 出口参数:

* 说 明:

* 调用方法:

**********************************************************/

void PrintCom(USART_TypeDef* USARTx, uint8_t *Data)

{

while(*Data)

{

USART_SendData(USARTx, *Data++); /*发送单个数据 */

while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);/* 检查指定的USART标志位即RESET=1时发送完成*/

}

}

void PrintComBit(USART_TypeDef* USARTx, uint8_t Data)

{

USART_SendData(USARTx, Data); /*发送单个数据 */

while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);/* 检查指定的USART标志位即RESET=1时发送完成*/

}

/***********************************************************

* 名 称:void RCC_Configuration(void)

* 功 能:配置外设时钟

* 入口参数:

* 出口参数:

* 说 明:

* 调用方法:

**********************************************************/

void RCC_Configuration(void)

{

SystemInit();

/* Enable USART1, GPIOA, GPIOx and AFIO clocks */

RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |

RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO|

RCC_APB2Periph_GPIOE, ENABLE); //开启相关的AHP外设时钟

/* Enable USART2 clock */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

}

/**

* @brief Configures the different GPIO ports.

* @param None

* @retval : None

*/

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: