毕业设计 单片机智能音响设计与实现 -物联网 嵌入式 stm32

269 篇文章 42 订阅
269 篇文章 9 订阅


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于单片机的智能音响设计与实现

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:4分
  • 工作量:4分
  • 创新点:3分

1 简介

本项目是基于STM32单片机设计的智能音响系统,可用手机客户端控制音频文件的播报以及灯光的变化,并在OLED显示屏显示信息,JQ8900语音模块播报音乐,同时可识别用户的手势控制音频的播放和灯光的变化。

2 主要器件

  • STM32F103C8T6主控芯片
  • JQ8900语音模块
  • HC-05蓝牙模块
  • 手势识别模块

3 实现效果

手势识别模块,右滑控制音频文件,左滑控制灯光
在这里插入图片描述

4 设计原理

4.1 PAJ7620U2模块

简介
项目手势识别检测模块选择基于PixArt公司PAJ7620U2传感器开发的一块PAJ7620手势识别模块。网上很多店铺卖的这种 PAJ7620手势识别模块,但其实都是基于传感器设计的,只不过外围电路设计和形状外观不太一样而已,整体功能特性基本都一样。
在这里插入图片描述
工作原理
在这里插入图片描述
从上图中,我们可以看到PAJ7620U2传感器内部自带 LED 驱动器(可发射红外线信号),内置有传感器感应阵列、目标信息提取阵列和手势识别阵列。另外,PAJ7620U2作为一种光学数组式传感器,其内置LED驱动器集成了环境光和光源抑制滤波器,模块基本不受环境光干扰。
红外LED手势识别原理:

传感器工作时通过内部 LED 驱动器,驱动红外 LED 向外发射红外线信号,当传感器阵列在有效的距离中探测到物体时,目标信息提取阵列会对探测目标进行特征原始数据的获取,采集到的数据被保存在寄存器中,同时手势识别阵列会对原始数据进行识别处理,最后将手势结果存到寄存器中。

根据 PAJ7620U2传感器数据手册,用户可通过I²C接口总线采集信号并迅速识别出UP、Down、Right、Left等9种常用手势。另外PAJ7620U2还提供内置的接近检测功能,用于检测物体的接近或离开。

4.2 HC-05蓝牙模块

简介
它是汇承公司出品的一个蓝牙主从机一体可用作无线串口透传通讯的模块。
在这里插入图片描述

原理图
在这里插入图片描述
相关参数讲解

6根引脚,名称与功能如下;

  • VCC 接电源的正极,电压的范围为3.3v到5.0v
  • vdd 为外接供电电源输入端
  • GND 地线
  • TXD:模块串口发送引脚(TTL电平,不能直接接RS232电平),可直接接单片机的RXD引脚
  • RXD:模块串口接收引脚(TTL电平,不能直接接RS232电平),可直接接单片机的TXD引脚
  • KEY:用于进入AT状态:
  • LED:这个引脚是用来检测蓝牙模块是否已经连接上了其他蓝牙设备

通讯方式(tx、rx)

HC-05通过TX和RX引脚,支持使用标准AT命令。为此,用户必须在设备启动时进入特殊命令模式。启动进入数据模式,这样它就可以与其他设备进行无线通信

常见的AT指令

AT指令不区分大小写,但是都要以回车符结尾,下面是常用的AT指令
在这里插入图片描述

4.3 JQ8900语音模块

JQ8900模块选用的是 SOC 方案,集成了一个 16 位的 MCU,以及一个专门针对音频解码的ADSP,采用硬解码的方式,更加保证了系统的稳定性和音质。小巧尺寸更加满足嵌入其它产品的需求。

特点

  • 支持 MP3 WAV 硬件解码

  • 支持采样率(KHz):8/11.025/12/16/22.05/24/32/44.1/48

  • 多种控制模式:两线串口模式、一线串口控制、按键模式

  • 支持上一曲,下一曲,播放、暂停、停止、选曲、等常用功能控制

  • 支持播放曲目序号获取,总曲目及目录总曲目等信息获取

  • 支持各种信息查询,轻松获取语音芯片的当前状态

  • 支持指定曲目插播,即可以暂停当前播放的音乐,播放插播的曲目,播放完后返回原来曲目断点处播放

  • 支持系统深度睡眠,睡眠后电流低至 600 微安,可以通过一线串和指令 IO 唤醒

管脚说明

在这里插入图片描述
通讯命令
它是支持异步串口通信,波特率9600,8位数据位,没有校验位,没有流控制,这里也要注意,在利用串口调试的时候,这些参数都要设置好,一旦有偏差都通信不了。调试的时候利用串口调试助手就可以,尤其注意一点,发送数据的时候,要勾选上以十六进制发送数据。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5 部分核心代码

#include "paj7620u2.h"
#include "paj7620u2_cfg.h"
 
static void paj7620u2_selectBank(bank_e bank);//选择PAJ7620U2 BANK区域
static u8 paj7620u2_wakeup(void);//PAJ7620U2唤醒
 
//PAJ7620U2初始化
//返回值:0:失败 1:成功
u8 paj7620u2_init()
{
	u8 i;
	u8 status;
	
	GS_i2c_init();//传感器I2C初始化							
	status = paj7620u2_wakeup();		//唤醒PAJ7620U2
	if(!status) 
		return 0;
	paj7620u2_selectBank(BANK0);	//进入BANK0寄存器区域
	for(i=0;i<INIT_SIZE;i++)						//初始化模块
	{
		GS_Write_Byte(init_Array[i][0], init_Array[i][1]);//初始化PAJ7620U2
	}
  paj7620u2_selectBank(BANK0);//切换回BANK0寄存器区域
	return 1;
}
 
GestureData *gesture;
void Gesture_Init(void)
{
	u8 i;
	paj7620u2_selectBank(BANK0);//进入BANK0寄存器区域
	for(i=0;i<GESTURE_SIZE;i++)
	{
		GS_Write_Byte(gesture_arry[i][0],gesture_arry[i][1]);//手势识别模式初始化
	}
	paj7620u2_selectBank(BANK0);//切换回BANK0寄存器区域
 
	gesture = (GestureData *)malloc(sizeof(GestureData));
	if(NULL == gesture){
		//
		printf("Error: struct \"GESTURE_DATA\" malloc failed\r\n");
	}
	memset(gesture, 0, sizeof(GestureData));
	
}
 
//选择PAJ7620U2 BANK区域
void paj7620u2_selectBank(bank_e bank)
{
	switch(bank)
	{
		case BANK0: GS_Write_Byte(PAJ_REGITER_BANK_SEL,PAJ_BANK0);break;//BANK0寄存器区域
		case BANK1: GS_Write_Byte(PAJ_REGITER_BANK_SEL,PAJ_BANK1);break;//BANK1寄存器区域
	}		
}
 
//PAJ7620U2唤醒
u8 paj7620u2_wakeup()
{ 
	u8 data=0x0a;
	GS_WakeUp();//唤醒PAJ7620U2
	delay_ms(5);//唤醒时间>400us
	GS_WakeUp();//唤醒PAJ7620U2
	delay_ms(5);//唤醒时间>400us
	paj7620u2_selectBank(BANK0);//进入BANK0寄存器区域
	data = GS_Read_Byte(0x00);//读取状态
	if(data!=0x20) return 0; //唤醒失败
	
	return 1;
}
//语音模块代码
void uart3_init(u32 bound){
  //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//使能USART3,GPIOB时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
  
	//USART3_TX   GPIOB.10
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
  GPIO_Init(GPIOB, &GPIO_InitStructure);
   
  //USART3_RX	  GPIOB.11初始化
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(GPIOB, &GPIO_InitStructure);  
   //USART 初始化设置

	USART_InitStructure.USART_BaudRate = bound;//串口波特率
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式

  USART_Init(USART3, &USART_InitStructure); 
//  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启串口接受中断
  USART_Cmd(USART3, ENABLE);                     

}

//音乐播放  7e 04 03 00 02 ef
void Play(u16 cmd)
{
		USART_SendData(USART3,0x7E);
		delay_ms(1);
		USART_SendData(USART3,0x04);
		delay_ms(1);
		USART_SendData(USART3,0x03);
		delay_ms(1);
		USART_SendData(USART3,0x00);
		delay_ms(1);
		USART_SendData(USART3,cmd);
		delay_ms(1);
		USART_SendData(USART3,0xEF);
		delay_ms(1);

}



6 最后

  • 2
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
JQ8400FL-10P语音模块特点: 支持MP3 WAV 硬件解码 支持FAT文件系统 支持采样率(KHz):8/11.025/12/16/22.05/24/32/44.1/48 24位DAC输出内部采用DSP硬件解码,非PWM输出,动态范围支持 90dB,信比 85dB 多种控制模式、两线串口模式、一线串口控制 支持SPIFLASH模拟成U盘,直接像操作U盘一样更新SPIFLASH里的语音 支持上一曲,下一曲,播放、暂停、停止、选曲、等常用功能控制 支持播放曲目序号获取,总曲目及目录总曲目等信息获取 支持各种信息查询,轻松获取语音芯片的当前状态 支持指定曲目插播,即可以暂停当前播放的音乐,播放插播的曲目,播放完后返回原来曲目断点处播放 支持中英文路径插播,除了指定曲目插播,同时也支持指定路径插播,只需要发送插播的路径即可以轻松实现 支持指定中英文路径播放,无需知道要播放的内容的序号,直接发送所在的路径即可。 支持智能组合播放,特定的文件夹里的歌曲组合,发送曲目名即可组合。 支持30级音量调节 支持5种EQ调节 支持7种播放模式控制,可以适应不同的应用 支持循次数设置,更多应用,更人性化 支持系统深度睡眠,睡眠后电流低至600微安,可以通过一线串和指令IO唤醒 支持指定时间快进,快退 支持指定时间段复读 支持指定从指定的时候点开始播放 专用的BUSY信号输出指示 成熟的指令和指令解析,让应用更稳定 专用配套上位机,快速上手,方便调试,指令自动生成
物联网是指通过互联网连接和交互的物理设备,嵌入式则是指集成在其他系统中的计算机系统或电子系统。基于STM32F103的智能电子秤源代码是指使用STM32F103单片机实现智能电子秤的代码。 智能电子秤是一种可以通过数字方式显示重量,且具备连网功能的电子秤。它可以将测得的重量数据通过物联网的技术传输到云服务器或其他终端设备中,实现远程监控和数据存储等功能。 基于STM32F103的智能电子秤源代码可以使用Keil或其他开发环境编写,实现以下功能: 1. 传感器数据采集:通过外接的传感器(如压力传感器)获取待测物体的重量信息,然后将其转换为数字信号送入STM32F103单片机。 2. 数据处理:在单片机中进行数据处理和算法运算,对传感器采集到的数据进行滤波、校准和运算等操作,得到可靠的重量数据。 3. 数据显示:使用液晶显示屏或其他显示设备将处理后的重量数据以数字形式显示出来,方便用户查看。 4. 连网功能:通过与物联网模块(如Wi-Fi模块或蓝牙模块)的连接,将重量数据传输到云服务器或其他终端设备中,实现远程监控和数据存储等功能。 5. 用户界面:通过单片机上的按键和显示设备,实现用户与智能电子秤的交互操作,如调整单位、零点校准等。 为了实现上述功能,需要使用C语言或其他编程语言编写STM32F103的智能电子秤源代码,并进行调试和验证。代码中需要涉及到STM32F103的GPIO控制、模拟数字转换(ADC)、串口通信(UART)等相关知识。 当代码编写完成后,需要将其烧录到STM32F103单片机上,然后连接外部传感器和显示设备,即可实现智能电子秤的功能。 通过物联网的技术,智能电子秤可以实现远程数据传输和远程控制,方便用户进行重量监测和数据管理。并且,基于STM32F103的嵌入式设计可以提供可靠性和稳定性,适用于各种物联网应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值