基于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 *)¤tDataPoint, 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); //串口初始化为9600delay_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 *)¤tDataPoint); //后台处理,必须放在while里if (t % 10 == 0){AD0 = AD_GetValue(ADC_Channel_0); //水位传感器 PA0if (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); //浊度传感器 PA3if (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模块连接云平台用来实现数据上传和下发。
相关文章:

基于STM32的智能鱼缸水质净化系统设计
🤞🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…...

JAVA安全—FastJson反序列化利用链跟踪autoType绕过
前言 FastJson这个漏洞我们之前讲过了,今天主要是对它的链条进行分析一下,明白链条的构造原理。 Java安全—log4j日志&FastJson序列化&JNDI注入_log4j漏洞-CSDN博客 漏洞版本 1.2.24及以下没有对序列化的类做校验,导致漏洞产生 1.2.25-1.2.41增加了黑名单限制,…...

格式化字符串漏洞(Format String Vulnerability)
格式化字符串漏洞(Format String Vulnerability)是程序中因不当处理格式化字符串参数而导致的一类安全漏洞,常被攻击者利用来读取内存数据、篡改程序执行流程,甚至执行任意代码。以下是对其原理、利用方式及防御措施的详细解析&am…...

C++--iomanip库
目录 1. 设置字段宽度:std::setw() 2. 设置浮点数精度:std::setprecision() 3. 设置填充字符:std::setfill() 4. 控制对齐方式:std::left 和 std::right,std::internal 5. 控制进制输出:std::hex、std…...

Redis 集群原理、主从复制和哨兵模式的详细讲解
引言:本文记录了博主在学习Redis的过程中的原理,了解为什么使用与怎么样使用 Redis 集群,在使用 Redis 集群时出现的主从复制和哨兵模式的相关知识。本文并不涉及Redis安装。 文章目录 一、简单介绍什么是 Redis二、为什么要使用 Redis 集群三…...

基于Java的远程视频会议系统(源码+系统+论文)
第一章 概述 1.1 本课题的研究背景 随着人们对视频和音频信息的需求愈来愈强烈,追求远距离的视音频的同步交互成为新的时尚。近些年来,依托计算机技术、通信技术和网络条件的发展,集音频、视频、图像、文字、数据为一体的多媒体信息ÿ…...

springboot 事务管理
在Spring Boot中,事务管理是通过Spring框架的事务管理模块来实现的。Spring提供了声明式事务管理和编程式事务管理两种方式。通常,我们使用声明式事务管理,因为它更简洁且易于维护。 1. 声明式事务管理 声明式事务管理是通过注解来实现的。…...

深度学习-神经机器翻译模型
以下为你介绍使用Python和深度学习框架Keras(基于TensorFlow后端)实现一个简单的神经机器翻译模型的详细步骤和代码示例,该示例主要处理英 - 法翻译任务。 1. 安装必要的库 首先,确保你已经安装了以下库: pip insta…...

.NET周刊【2月第1期 2025-02-02】
国内文章 dotnet 9 已知问题 默认开启 CET 导致进程崩溃 https://www.cnblogs.com/lindexi/p/18700406 本文记录 dotnet 9 的一个已知且当前已修问题。默认开启 CET 导致一些模块执行时触发崩溃。 dotnet 使用 ColorCode 做代码着色器 https://www.cnblogs.com/lindexi/p/…...

【合集】Java进阶——Java深入学习的笔记汇总 amp; 再论面向对象、数据结构和算法、JVM底层、多线程
前言 spring作为主流的 Java Web 开发的开源框架,是Java 世界最为成功的框架,持续不断深入认识spring框架是Java程序员不变的追求;而spring的底层其实就是Java,因此,深入学习Spring和深入学习Java是硬币的正反面&…...

GPU、CUDA 和 cuDNN 学习研究【笔记】
分享自己在入门显存优化时看过的一些关于 GPU 和 CUDA 和 cuDNN 的网络资料。 更多内容见: Ubuntu 22.04 LTS 安装 PyTorch CUDA 深度学习环境-CSDN博客CUDA 计算平台 & CUDA 兼容性【笔记】-CSDN博客 文章目录 GPUCUDACUDA Toolkit都包含什么?NVID…...

【5】阿里面试题整理
[1]. 介绍一下ZooKeeper ZooKeeper是一个开源的分布式协调服务,核心功能是通过树形数据模型(ZNode)和Watch机制,解决分布式系统的一致性问题。 它使用ZAB协议保障数据一致性,典型场景包括分布式锁、配置管理和服务注…...

计算机毕业设计hadoop+spark+hive物流预测系统 物流大数据分析平台 物流信息爬虫 物流大数据 机器学习 深度学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

Wpf美化按钮,输入框,下拉框,dataGrid
Wpf美化按钮,输入框,下拉框,dataGrid 引用代码后 引用资源 <ControlTemplate x:Key"CustomProgressBarTemplate" TargetType"ProgressBar"><Grid><Border x:Name"PART_Track" CornerRadius&q…...

搜索插入位置:二分查找的巧妙应用
问题描述 给定一个已排序的整数数组 nums 和一个目标值 target,要求在数组中找到目标值并返回其索引。如果目标值不存在于数组中,则返回它按顺序插入的位置。必须使用时间复杂度为 O(log n) 的算法。 示例: 示例1: 输入: nums …...

Cocos2d-x 游戏开发-打包apk被默认自带了很多不必要的权限导致apk被报毒,如何在Cocos 2d-x中强制去掉不必要的权限-优雅草卓伊凡
Cocos2d-x 游戏开发-打包apk被默认自带了很多不必要的权限导致apk被报毒,如何在Cocos 2d-x中强制去掉不必要的权限-优雅草卓伊凡 实战操作 去除权限 要在 Cocos2d-x 开发的游戏中去掉 APK 自带权限,可以按照以下步骤操作: 编辑 AndroidMa…...

自动化xpath定位元素(附几款浏览器xpath插件)
在 Web 自动化测试、数据采集、前端调试中,XPath 仍然是不可或缺的技能。虽然 CSS 选择器越来越强大,但面对复杂 DOM 结构时,XPath 仍然更具灵活性。因此,掌握 XPath,不仅能提高自动化测试的稳定性,还能在爬…...

String类(6)
大家好,今天我们继续来学习一下String类的查找方法,主要是反向查找的一些方法。 ⭐️从后往前找一样的道理,如果找到了就返回对应字符的下标. 如果后面有对应的字符,则会返回第一个遇到的字符下标. ⭐️注意一下传入字符串的找法…...

动态表格html
题目: 要求: 1.表格由专业班级学号1-10号同学的信息组成,包括:学号、姓 名、性别、二级学院、班级、专业、辅导员; 2.表格的奇数行字体为黑色,底色为白色;偶数行字体为白色,底 色为黑…...

ZU47DR 100G光纤 高性能板卡
简介 2347DR是一款最大可提供8路ADC接收和8路DAC发射通道的高性能板卡。板卡选用高性价比的Xilinx的Zynq UltraScale RFSoC系列中XCZU47DR-FFVE1156作为处理芯片(管脚可以兼容XCZU48DR-FFVE1156,主要差别在有无FEC(信道纠错编解码࿰…...

mysql8.0使用pxc实现高可用
环境准备 准备三台虚拟机,其对应的主机名和IP地址为 pxc-1192.168.190.129pxc-2192.168.190.133pxc-3192.168.190.134 解析,都要做解析 测试 下载pxc的安装包, 官网:https://www.percona.com/downloads 选择8.0的版本并下载,…...

Kotlin 使用 Chrome 无头浏览器
1. 概念 无头浏览器在类似于流行网络浏览器的环境中提供对网页的自动控制,但是通过命令行界面或使用网络通信来执行。 它们对于测试网页特别有用,因为它们能够像浏览器一样呈现和理解超文本标记语言,包括页面布局、颜色、字体选择以及JavaSc…...

Arbess基础教程-创建流水线
Arbess(谐音阿尔卑斯) 是一款开源免费的 CI/CD 工具,本文将介绍如何使用 Arbess 配置你的第一条流水线,以快速入门上手。 1. 创建流水线 根据不同需求来创建不同的流水线。 1.1 配置基本信息 配置流水线的基本信息,如分组,环境&…...

vscode安装ESP-IDF
引言 ESP-IDF(Espressif IoT Development Framework)是乐鑫官方为其 ESP32、ESP32-S 系列等芯片提供的物联网开发框架。结合 Visual Studio Code(VSCode)这一强大的开源代码编辑器,能极大提升开发效率。本教程将详细介…...
第31周:文献阅读
目录 摘要 Abstract 文献阅读 问题引入 研究背景 研究动机 创新点 动态预训练方法(DynPT) 深度循环神经网络(DRNN) 传感器选择 方法论 时间序列的动态预训练 异构传感器数据的DRNN 基于稀疏度的传感器过滤 实验研…...

GenAI + 电商:从单张图片生成可动态模拟的3D服装
在当今数字化时代,电子商务和虚拟现实技术的结合正在改变人们的购物体验。特别是在服装行业,消费者越来越期待能够通过虚拟试衣来预览衣服的效果,而无需实际穿戴。Dress-1-to-3 技术框架正是为此而生,它利用生成式AI模型(GenAI)和物理模拟技术,将一张普通的穿衣照片转化…...

进程(1)
1.什么是进程 要回答这个问题首先我们要解答什么是程序的问题。什么是程序呢?程序本质是就是存放在磁盘上的文件。我们要运行程序,首先必须要将其加载到内存中,这样才能与cpu交互,这是冯诺依曼体系架构所决定的。 程序运行起来后…...

ChatGPT搜索免费开放:AI搜索引擎挑战谷歌霸主地位全面分析
引言 2025年2月6日,OpenAI宣布ChatGPT搜索功能向所有用户免费开放,且无需注册登录。这一重大举措在搜索引擎行业引发巨大反响,有观点认为"谷歌搜索时代即将结束"。本文将深入分析ChatGPT生成式AI搜索对谷歌搜索业务及全球搜索市场…...

hadoop之MapReduce:片和块
假如我现在500M这样的数据,如何存储? 500M 128M 128M 128M 116M 分为四个块进行存储。 计算的时候,是按照片儿计算的,而不是块儿。 块是物理概念,一个块就是128M ,妥妥的,毋庸置疑。 片是逻辑概念&…...

GitPuk快速安装配置教程(入门级)
GitPuk是一款国产开源免费的代码管理工具,工具简洁易用,开源免费,本文将讲解如何快速安装和配置GitPuk,以快速入门上手。 1、安装 支持 Windows、Mac、Linux、docker 等操作系统。 1.1 Linux安装 以下以Centos7安装…...