【毕业设计】【物联网】基于WiFi技术的远程音乐喷泉控制系统设计 (STM32+WiFi+APP+MP3)

系列文章目录



0 前言

🔥近几年随着人工智能等新技术的不断火热,带动了嵌入式等的传统行业的进一步发展。最近带过的几届同学反馈:以往的毕设题目缺乏创新性和亮点,不能满足学校的答辩要求。为了方便毕业生们顺利、省心、高效的通过毕设,这里分享一些优质的低投入高产出毕业设计。

今天给大家分享一个比较实用且有一定创新力的题目

🚩基于WiFi技术的远程音乐喷泉控制系统设计

🥇首先对这道题目给出一个量化的评价(每项满分5⭐):

  • 难度:⭐⭐⭐⭐
  • 工作量:⭐⭐⭐⭐⭐
  • 创新性:⭐⭐⭐⭐

1 题目

在这里插入图片描述

2 方案设计

2.1 方案框图

分析题目功能点,结合开发经验,构思整体方案,形成整体方案框图
在这里插入图片描述

2.2 器件选型

主控:采用 STM32F103 系列嵌入式芯片,具体型号/规格暂定 STM32F103C8T6 最小系统板,系统主频
72 MHz;
彩灯模块:采用可变色的彩灯模块,主控通过 IO 控制,型号为市面常见款;
麦克风模块:采集环境中的声音,主控读取其模拟量输出端口,采用市售通用咪头;
WiFi模块:采用 ESP8266 模块,与主控通过 UART 通信;
MP3模块:读取模组内置存储器中的音频文件,驱动扬声器播放音乐,主控通过IO控制,型号 DY-SV5W;
电机驱动模块:使用高压直流电驱动直流水泵,型号 L298N;
OLED显示屏:显示必要的系统信息,型号 I2C OLED 屏幕;
系统采用AC-DC 12V电源适配器供电,一路直供水泵驱动,另一路经降压后为控制系统供电;
物联网云服务采用机智云成套解决方案.

2.3 小结-设计要点、难点解析

1、系统供电方案的设计,要同时满足水泵电机有足够动能和控制系统正常运行;
2、麦克风模块的驱动与音频信号的识别算法;
3、WiFi模块的驱动;
4、设备端与云服务器的通信流程、业务逻辑设计;
5、MP3模组的驱动;
6、水泵的控制算法设计;
7、APP界面、主控的操作流程设计,需具备良好的人机交互体验;
8、系统需具备高鲁棒性,确保装备稳定性和可靠性。

3 硬件设计——原理图及PCB

使用 Altium Designer 软件进行硬件原理图和PCB绘制
在这里插入图片描述
在这里插入图片描述

4 软件设计——软件模块划分及主程序源码

使用 Keil-MDK ARM建立工程

工程文件树
在这里插入图片描述

主程序部分源码展示:

/**
  ******************************************************************************
  * File Name          : main.c
  * Description        : Main program body
  ******************************************************************************
  ** This notice applies to any and all portions of this file
  * that are not between comment pairs USER CODE BEGIN and
  * USER CODE END. Other portions of this file, whether 
  * inserted by the user or by software development tools
  * are owned by their respective copyright owners.
  *
  * COPYRIGHT(c) 2017 STMicroelectronics
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *   1. Redistributions of source code must retain the above copyright notice,
  *      this list of conditions and the following disclaimer.
  *   2. Redistributions in binary form must reproduce the above copyright notice,
  *      this list of conditions and the following disclaimer in the documentation
  *      and/or other materials provided with the distribution.
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
  *      may be used to endorse or promote products derived from this software
  *      without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f1xx_hal.h"

/* USER CODE BEGIN Includes */
#include "hal_key.h"
#include "gizwits_product.h"
#include "common.h"

#include "digital_io_device.h"
#include "i2c.h"
#include "oled0561.h"
#include "adc.h"

/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/
TIM_HandleTypeDef htim2;

UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/


extern volatile uint16_t ADC_DMA_IN[2]; //声明外部变量

extern uint8_t SYS_STATE;          // 系统主状态标志位
extern uint16_t sound_adc_mid;
extern uint16_t sound_adc_min;
extern uint16_t sound_adc_max;
extern uint16_t sound_adc_value;           // 声音强度 ADC 值
extern uint16_t adc_offset;


/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM2_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_USART2_UART_Init(void);
static void MX_NVIC_Init(void);
//uint16_t mean_filter(uint16_t value);


/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */
/**
* key1 short press handle
* @param none
* @return none
*/
void key1ShortPress(void)
{
    GIZWITS_LOG("KEY1 PRESS ,Production Mode\n");
    gizwitsSetMode(WIFI_PRODUCTION_TEST);
}

/**
* key1 long press handle
* @param none
* @return none
*/
void key1LongPress(void)
{
    GIZWITS_LOG("KEY1 PRESS LONG ,Wifi Reset\r\n");
    gizwitsSetMode(WIFI_RESET_MODE);

}

/**
* key2 short press handle
* @param none
* @return none
*/
void key2ShortPress(void)
{
    GIZWITS_LOG("KEY2 PRESS ,Soft AP mode\n");
    #if !MODULE_TYPE
    gizwitsSetMode(WIFI_SOFTAP_MODE);
    #endif
}

/**
* key2 long press handle
* @param none
* @return none
*/
void key2LongPress(void)
{
    //AirLink mode
    GIZWITS_LOG("KEY2 PRESS LONG ,AirLink mode\n");
    #if !MODULE_TYPE
    gizwitsSetMode(WIFI_AIRLINK_MODE);
    #endif
}

/**
* Key init function
* @param none
* @return none
*/
void keyInit(void)
{
    /* Key parameter initialization*/
    keyCategory_t keys[KEY_NUM]={
        [KEY1] = {

        .fsm.keyGpio.keyPort = KEY1_GPIO_Port,
        .fsm.keyGpio.keyPin = KEY1_Pin,
        //Key1 State Machine Init
        .fsm.keyShield = ENABLE,
        .fsm.keyDownLevel = Bit_RESET,
        //Key1 Callback function init
        .func.ShortPressCb = key1ShortPress,
        .func.longPressCb = key1LongPress,
        },

        [KEY2] = {
        .fsm.keyGpio.keyPort = KEY2_GPIO_Port,
        .fsm.keyGpio.keyPin = KEY2_Pin,
        //Key2 State Machine Init
        .fsm.keyShield = ENABLE,
        .fsm.keyDownLevel = Bit_RESET,
        //Key2 Callback function init
        .func.ShortPressCb = key2ShortPress,
        .func.longPressCb = key2LongPress,
        },
    };
    keyParaInit(keys); 
}
/* USER CODE END 0 */

int main(void)
{

    /* USER CODE BEGIN 1 */
#if 0
    uint16_t sound_adc_mid;
    uint16_t sound_adc_min;
    uint16_t sound_adc_max;
    uint16_t sound_adc_value;           // 声音强度 ADC 值
    uint16_t adc_offset;
#endif
    /* USER CODE END 1 */

    /* MCU Configuration----------------------------------------------------------*/

    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init();

    /* USER CODE BEGIN Init */

    /* USER CODE END Init */

    /* Configure the system clock */
    SystemClock_Config();

    /* USER CODE BEGIN SysInit */

    /* USER CODE END SysInit */

    /* Initialize all configured peripherals */
    MX_GPIO_Init();
    MX_TIM2_Init();
    MX_USART1_UART_Init();
    MX_USART2_UART_Init();

    /* Initialize interrupts */
    MX_NVIC_Init();

    /* USER CODE BEGIN 2 */
    timerInit();
    uartInit();
    userInit();

//
    GIZWITS_LOG("MCU Init Success , SoftVersion = %s\r\n",SOFTWARE_VERSION);
    
    /* IoTMusicFountain BEGIN */
    sound_adc_mid = ADC_SOUND_MID;
    sound_adc_min = sound_adc_mid - ADC_SOUND_RNG;
    sound_adc_max = sound_adc_mid + ADC_SOUND_RNG;
    adc_offset = 0;
    sound_adc_value = U16_MAX;
    
    //digital_io_device_init();
    pc13_led_control(mENABLE);
    light_relay_control(mENABLE);
    HAL_Delay(1000);
    pc13_led_control(mDISABLE);
    light_relay_control(mDISABLE);
    I2C_Configuration();                // I2C初始化
    ADC_Configuration();                //ADC初始化设置
    OLED0561_Init();                    // OLED初始化
    OLED_DISPLAY_8x16_BUFFER(0, "-----INITING----"); // 显示字符串
    //OLED_DISPLAY_8x16_BUFFER(2, "!!!KEEP QUIET!!!"); // 显示字符串
    //OLED_DISPLAY_8x16_BUFFER(4, "CurADC:");
    OLED_DISPLAY_8x16_BUFFER(6, "MidADC:");
    while(U16_MAX == sound_adc_value)
    {
        sound_adc_value = mean_filter(ADC_DMA_IN[0]);
    }

    //OLED_DISPLAY_8x16_BUFFER(2, "                "); // 显示字符串
    sound_adc_mid = sound_adc_value;
    sound_adc_min = sound_adc_mid - ADC_SOUND_RNG;
    sound_adc_max = sound_adc_mid + ADC_SOUND_RNG;
    

    OLED_DISPLAY_8x16(6, 7*8, sound_adc_mid/1000+0x30);
    OLED_DISPLAY_8x16(6, 8*8, sound_adc_mid%1000/100+0x30);
    OLED_DISPLAY_8x16(6, 9*8, sound_adc_mid%100/10+0x30);
    OLED_DISPLAY_8x16(6, 10*8, sound_adc_mid%10+0x30);
    OLED_DISPLAY_8x16(4, 14*8, SYS_STATE+0x30);
    //key2LongPress();        /* set ESP to Airlink mode */
//


    
    gizwitsInit();
    keyInit();




    
    /* IoTMusicFountain END */
    
    /* USER CODE END 2 */
#ifdef OTA_ENABLE    
    Pro_D2W_Ask_Module_Reboot();
#endif
    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    while (1)
    {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        //sound_adc_value = mean_filter(ADC_DMA_IN[0]);
        userHandle();
        gizwitsHandle((dataPoint_t *)&currentDataPoint);
    }
    /* USER CODE END 3 */

}


5 成果——实现效果展示

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

在这里插入图片描述

6 最后总结——项目资料获取

想获取设计方案、器件资料、原理图、PCB、程序源码获取、其他毕设题目解答,欢迎私信。
或搜索微信公众号“电子设计万事屋”,敬请关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值