【毕业设计】【物联网】基于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、程序源码获取、其他毕设题目解答,欢迎私信。
或搜索微信公众号“电子设计万事屋”,敬请关注

课程设计-基于C51单片机音乐喷泉控制系统设计: 摘 要 随着人们生活水平的提高和建立绿色城市的向往,音乐喷泉以其独特的魅力和特殊的功能,愈来愈成为休闲娱乐产业中的一项重要产品,音乐喷泉的兴建也越来越多。 根据目前音乐喷泉的发展现状,介绍了一个以AT89C51单片机为核心的小型音乐喷泉控制系统。给出了一个简洁的单片机控制电路,分析了输出地址,描述了不同类型的输出电路和输入电路;介绍了从特定构造的喷池中获得决定喷池动作的喷池数据的原理;给出了主程序框图和看门狗子程序。采用程序控制控制花型。音频信号还影响灯光色彩和灯光光线明暗的变化。从而使灯光色彩、灯光的闪烁和喷泉水姿随音乐节奏而变化。 关键词:音乐喷泉单片机单片机控制;喷池数据 目录 摘 要 I 目录 II 第1章 绪 论 1 1.1课题背景 1 1.2 音乐喷泉的发展和现状 1 第2章 音乐喷泉控制系统硬件设计 3 2.1 控制系统硬件总体设计方案 3 2.2音乐信号的采集 3 2.2.1 音频放大电路的设计 3 2.2.2 采样定理 5 2.3 单片机电路 6 2.3.1 单片机的概述 6 2.3.2 时钟电路的设计 7 2.4 AD转换电路 7 2.4.1 ADC0809与单片机89C51的连接 8 2.4.2输入电路 9 2.5潜水泵调速硬件方案设计 10 2.6灯光硬件方案设计 11 2.7解决系统时间滞后硬件电路设计 11 第3章 喷泉控制系统软件设计 13 3.1喷池数据 13 3.2主程序框图 14 3.3 控制潜水泵软件设计模块 14 3.3.1 潜水泵开关调速的原理 15 3.3.2潜水泵开关调速的软件设计 16 3.4控制电磁阀软件设计模块 17 3.5 歌曲存储模块 17 3.5.1音频脉冲的产生 17 3.5.2音乐程序 19 3.6灯光控制模块 22 3.7看门狗子程序 23 3.8实验仿真 23 结 论 25 参考文献 26 附 录 27 附录1 27 附录2 28 第1章 绪 论 1.1课题背景 随着人们生活水平的提高,人们对环境的要求越来越高,城市环境建设日益为人们所重视。喷泉作为一种观赏性较高的艺术水景,不断的出现在城市的广场、公园及其它公共场所,早些的喷泉都是固定不可调的,显得有些单调,随着科技的发展音乐喷泉也进入了我们的城市。音乐喷泉是现代科技与艺术的综合,音乐喷泉将喷水图形、彩色灯光及音乐旋律构成一个有机的整体,随着乐曲旋律和节奏的变化,各种不同的喷水花形相应的配合变换,在五彩绚丽的变幻灯光照耀下,构成一幅幅奇妙无比的景观、令人赏心悦目,叹为观止,在视听上获得极大的享受。音乐喷泉的起源于1930年,德国人首先带出喷泉的概念,此后经过多年的发展,其音乐喷泉的设计及构造已变得更大型及复杂。随着我国改革开放政策的不断实施,80年代中,我国也相继引进和自行设计建造了多座音乐喷泉,为美化环境,活跃人民的文化生活起了良好的作用。通过学习和引进国外先进技术,加上自行研究和开发,喷泉的面貌不断更新,各种新水型层出不穷,音乐喷泉还可以同水幕电影、激光表演和舞台表演相结合,产生令人难忘的艺术效果。我国现有上百家喷泉水景设备制造厂,经过市场竞争、优胜劣汰,我国已经出现了几家综合实力较强的大型喷泉水景工程公司,能够独立建设投资上千万元的特大型喷泉水景工程,并创造了一些世界之最的新记录。总体上说,我国的喷泉水景技术已经达到了国际先进水平,其建设规模和市场需求更是其他国家所难以相比的。 1.2 音乐喷泉的发展和现状 北京石景山古城公园的音乐喷泉,在悠扬动听的音乐声中,喷水可产生五六种变化,时而转动如银伞,时而飘忽如玉带,时而如金蛇狂舞,时而旋转飞溅···喷出的花形有昙花、菊花、扶桑花、百合花和曼陀罗花,这是在80年代初期中国较早建设的一个音乐喷泉。 南昌的秋水广场是由“落霞与孤鹜齐飞,秋水共长天一色”的意境得名,秋水广场就是以喷泉为主题,集旅游、观光、购物的大型休闲广场。他的音乐喷泉最吸引人注目,是国内最大的音乐喷泉群,泉水面积1.2万平方米,主喷高达128米,是南昌的一俏丽景观,人们可以一边欣赏音乐,一边观看滕王阁的美景。 新加坡圣淘沙旅游区的音乐的设计与效果也是值得参考的,它布置在一个空旷而略有坡度的空间,面积很大,与圣淘沙车站前的长形喷水池共同组成为一个长达数百米的综合系列喷泉音乐喷泉位于系列喷泉的顶端。舞台为一假山堆叠的西洋式半圆柱廊组成,共分3层。白天,假山瀑布及两侧的喷泉群与3层水池形成一处动静结合的较为文雅悠扬的水景园,入夜则有五光十色,优美动听的喷泉景观,整个舞台区域东西面阔近百米,南北深度约40m,成为目前亚洲最大的音乐喷泉之一。表现出壮阔、绚丽的水景之美。 以上几处音乐喷泉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值