基于STM32的智能鱼缸水质净化系统设计

🤞🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是智能鱼缸水质净化系统

目录

1、设计要求

2、系统功能

3、演示视频和实物

4、系统设计框图

5、软件设计流程图

6、原理图

7、主程序

8、总结


1、设计要求

本毕业设计以单片机作为控制核心芯片,设计出一款具有监测鱼缸水的温度、水位、浊度和PH值等参数,并且通过WIFI模块连接云平台用来实现数据上传和下发,

 2、系统功能

(1)基于STM32F103C8T6为主控制器的智能鱼缸的设计与实现。其中包括基于STM32F103C8T6单片机的最小系统的搭建,温度传感器、浑浊度传感器、水位传感器等相关器件模块的选型和原理图设计,在上述原理图的基础上搭建硬件平台并验证其功能的完善性。

(1)ESP8266-01Wifi模块。通过本模块单片机系统可以连接到机智云,手机APP就可以远程控制鱼缸的开关。

(2)水位传感器器。水位传感器用来检测鱼缸内的水位,是鱼缸的水位保持在一定的范围内,通过比较水位和水位的阈值来控制补水泵和排水泵。

(3)温度传感器,温度传感器用来检测鱼缸内的水温,使鱼缸保持恒温。

(4)PH传感器,用来检测鱼缸内的PH值。

(5)水泵继电器模块,用继电器来驱动两个水泵。

(6)时钟模块。利用时钟振荡电路产生时钟信号。单片机时钟可以提供一个固定的时钟频率,用于同步和控制各个模块的操作。通过时钟信号的控制,可以确保单片机系统中各个模块按照一定的时间序列进行操作,从而实现定时功能。

(7)OLED显示模块。OLED显示模块采用0.96寸液晶显示屏,该模块用来实时显示传感器数据及鱼缸工作状态

(8)按键模块。按键模块用来控制模式选择和控制鱼缸的开启与关闭。

(9)蜂鸣器模块。设备出现故障用来报警。

(10)舵机用来控制净水系统的开关。

3、演示视频和实物

基于STM32的鱼缸水质净化系统

4、系统设计框图

5、软件设计流程图

6、原理图

7、主程序

#include "sys.h"                //有定制和购买的,可以联系VX:lwfw123456789
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "usart3.h"
#include "gizwits_product.h"
#include "Key.h"
#include "Buzzer.h"
#include "OLED.h"
#include "AD.h"
#include "MyRTC.h"
#include "Servo.h"
#include "ds18b20.h"
/***********************************************************************************************
同学好!我们是5132单片机设计,定制单片机设计,实物和说明书均可定制,欢迎大家咨询。VX:lwfw123456789
其他项目演示视频和说明请大家移步哔哩哔哩、CSDN和公众号等。
哔哩哔哩:5132单片机设计
CSDN:    5132单片机设计
公众号:  5132单片机设计
抖音  :  5132单片机设计
小红书:  5132单片机设计
咸鱼:    5132单片机设计
************************************************************************************************/

uint8_t KeyNum;                               //存储按键值
uint32_t bufe[10];                     //存储传感器采集的数据
uint16_t AD0, AD1, AD2, AD3;             //存储5路ADC值

uint32_t TempYu = 25;
uint32_t ShuiWeiYu_Xia = 10;
uint32_t ShuiWeiYu_Shang = 70;
uint32_t ZhuoYu = 70;
uint32_t PHYu = 5;
short temperature;                               //存放温湿度
u8 state, state2 = 2, state2_1, state2_2, state3;      //按键状态标志
u8 t = 0;                                     //传感器读取时间间隔
u8 flag;                               //远程控制标志
u8 flag2 = 0, flag1, flag3;
uint16_t RTC_Time[] = {0, 0, 0};
uint16_t RTC_Time1[] = {7, 0, 0};    //定时时间---开
uint16_t RTC_Time2[] = {19, 0, 0};   //定时时间---关
u8 T_state, T_state1, qingping = 1, state_dingshi_yu_guan, state_dingshi_yu_kai, state_dingshi_yu_switch, state3_1;
float PH;
extern void TimeSet(void);
extern void TimeRead(void);
extern void DingShiMoShi(void);
extern void YuZhiSet(void);
extern void ChuangGan(void);

void MY_Gizwits_Init(void)              //机智云初始化函数
{
    TIM3_Int_Init(9, 7199); //1MS系统定时
    usart3_init(9600);//WIFI初始化
    memset((uint8_t *)&currentDataPoint, 0, sizeof(dataPoint_t)); //设备状态结构体初始化
    gizwitsInit();//环形缓冲区初始化
    gizwitsSetMode(2);   //设置模式
    userInit();
}
u16 Get_Adc_Average(u8 ADC_CHx, u8 times)
{
    u32 temp_val = 0;
    u8 t;
    for (t = 0; t < times; t++)
    {
        temp_val += AD_GetValue(ADC_CHx);
        //SYSTICK_DelayMs(5);
    }
    return temp_val / times;
}

void shoudong()
{
    TimeRead();
    if (KeyNum == 2)        //按键
    {
        delay_ms(20);
        if (KeyNum == 2)
        {
            state2++;
            if (state2 > 1)
            {
                state2 = 0;
            }
        }
    }
    if (state2 == 0)
    {
        Servo_SetAngle(90);//外设操作
    }
    if (state2 == 1)
    {
        Servo_SetAngle(0);//外设操作
    }
    if (KeyNum == 3)        //按键
    {
        delay_ms(20);
        if (KeyNum == 3)
        {
            state2_1++;
            if (state2_1 > 2)
            {
                state2_1 = 0;
            }
        }
    }
    if (state2_1 == 1)
    {
        BuShuiBen_ON();//外设操作
        PaiShuiBen_OFF();
    }
    if (state2_1 == 0)
    {
        BuShuiBen_OFF();//外设操作
        PaiShuiBen_OFF();
    }
    if (state2_1 == 2)
    {
        BuShuiBen_OFF();//外设操作
        PaiShuiBen_ON();
    }
    if (KeyNum == 4)        //按键
    {
        delay_ms(20);
        if (KeyNum == 4)
        {
            state2_2++;
            if (state2_2 > 1)
            {
                state2_2 = 0;
            }
        }
    }
    if (state2_2 == 1)
    {
        JiaRe_ON();//外设操作
    }
    if (state2_2 == 0)
    {
        JiaRe_OFF();//外设操作
    }


}
void zhidong()
{

    if (bufe[0] < ShuiWeiYu_Xia)
    {
          BuShuiBen_ON();
			    PaiShuiBen_OFF();
    }else if (bufe[0] > ShuiWeiYu_Shang)
		{
          PaiShuiBen_ON();
			    BuShuiBen_OFF();
    }else
    {			    
			   PaiShuiBen_OFF();
         BuShuiBen_OFF();
    }

    if (bufe[3]/10 < TempYu)
    {
        JiaRe_ON();
    }
    else
    {
        JiaRe_OFF();
    }
		
		 if ((bufe[1]/10 < PHYu) || (bufe[2] > ZhuoYu))
    {
        Buzzer_Turn();
    }
    else
    {
        Buzzer_OFF();
    }

}

int main(void)
{

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    uart_init(9600);       //串口初始化为9600
    delay_init();      //延时函数初始化
    LED_Init();            //初始化与LED连接的硬件接口

    Buzzer_Init();             //下面为外设初始化
    OLED_Init();
    Key_Init();
    AD_Init();
    MyRTC_Init();
    Servo_Init();     //舵机初始化,并设置舵机初始角度
    while (DS18B20_Init()) //DS18B20初始化
    {
        printf("ds18b20 success!");
        delay_ms(200);
    }

    MY_Gizwits_Init();   //机智云初始化

    while (1)
    {
        userHandle();    //数据上传
        gizwitsHandle((dataPoint_t *)&currentDataPoint);   //后台处理,必须放在while里

        if (t % 10 == 0)
        {
            AD0 = AD_GetValue(ADC_Channel_0);    //水位传感器     PA0
            if (AD0 > 4000)AD0 = 4000;
            bufe[0] = (u8)(AD0 / 40);

            AD2 = Get_Adc_Average(ADC_Channel_2, 10);
            PH = (float)AD2 * (3.3 / 4096); //读取ADC通道4的值
            PH = -5.7541 * PH + 16.654; //输出电压范围0~3V3      因为STM32的ADC参考电压是3.3V
            //将ADC的原始值(adcx)转换为电压值。这里假设ADC的参考电压是3.3V,并且ADC的位数是12位(即最大值为4096)。
            bufe[1] = PH * 10;

            AD3 = AD_GetValue(ADC_Channel_3);    //浊度传感器     PA3
            if (AD3 > 4000)AD3 = 4000;
            bufe[2] = (u8)(100 - (AD3 / 40));

            temperature = DS18B20_Get_Temp();
            bufe[3] = temperature;
        }
        t++;

        KeyNum = Key_GetNum();
        if (KeyNum == 1)
        {
            qingping = 0;
            state2 = 2,
            delay_ms(20);
            if (KeyNum == 1)
            {
                state++;
                if (state > 3)
                {
                    state = 0;
                }
            }
        }
        if (state == 0)                                //远程模式
        {
            if (qingping == 0)
            {
                OLED_Clear();
                qingping = 1;
            }           
            TimeRead();
            ChuangGan();
            OLED_ShowChinese(1, 7, 49);
            OLED_ShowChinese(1, 8, 50);
        }
        if (state == 2)                           //自动模式
        {
            OLED_ShowChinese(1, 7, 51);
            OLED_ShowChinese(1, 8, 52);
            TimeRead();
            zhidong();
            ChuangGan();
        }
        if (state == 1)                           //手动模式
        {
            OLED_ShowChinese(1, 7, 18);
            OLED_ShowChinese(1, 8, 52);
            ChuangGan();
            shoudong();
        }
        if (state == 3)                           //阈值设置
        {
            if (qingping == 0)
            {
                OLED_Clear();
                qingping = 1;
            }
            YuZhiSet();
        }
    }
}



void TimeSet()           //设置时间
{
    if (KeyNum == 2)    //PB10
    {
        delay_ms(20);
        if (KeyNum == 2)
        {
            T_state++;
            if (T_state > 2)
            {
                T_state = 0;
            }
        }
    }
    if (T_state == 0)    //时间显示模式
    {
        MyRTC_ReadTime();

        OLED_ShowNum(1, 5, MyRTC_Time[3], 2);    //时
        OLED_ShowString(1, 7, ":");
        OLED_ShowNum(1, 8, MyRTC_Time[4], 2);    //分
        OLED_ShowString(1, 10, ":");
        OLED_ShowNum(1, 11, MyRTC_Time[5], 2);   //秒

        RTC_Time[0] = MyRTC_Time[3];
        RTC_Time[1] = MyRTC_Time[4];
        RTC_Time[2] = MyRTC_Time[5];
    }
    if (T_state == 1)    //修改时间
    {
        if (KeyNum == 5)
        {
            delay_ms(20);
            if (KeyNum == 5)
            {
                T_state1++;
                if (T_state1 > 2)
                {
                    T_state1 = 0;
                }
            }
        }
        if (T_state1 == 0)  //修改时
        {
            if (KeyNum == 4)RTC_Time[0]++;
            if (KeyNum == 3)RTC_Time[0]--;
            if (RTC_Time[0] > 23 & RTC_Time[0] < 100)RTC_Time[0] = 0;
            if (RTC_Time[0] > 100)RTC_Time[0] = 23;
            OLED_ShowNum(1, 5, RTC_Time[0], 2);  //时
        }
        if (T_state1 == 1)  //修改分
        {
            if (KeyNum == 4)RTC_Time[1]++;
            if (KeyNum == 3)RTC_Time[1]--;
            if (RTC_Time[1] > 59 & RTC_Time[1] < 100)RTC_Time[1] = 0;
            if (RTC_Time[1] > 100)RTC_Time[1] = 59;
            OLED_ShowNum(1, 8, RTC_Time[1], 2);  //时
        }
        if (T_state1 == 2)  //修改秒
        {
            if (KeyNum == 4)RTC_Time[2]++;
            if (KeyNum == 3)RTC_Time[2]--;
            if (RTC_Time[2] > 59)RTC_Time[2] = 0;
            if (RTC_Time[2] > 59 & RTC_Time[2] < 100)RTC_Time[2] = 0;
            if (RTC_Time[2] > 100)RTC_Time[2] = 59;
            OLED_ShowNum(1, 11, RTC_Time[2], 2);  //时
        }
    }
    if (T_state == 2)
    {
        MyRTC_Time[3] = RTC_Time[0];
        MyRTC_Time[4] = RTC_Time[1];
        MyRTC_Time[5] = RTC_Time[2];
        MyRTC_SetTime();
        T_state = 0;
    }
}

void TimeRead()
{
    MyRTC_ReadTime();

    OLED_ShowNum(1, 5, MyRTC_Time[3], 2);    //时
    OLED_ShowString(1, 7, ":");
    OLED_ShowNum(1, 8, MyRTC_Time[4], 2);    //分
    OLED_ShowString(1, 10, ":");
    OLED_ShowNum(1, 11, MyRTC_Time[5], 2);   //秒
}


void DingShiMoShi()
{
    TimeRead();

//...............................定时模式..................................../
    if ((MyRTC_Time[3] == RTC_Time1[0]) && (MyRTC_Time[4] == RTC_Time1[1]) && (MyRTC_Time[5] == RTC_Time1[2]))
    {
        //外设操作
    }

    if ((MyRTC_Time[3] == RTC_Time2[0]) && (MyRTC_Time[4] == RTC_Time2[1]) && (MyRTC_Time[5] == RTC_Time2[2]))
    {
        //外设操作
    }

//...............................修改定时时间..................................../

    OLED_ShowChinese(3, 1, 31);
    OLED_ShowString(3, 3, ":");
    OLED_ShowNum(3, 5, RTC_Time1[0], 2);
    OLED_ShowString(3, 7, ":");
    OLED_ShowNum(3, 8, RTC_Time1[1], 2);
    OLED_ShowString(3, 10, ":");
    OLED_ShowNum(3, 11, RTC_Time1[2], 2);

    OLED_ShowChinese(4, 1, 32);
    OLED_ShowString(4, 3, ":");
    OLED_ShowNum(4, 5, RTC_Time2[0], 2);
    OLED_ShowString(4, 7, ":");
    OLED_ShowNum(4, 8, RTC_Time2[1], 2);
    OLED_ShowString(4, 10, ":");
    OLED_ShowNum(4, 11, RTC_Time2[2], 2);


    if (KeyNum == 5)
    {
        delay_ms(20);
        if (KeyNum == 5)
        {
            state_dingshi_yu_switch++;
            if (state_dingshi_yu_switch > 2)
            {
                state_dingshi_yu_switch = 0;
            }
        }
    }

    if (state_dingshi_yu_switch == 1)    //设置阈值开的时间
    {
        if (KeyNum == 2)
        {
            delay_ms(20);
            if (KeyNum == 2)
            {
                state_dingshi_yu_kai++;
                if (state_dingshi_yu_kai > 2)
                {
                    state_dingshi_yu_kai = 0;
                }
            }
        }
        if (state_dingshi_yu_kai == 0)    //时
        {
            if (KeyNum == 3) RTC_Time2[0]++;
            if (KeyNum == 4) RTC_Time2[0]--;
        }
        if (state_dingshi_yu_kai == 1)//分
        {
            if (KeyNum == 3) RTC_Time2[1]++;
            if (KeyNum == 4) RTC_Time2[1]--;
        }
        if (state_dingshi_yu_kai == 2)//秒
        {
            if (KeyNum == 3) RTC_Time2[2]++;
            if (KeyNum == 4) RTC_Time2[2]--;
        }
    }
    else
    {
        if (KeyNum == 2)
        {
            delay_ms(20);
            if (KeyNum == 2)
            {
                state_dingshi_yu_guan++;
                if (state_dingshi_yu_guan > 2)
                {
                    state_dingshi_yu_guan = 0;
                }
            }
        }
        if (state_dingshi_yu_guan == 0)    //时
        {
            if (KeyNum == 3) RTC_Time1[0]++;
            if (KeyNum == 4) RTC_Time1[0]--;
        }
        if (state_dingshi_yu_guan == 1)//分
        {
            if (KeyNum == 3) RTC_Time1[1]++;
            if (KeyNum == 4) RTC_Time1[1]--;
        }
        if (state_dingshi_yu_guan == 2)//秒
        {
            if (KeyNum == 3) RTC_Time1[2]++;
            if (KeyNum == 4) RTC_Time1[2]--;
        }
    }
    if (state3_1 == 0)    //时
    {
        if (KeyNum == 5) RTC_Time1[0]++;
        if (KeyNum == 6) RTC_Time1[0]--;
    }
    if (state3_1 == 1)//分
    {
        if (KeyNum == 5) RTC_Time1[1]++;
        if (KeyNum == 6) RTC_Time1[1]--;
    }
    if (state3_1 == 2)//秒
    {
        if (KeyNum == 5) RTC_Time1[2]++;
        if (KeyNum == 6) RTC_Time1[2]--;
    }
}

void YuZhiSet()
{
    zhidong();
    OLED_ShowChinese(1, 3, 72);   //显示“阈值设置”
    OLED_ShowChinese(1, 4, 73);
    OLED_ShowChinese(1, 5, 74);
    OLED_ShowChinese(1, 6, 75);
	


    OLED_ShowString(2, 1, "S_W_X:");
    OLED_ShowNum(2, 7, ShuiWeiYu_Xia, 2);
    OLED_ShowString(3, 1, "S_W_S:");
    OLED_ShowNum(3, 7, ShuiWeiYu_Shang, 2);	
    OLED_ShowString(4, 10, "PH:");
    OLED_ShowNum(4, 13, PHYu, 2);
    OLED_ShowString(2, 10, "Temp:");
    OLED_ShowNum(2, 15, TempYu, 2);
	  OLED_ShowString(3, 10, "Z_D:");
    OLED_ShowNum(3, 14, ZhuoYu, 2);


    if (KeyNum == 2)                          //自动模式下PB0按键控制阈值切换
    {
        delay_ms(20);
        if (KeyNum == 2)
        {
            state3++;
            if (state3 > 4)
            {
                state3 = 0;
            }
        }
    }

    if (state3 == 0)
    {
        if (KeyNum == 3)ShuiWeiYu_Xia++;
        if (KeyNum == 4)ShuiWeiYu_Xia--;
    }
		    if (state3 == 1)
    {
        if (KeyNum == 3)ShuiWeiYu_Shang++;
        if (KeyNum == 4)ShuiWeiYu_Shang--;
    }
    if (state3 == 4)
    {
        if (KeyNum == 3)PHYu++;
        if (KeyNum == 4)PHYu--;
    }
    if (state3 == 2)
    {
        if (KeyNum == 3)TempYu ++;
        if (KeyNum == 4)TempYu --;
    }
		 if (state3 == 3)
    {
        if (KeyNum == 3)ZhuoYu ++;
        if (KeyNum == 4)ZhuoYu --;
    }
}


void ChuangGan()
{
    OLED_ShowChinese(2, 1, 39);
    OLED_ShowChinese(2, 2, 40);
    OLED_ShowString(2, 5, ":");
    OLED_ShowNum(2, 6, bufe[0], 2);
    OLED_ShowString(2, 8, "%");
    OLED_ShowString(4, 8, "%");

    OLED_ShowString(2, 11, "PH:");
    OLED_ShowNum(2, 14, bufe[1] / 10, 1);
    OLED_ShowString(2, 15, ".");
    OLED_ShowNum(2, 16, bufe[1] % 10, 1);

    OLED_ShowChinese(3, 1, 26);
    OLED_ShowChinese(3, 2, 28);
    OLED_ShowString(3, 5, ":");
    if (temperature < 0)
    {
        OLED_ShowString(3, 6, "-");     //显示负号
        temperature = -temperature;                 //转为正数
    }
    else OLED_ShowString(3, 6, "+");        //去掉负号
    OLED_ShowNum(3, 7, temperature / 10, 2);
    OLED_ShowString(3, 9, ".");
    OLED_ShowNum(3, 10, temperature % 10, 1);

    OLED_ShowChinese(4, 1, 78);
    OLED_ShowChinese(4, 2, 79);
    OLED_ShowString(4, 5, ":");
    OLED_ShowNum(4, 6, bufe[2], 2);
}

8、总结

本设计以单片机作为控制核心芯片,设计出一款具有监测鱼缸水的温度、水位、浊度和PH值等参数,并且通过WIFI模块连接云平台用来实现数据上传和下发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967829.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32系统架构介绍

STM32系统架构 1. CM3/4系统架构2. CM3/4系统架构-----存储器组织结构2.1 寄存器地址映射&#xff08;特殊的存储器&#xff09;2.2 寄存器地址计算2.3 寄存器的封装 3. CM3/4系统架构-----时钟系统 STM32 和 ARM 以及 ARM7是什么关系? ARM 是一个做芯片标准的公司&#xff0c…

美甲美睫门店拓客营销小程序开发

一套针对美甲美睫门店开发的营销拓客小程序 小程序支持线上线下服务预约、客户管理、多种客户营销方式以及员工管理、门店管理、门店营销活动创建开展等等。 用户端&#xff1a;服务预约、次卡、时卡办理&#xff0c;会员办理、会员升级、会员权益&#xff0c;复购攒积分&…

deepseek+“D-id”或“即梦AI”快速生成短视频

1、deepseek生成视频脚本 1.1、第一步&#xff1a;使用通用模板提出需求&#xff0c;生成视频脚本 对话输入示例脚本1&#xff1a; 大年初五是迎财神的日志&#xff0c;帮我生成10秒左右的短视频&#xff0c; 体现一家3口在院子里欢庆新年&#xff0c; 孩子在院子里放鞭炮烟…

【STM32】ADC|多通道ADC采集

本次实现的是ADC实现数字信号与模拟信号的转化&#xff0c;数字信号时不连续的&#xff0c;模拟信号是连续的。 1.ADC转化的原理 模拟-数字转换技术使用的是逐次逼近法&#xff0c;使用二分比较的方法来确定电压值 当单片机对应的参考电压为3.3v时&#xff0c;0~ 3.3v(模拟信…

从零到一:基于Rook构建云原生Ceph存储的全面指南(上)

文章目录 一.Rook简介二.Rook与Ceph架构2.1 Rook结构体系2.2 Rook包含组件1&#xff09;Rook Operator2&#xff09;Rook Discover3&#xff09;Rook Agent 2.3 Rook与kubernetes结合的架构图如下2.4 ceph特点2.5 ceph架构2.6 ceph组件 三.Rook部署Ceph集群3.1 部署条件3.3 获取…

如何在本地部署deepseek?

1、打开ollama官网&#xff0c;点download&#xff08;下载需要翻墙 https://ollama.com/ 2、双击下载好的OllamaSetup.exe&#xff0c;一直点下一步即可。 3、winR 输入cmd&#xff0c;打开命令提示符&#xff0c;输入ollama。有以下提示即安装完成。 4、可以根据 nvidia-…

团结引擎 OpenHarmony 平台全面支持 UAAL,实现引擎能力嵌入原生应用

团结引擎1.4版本已于近日正式发布&#xff01;在这一版本中&#xff0c;OpenHarmony 平台迎来了一个具有里程碑意义的更新&#xff1a;全面支持 Used as a Library&#xff08;UAAL&#xff09;。UAAL 这一技术方案&#xff0c;具有将引擎嵌入原生应用的独特能力&#xff0c;其…

【DeepSeek】在本地计算机上部署DeepSeek-R1大模型实战(完整版)

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&…

【Elasticsearch】Elasticsearch检索方式全解析:从基础到实战(二)

接着上一篇文章&#xff1b;我们继续来研究es的复杂检索 文章目录 (1) bool用来做复合查询&#xff08;2&#xff09;Filter【结果过滤】&#xff08;3&#xff09;term&#xff08;4&#xff09;Aggregation&#xff08;执行聚合&#xff09; (1) bool用来做复合查询 复合语…

如何使用DiskGenius做备份并且恢复?

如何使用DiskGenius做备份并且恢复&#xff1f; 前言 前言 此操作适用于将1台旧电脑的数据迁移到新电脑上 一、进入PE使用DG分区进行备份镜像 二、分区备份 1选择要操作的硬盘——2选择操作分区——3备份分区 1选择文件路径&#xff08;保存pmf文件的位置选择存到U盘中&…

ZZNUOJ(C/C++)基础练习1091——1100(详解版)⭐

目录 1091 : 童年生活二三事&#xff08;多实例测试&#xff09; C C 1092 : 素数表(函数专题&#xff09; C C 1093 : 验证哥德巴赫猜想&#xff08;函数专题&#xff09; C C 1094 : 统计元音&#xff08;函数专题&#xff09; C C 1095 : 时间间隔&#xff08;多…

【Spring AI】基于SpringAI+Vue3+ElementPlus的QA系统实现一

整理不易&#xff0c;请不要吝啬你的赞和收藏。 1. 前言 这是 SpringAI 系列的第二篇文章&#xff0c;这篇文章将介绍如何基于 RAG 技术&#xff0c;使用 SpringAI Vue3 ElementPlus 实现一个 Q&A 系统。本文使用 deepseek 的 DeepSeek-V3 作为聊天模型&#xff0c;使用…

【Vue】在Vue3中使用Echarts的示例 两种方法

文章目录 方法一template渲染部分js部分方法一实现效果 方法二template部分js or ts部分方法二实现效果 贴个地址~ Apache ECharts官网地址 Apache ECharts示例地址 官网有的时候示例显示不出来&#xff0c;属于正常现象&#xff0c;多进几次就行 开始使用前&#xff0c;记得先…

1.【线性代数】——方程组的几何解释

1.方程组的几何解释 概述举例举例一1. matrix2.row picture3.column picture 概述 三种表示方法 matrixrow picturecolumn picture 举例 举例一 { 2 x − y 0 − x 2 y 3 \begin{cases} 2x - y 0 \\ -x 2y 3 \end{cases} {2x−y0−x2y3​ 1. matrix [ 2 − 1 − 1 2…

KITE提示词框架:引导大语言模型的高效新工具

大语言模型的应用日益广泛。然而&#xff0c;如何确保这些模型生成的内容在AI原生应用中符合预期&#xff0c;仍是一个需要不断探索的问题。以下内容来自于《AI 原生应用开发&#xff1a;提示工程原理与实战》一书&#xff08;京东图书&#xff1a;https://item.jd.com/1013604…

【论文阅读】Revisiting the Assumption of Latent Separability for Backdoor Defenses

https://github.com/Unispac/Circumventing-Backdoor-Defenses 摘要和介绍 在各种后门毒化攻击中&#xff0c;来自目标类别的毒化样本和干净样本通常在潜在空间中形成两个分离的簇。 这种潜在的分离性非常普遍&#xff0c;甚至在防御研究中成为了一种默认假设&#xff0c;我…

基于Springmvc+MyBatis+Spring+Bootstrap+EasyUI+Mysql的个人博客系统

基于SpringmvcMyBatisSpringBootstrapEasyUIMysql的个人博客系统 1.项目介绍 使用Maven3Spring4SpringmvcMybatis3架构&#xff1b;数据库使用Mysql&#xff0c;数据库连接池使用阿里巴巴的Druid&#xff1b;使用Bootstrap3 UI框架实现博客的分页显示&#xff0c;博客分类&am…

香港中文大学 Adobe 推出 MotionCanvas:开启用户掌控的电影级图像视频创意之旅。

简介&#xff1a; 亮点直击 将电影镜头设计引入图像到视频的合成过程中。 推出了MotionCanvas&#xff0c;这是一种简化的视频合成系统&#xff0c;用于电影镜头设计&#xff0c;提供整体运动控制&#xff0c;以场景感知的方式联合操控相机和对象的运动。 设计了专门的运动条…

数据结构 单链表的模拟实现

一、链表的定义 线性表的链式存储就是链表。 它是将元素存储在物理上任意的存储单元中&#xff0c;由于⽆法像顺序表⼀样通过下标保证数据元素之间的逻辑关系&#xff0c;链式存储除了要保存数据元素外&#xff0c;还需额外维护数据元素之间的逻辑关系&#xff0c;这两部分信息…