当前位置: 首页 > news >正文

基于STM32的热带鱼缸控制系统的设计

文章目录

  • 一、热带鱼缸控制系统
    • 1.题目要求
    • 2.思路
    • 3.电路仿真
      • 3.1 未仿真
      • 3.2 开始仿真,显示屏显示水温、浑浊度、光照强度等值
      • 3.3 当水温低于阈值,开启加热并声光报警
      • 3.4 当浑浊度高于阈值,开启自动换水并声光报警
      • 3.5 当光照低于阈值,开启补光并声光报警
      • 3.6 手动开启增氧和喂食
      • 3.7 远程监控水温等数据,远程控制增氧喂食以及修改温度阈值等
    • 4.仿真程序
      • 4.1 程序说明
      • 4.2 主程序
      • 4.3 OLED显示程序
      • 4.4 串口指令程序
  • 二、总结



一、热带鱼缸控制系统

1.题目要求

部件:
主控:STM32
显示:OLED
温度:防水型DS18B20
浑浊度:TSW-30
光照:光敏电阻
无线通信:蓝牙
继电器5(换水、加热、增氧、喂食、补光)
声光报警:蜂鸣器+LED
按键
5

主要功能需求:

1、实时监测水温、水体浑浊度、光照强度,并显示在OLED屏幕上。

2、通过蓝牙模块将监测到的各项数据传输到手机APP,实现远程监控,同时可以通过手机进行远程控制。

3、水温、光照低于阈值或浑浊度高于阈值开启声光报警。当浑浊度超过阈值,自动开启换水;光照低于阈值,开启补光;水温低于阈值,开启加热。

4、通过按键可以开启增氧、喂食,以及修改温度、浑浊度和光照强度的阈值。

2.思路

主控是STM32,这里我们选择常用的STM32F103C8T6单片机

在这里插入图片描述

显示:OLED

显示的内容比较多1个界面可能不够显示,所以用多个界面,界面切换选择按键切换

在这里插入图片描述

温度:防水型DS18B20

在这里插入图片描述

浑浊度:TSW-30(proteus仿真没有该传感器,所以采用滑动变阻器模拟)

在这里插入图片描述

光照:光敏电阻

在这里插入图片描述

无线通信:蓝牙

在这里插入图片描述

继电器*5(换水、加热、增氧、喂食、补光)和 声光报警:蜂鸣器+LED

在这里插入图片描述

按键*5

通过按键手动开启/关闭增氧,手动开启/关闭喂食,这里两个按键
要修改温度,浑浊度,光照强度的阈值,一共3个阈值,选择用1个按键来切换选择的阈值,另外2个按键增大/减小阈值,这里三个按键。

在这里插入图片描述

3.电路仿真

3.1 未仿真

在这里插入图片描述

3.2 开始仿真,显示屏显示水温、浑浊度、光照强度等值

在这里插入图片描述

3.3 当水温低于阈值,开启加热并声光报警

在这里插入图片描述

3.4 当浑浊度高于阈值,开启自动换水并声光报警

在这里插入图片描述

3.5 当光照低于阈值,开启补光并声光报警

在这里插入图片描述

3.6 手动开启增氧和喂食

在这里插入图片描述

3.7 远程监控水温等数据,远程控制增氧喂食以及修改温度阈值等

远程监控水温,浑浊度,光照强度等数据

远程控制打开增氧,关闭增氧

远程控制打开喂食,关闭喂食

在这里插入图片描述

按下切换按键,切换为设置温度阈值界面,更改温度阈值为50

在这里插入图片描述

按下切换按键,切换为设置浑浊度阈值界面,更改温度阈值为66

在这里插入图片描述
按下切换按键,切换为设置光照阈值界面,更改温度阈值为80
在这里插入图片描述

4.仿真程序

4.1 程序说明

主控芯片:STM32F103C8
HSI:64MHZ
Systick: 1ms

浑浊度传感器:ADC(PA0)

光照传感器:LDR(PA2)

DS18B20温度传感器:DAT(PA4)

模拟蓝牙模块(Uart1):9600(PA9:tx1,PA10:rx1)

声光报警:BUZZER(PA15)

按键:
KEY1(PB0)
KEY2(PB1)
KEY3(PB2)
KEY2(PB3)
KEY5(PB4)

换水:RELAY1(PB6)
加热:RELAY2(PB7)
增氧:RELAY3(PB8)
喂食:RELAY4(PB9)
补光:RELAY5(PB10)

OLED显示屏:SCL(PB14),SDA(PB15)

在这里插入图片描述

串口协议
举例如发送*Temp50,即设置温度阈值位50度
*TempXX 设置温度阈值 XX取值为0-99
*MuddXX 设置浑浊度阈值 XX取值为0-99
*IlluXX 设置光照阈值 XX取值为0-99
*oxygX 开启/关闭增氧 X取值为0-1
*feedX 开启/关闭喂食 X取值为0-1
*Read 远程监控水温、水体浑浊度、光照强度等数据,

4.2 主程序

/* Includes ------------------------------------------------------------------*/
#include "Drv_UserSystem.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
/*** @brief  main function.* @param  none* @retval none*/
int main(void)
{UserSystemInit();//用户配置初始化		while (1){			if(stSysTime.flg._10ms + TEN_MILLISECOND < Time_millis()) //10ms{stSysTime.flg._10ms = Time_millis();	Key_Scan();//按键扫描					}	if(stSysTime.flg._50ms + FIFTY_MILLISECOND < Time_millis()) //50ms{stSysTime.flg._50ms = Time_millis();ADC_Scan();//采集浑浊度和光照强度				}				if(stSysTime.flg._100ms + BEST_MILLISECOND < Time_millis()) //100ms{stSysTime.flg._100ms = Time_millis();		DS18B20_Collect_data();//DS18B20采集温度数据					OLED_Handel();//OLED显示			Forewarning_Handel();//预警函数		Receive_data_Handel();//数据接收判断				IWDG_ReloadCounter();//清开门狗 				}				}
}

4.3 OLED显示程序

/******************************************************************************** 函数名:OLED_Handel* 描述  :OLED显示* 输入  :void* 输出  :void* 调用  :初始化* 备注  :100ms
*******************************************************************************/
void OLED_Handel(void)
{  	if(ADC_Flag){	if(Threshold_switching == 0){OLED_Show_Character(1,1,0,16);//水OLED_Show_Character(1,2,1,16);//温		OLED_Show_Character(1,3,2,16);//:	OLED_ShowNum(1,7,Temp_High,2);	OLED_ShowString(1, 9, ".");	OLED_ShowNum(1,10,Temp_Low,1);	OLED_Show_Character(1,6,3,16);//°OLED_ShowString(1, 13, "C");OLED_Show_Character(2,1,4,16);//浑OLED_Show_Character(2,2,5,16);//度OLED_Show_Character(2,3,6,16);//度				OLED_Show_Character(2,4,2,16);//:OLED_ShowNum(2,9,ADC1_Value,2);	OLED_ShowString(2, 11, "%");			OLED_Show_Character(3,1,7,16);//光OLED_Show_Character(3,2,8,16);//照OLED_Show_Character(3,3,9,16);//强OLED_Show_Character(3,4,10,16);//度		OLED_Show_Character(3,5,2,16);//:		OLED_ShowNum(3,11,ADC2_Value,2);	OLED_ShowString(3, 13, "%");}else if(Threshold_switching == 1){OLED_Show_Character(1,1,0,16);//水OLED_Show_Character(1,2,1,16);//温		OLED_Show_Character(1,3,11,16);//阈OLED_Show_Character(1,4,12,16);//值					OLED_Show_Character(1,5,2,16);//:	OLED_ShowNum(1,11,Temp_Threshold,2);	OLED_Show_Character(1,7,3,16);//°OLED_ShowString(1, 15, "C");				}else if(Threshold_switching == 2){OLED_Show_Character(1,1,4,16);//浑OLED_Show_Character(1,2,5,16);//度OLED_Show_Character(1,3,6,16);//度		OLED_Show_Character(1,4,11,16);//阈OLED_Show_Character(1,5,12,16);//值					OLED_Show_Character(1,6,2,16);//:	OLED_ShowNum(1,13,ADC1_Threshold,2);	OLED_ShowString(1, 15, "%");				}	else if(Threshold_switching == 3){	OLED_Show_Character(1,1,7,16);//光OLED_Show_Character(1,2,8,16);//照					OLED_Show_Character(1,3,11,16);//阈OLED_Show_Character(1,4,12,16);//值					OLED_Show_Character(1,5,2,16);//:	OLED_ShowNum(1,13,ADC2_Threshold,2);	OLED_ShowString(1, 15, "%");				}			}			
}

4.4 串口指令程序

/******************************************************************************** 函数名:Send_Cmd1* 描述  :设置温度阈值* 输入  :void* 输出  :void* 调用  :需要时调用* 备注  :举例如发送*Temp50,即设置温度阈值位50度*******************************************************************************/
void Send_Cmd1(void)
{uint8_t i = 0; variable1 = (AsciiToHex(uart1_rx_buf[i+5])*10+AsciiToHex(uart1_rx_buf[i+6]));if(variable1 < 99){Temp_Threshold = variable1;printf("手机设置的温度阈值 = %d\r\n",Temp_Threshold);	}else{printf("手机设置的温度阈值超出设置范围 \r\n");			}
}/******************************************************************************** 函数名:Send_Cmd2* 描述  :设置水体浑浊度阈值* 输入  :void* 输出  :void* 调用  :需要时调用* 备注  :*******************************************************************************/
void Send_Cmd2(void)
{uint8_t i = 0;variable2 = (AsciiToHex(uart1_rx_buf[i+5])*10+AsciiToHex(uart1_rx_buf[i+6]));if(variable2 < 99){ADC1_Threshold = variable2;printf("手机设置的水体浑浊度阈值 = %d\r\n",ADC1_Threshold);	}	else{printf("手机设置的水体浑浊度阈值超出设置范围 \r\n");			}	
}/******************************************************************************** 函数名:Send_Cmd3* 描述  :设置光照阈值* 输入  :void* 输出  :void* 调用  :需要时调用* 备注  :*******************************************************************************/
void Send_Cmd3(void)
{uint8_t i = 0;variable3 = (AsciiToHex(uart1_rx_buf[i+5])*10+AsciiToHex(uart1_rx_buf[i+6]));if(variable3 < 99){ADC2_Threshold = variable3;printf("手机设置的光照阈值 = %d\r\n",ADC2_Threshold);}		else{printf("手机设置的光照阈值超出设置范围 \r\n");			}	
}/******************************************************************************** 函数名:Send_Cmd4* 描述  :开启/关闭增氧 * 输入  :void* 输出  :void* 调用  :需要时调用* 备注  :*******************************************************************************/
void Send_Cmd4(void)
{uint8_t i = 0;variable4 = AsciiToHex(uart1_rx_buf[i+5]);if(variable4 == 0){Relay3_Off();	printf("关闭增氧\r\n");}		else if (variable4 == 1){Relay3_On();			printf("打开增氧 \r\n");			}	else {printf("手机设置的供氧模式超出设置范围 \r\n");			}
}/******************************************************************************** 函数名:Send_Cmd5* 描述  :开启/关闭喂食* 输入  :void* 输出  :void* 调用  :需要时调用* 备注  :*******************************************************************************/
void Send_Cmd5(void)
{uint8_t i = 0;variable5 = AsciiToHex(uart1_rx_buf[i+5]);if(variable5 == 0){Relay4_Off();	printf("关闭喂食\r\n");}		else if (variable5 == 1){Relay4_On();			printf("打开喂食 \r\n");			}	else {printf("手机设置的喂食模式超出设置范围 \r\n");			}
}/******************************************************************************** Function    : Receive_data_Handel* Description : 数据接收判断* Input       : 无* Return      : 无* Call        : 100ms* Others      :*******************************************************************************/
void Receive_data_Handel(void)
{uint8_t i = 0;if(uart1_rx_finsh){	  for(i = 0;i< 20; i++){if(uart1_rx_buf[i] == '*')	{switch(uart1_rx_buf[i+1]){case  'T':Send_Cmd1();break;//*TempXX		case  'M':Send_Cmd2();break;//*MuddXXcase  'I':Send_Cmd3();break;//*IlluXX		case  'o':Send_Cmd4();break;//*oxygX		case  'f':Send_Cmd5();break;//*feedX		case  'R':Printf_Task();break;//*Read							default:break;							}							}}uart1_rx_finsh = 0;	uart1_rx_count = 0;memset(uart1_rx_buf,0,RX_MAX_NUM);				}	
}/******************************************************************************** Function    : Printf_Task* Description : 打印数据任务* Input       : 无* Return      : 无* Call        : 1s* Others      :*******************************************************************************/
void Printf_Task(void)
{if(ADC_Flag){	printf("水温=%d.%d 水体浑浊度=%d 光照强度=%d\r\n",Temp_High,Temp_Low,ADC1_Value,ADC2_Value);	}
}

二、总结

今天主要讲了基于STM32的热带鱼缸控制系统的设计。

感谢你的观看!

在这里插入图片描述

相关文章:

基于STM32的热带鱼缸控制系统的设计

文章目录 一、热带鱼缸控制系统1.题目要求2.思路3.电路仿真3.1 未仿真3.2 开始仿真&#xff0c;显示屏显示水温、浑浊度、光照强度等值3.3 当水温低于阈值&#xff0c;开启加热并声光报警3.4 当浑浊度高于阈值&#xff0c;开启自动换水并声光报警3.5 当光照低于阈值&#xff0c…...

Vue项目整合与优化

前几篇文章&#xff0c;我们讲述了 Vue 项目构建的整体流程&#xff0c;从无到有的实现了单页和多页应用的功能配置&#xff0c;但在实现的过程中不乏一些可以整合的功能点及可行性的优化方案&#xff0c;就像大楼造完需要进行最后的项目验收改进一样&#xff0c;有待我们进一步…...

WinForm开发-自定义组件-1. 工具栏: UcompToolStrip

这里写自定义目录标题 1. 工具栏: UcompToolStrip1.1 展示效果1.2 代码UcompToolStrip.csUcompToolStrip.Designer.cs 1. 工具栏: UcompToolStrip 自定义一些Winform组件 1.1 展示效果 1&#xff09;使用效果 2&#xff09;控件事件 1.2 代码 设计 编码 UcompToolStrip.…...

法律专业legal case的留学论文写作技巧分析(1)

对于法律专业的留学生而言&#xff0c;案例的分析是写作的重要方面。无论留学的国家是英、美、澳洲还是加拿大&#xff0c;它们都属于case law 的法律体系。一个非常显著的特点便是通过对案例进行分析和提炼&#xff0c;从中总结提炼出principle和rules。case analysis的留学论…...

2025编程技术前沿:探索最新的开发工具与趋势

随着技术的飞速发展&#xff0c;编程领域每天都在演化&#xff0c;新的技术、框架和工具层出不穷。本文将聚焦2025年最具潜力和吸引力的编程技术与工具&#xff0c;从前沿语言到最受欢迎的开发框架&#xff0c;带您一起探索软件开发领域的最新趋势。 一、编程语言的新生代之星…...

sqlserver sql转HTMM邮件发送

通过sql的形式&#xff0c;把表内数据通过邮件的形式发送出去 declare title varchar(100) DECLARE stat_date CHAR(10),create_time datetime SET stat_dateCONVERT(char(10),GETDATE(),120) SET create_timeDATEADD(MINUTE,-20,GETDATE()) DECLARE xml NVARCHAR (max) DECLAR…...

GeoTrust True BusinessID Wildcard

GeoTrust由DigiCert 提供支持&#xff0c;是最受信任和尊重的品牌之一&#xff0c;以提供高保证的网站安全而闻名。 GeoTrust True BusinessID通配符证书 – 以低成本保护多个主机名。即使将其用于您的公司主页或电子邮件服务器主机名&#xff0c;保护所有敏感信息也是您的目标…...

R语言的数据结构

R语言的数据结构 R语言是专门为统计计算和数据分析而设计的一种编程语言&#xff0c;因其强大的数据处理能力而受到广泛欢迎。在R中&#xff0c;数据结构是理解和有效使用R语言的基础。本文将详细介绍R语言中的主要数据结构&#xff0c;包括向量、矩阵、数据框、列表、因子等&…...

安装和配置MySQL教程

以下是在不同操作系统下安装和配置MySQL的详细教程&#xff1a; Windows系统 下载MySQL安装包 访问MySQL官方网站&#xff08;https://dev.mysql.com/downloads/mysql/&#xff09;&#xff0c;根据你的操作系统版本&#xff08;32位或64位&#xff09;下载相应的MySQL Commu…...

黑马Java面试教程_P10_设计模式

系列博客目录 文章目录 系列博客目录前言1. 工厂方法模式1.1 概述1.2 简单工厂模式1.2.1 结构1.2.2 实现1.2.3 优缺点 1.3 工厂方法模式1.3.1 概念1.3.2 结构1.3.3 实现1.3.4 优缺点 1.4 抽象工厂模式1.4.1 概念1.4.2 结构1.4.3 实现1.4.4 优缺点1.4.5 使用场景 总结&#xff0…...

043_小驰私房菜_MTK Camera,Hal层将camera型号写到property属性中

【问题背景】 app层需要知道当前设备的摄像头型号,然后做一些差异化处理。底下如何上报这个摄像头型号? 【分析】 在kernel和hal层,都是有地方能获取到当前摄像头的型号,就看在哪里添加方便。获取到摄像头硬件型号后,将其写入到property属性, 然后app就可以通过读取该…...

基础图形化界面的一个图片爬虫期末

下面是爬取界面: 点击即可自动化爬取 以下是完整代码: import tkinter as tk import requests import os #用于文件和目录操作。# 图片爬虫函数 def image_spider(textbox):headers = {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, …...

Outlook2024版如何回到经典Outlook

Outlook2024版如何回到经典Outlook 如果新加入一家公司&#xff0c;拿到的电脑&#xff0c;大概率是最新版的Windows, 一切都是新的。 如果不coding, 使用国产的foxmail大概就可以解决一切问题了。可惜老程序员很多Coding都是基于传统Outlook的&#xff0c;科技公司所有人都是I…...

仿生的群体智能算法总结之二(十种)

群体智能算法是一类通过模拟自然界中的群体行为来解决复杂优化问题的方法。以下是10种常见的群体智能算法,接上文https://blog.csdn.net/lzm12278828/article/details/144933367仿生的群体智能算法总结之一(十种)-CSDN博客https://blog.csdn.net/lzm12278828/article/detail…...

SpringBoot入门之创建一个Hello World项目

文章目录 一、使用传统的方式1、创建一个SpringBoot项目2、配置pom.xml文件3、下载Maven依赖4、创建一个Controller类&#xff1a;com.devops.controller.HelloController5、创建一个引导类&#xff1a;com.devops.HelloApplication6、启动项目8、访问80809、完整项目结构 二、…...

MySQL与标准SQL的区别

我们试图使MySQL Server遵循ANSI SQL标准和ODBC SQL标准&#xff0c;但MySQL Server在某些情况下执行不同的操作&#xff1a; MySQL和标准SQL特权系统之间有一些区别。例如&#xff0c;在MySQL中&#xff0c;删除表时不会自动撤销表的特权。您必须显式发出REVOKE来撤销表的特权…...

docker中使用Dockerfile设置Volume挂载点

关于在docker中如何使用Volume&#xff0c;可以参考文章&#xff1a; docker中使用Volume完成数据共享-CSDN博客 如果想在生成docker镜像的时候设置好挂载点&#xff0c;而不是在运行镜像生成容器时生成。 下面以自建一个tomcat镜像为例&#xff0c;演示如何在生成镜像时设置…...

Samsung手机首次主要采用竞对Micron LPDDR5内存

根据韩国媒体《韩国先驱报》&#xff08;The Korea Herald&#xff09;的报道&#xff0c;即将在1月底发布的三星 Galaxy S25 系列智能手机将首次主要使用美光科技&#xff08;Micron Technology&#xff09;提供的移动DRAM&#xff0c;而非三星自家的产品。这一消息对于三星的…...

【项目开发】C#环境配置及VScode运行C#教程(学生管理系统)

原创文章,禁止转载。 文章目录 下载.NETVScode配置运行程序下载.NET 官网链接: https://dotnet.microsoft.com/en-us/download选择任意版本下载: 下载完成后,双击运行exe文件,等待安装完成。 在控制台输入: dotnet --version若出现版本信息,说明安装成功: VScode配…...

[241231] CachyOS 2024 年终总结:性能飞跃与社区繁荣 | ScyllaDB 宣布转向开源可用许可证

目录 CachyOS 2024 年终总结&#xff1a;性能飞跃与社区繁荣ScyllaDB 宣布转向开源可用许可证 CachyOS 2024 年终总结&#xff1a;性能飞跃与社区繁荣 CachyOS 2024 年的最后一个版本 (也是第 13 个版本) 已经发布&#xff0c;同时也迎来了辞旧迎新之际。让我们一起回顾 Cachy…...

AI-Talk开发板之超拟人

一、说明 运行duomotai_ap sdk下的LLM_chat例程&#xff0c;实现开发板和超拟人大模型进行语音交互&#xff0c;支持单轮和多轮交互。 二、SDK更新 v2.3.0及以上的SDK版本才支持超拟人&#xff0c;如果当前SDK在v2.3.o以下&#xff0c;需要更新SDK。在SDK目录(duomotai_ap)下…...

Swift Concurrency(并发)学习

Swift 的并发模型是基于 异步任务 和 任务调度 的一套现代化的异步编程工具。以下是相关语法规则总结 1. 异步函数&#xff08;async&#xff09;与 await async 用于声明一个异步函数&#xff0c;表示函数可能会执行耗时任务&#xff0c;例如网络请求、文件读写等。在调用异步…...

从0开始的opencv之旅(1)cv::Mat的使用

目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒&#xff0c;但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理&#xff0c;这样在查找问题&#xff0c;或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…...

Hoverfly 任意文件读取漏洞(CVE-2024-45388)

漏洞简介 Hoverfly 是一个为开发人员和测试人员提供的轻量级服务虚拟化/API模拟/API模拟工具。其 /api/v2/simulation​ 的 POST 处理程序允许用户从用户指定的文件内容中创建新的模拟视图。然而&#xff0c;这一功能可能被攻击者利用来读取 Hoverfly 服务器上的任意文件。尽管…...

详解网络管理

网络管理是指对计算机网络资源、设备和服务的有效配置、监控、管理和优化的过程。它的目的是确保网络的高效、可靠和安全运行。网络管理的关键任务包括网络监控、配置管理、性能管理、安全管理、故障管理和计费管理。下面是详细的讲解&#xff1a; 1. 网络管理的目标 高可用性…...

iOS 11 中的 HEIF 图像格式 - 您需要了解的内容

HEIF&#xff0c;也称为高效图像格式&#xff0c;是iOS 11 之后发布的新图像格式&#xff0c;以能够在不压缩图像质量的情况下以较小尺寸保存照片而闻名。换句话说&#xff0c;HEIF 图像格式可以具有相同或更好的照片质量&#xff0c;同时比 JPEG、PNG、GIF、TIFF 占用更少的设…...

深入AIGC领域:ChatGPT开发者获取OpenAI API Key的实用指南

在AIGC&#xff08;人工智能生成内容&#xff09;领域&#xff0c;ChatGPT作为一种强大的自然语言处理工具&#xff0c;正逐渐成为开发者们不可或缺的助手。然而&#xff0c;要充分发挥ChatGPT的潜力&#xff0c;首先需要获取OpenAI的API Key。本文将详细介绍如何获取OpenAI AP…...

软件工程实验-实验2 结构化分析与设计-总体设计和数据库设计

一、实验内容 1. 绘制工资支付系统的功能结构图和数据库 在系统设计阶段&#xff0c;要设计软件体系结构&#xff0c;即是确定软件系统中每个程序是由哪些模块组成的&#xff0c;以及这些模块相互间的关系。同时把模块组织成良好的层次系统&#xff1a;顶层模块通过调用它的下层…...

密码学精简版

密码学是数学上的一个分支&#xff0c;同时也是计算机安全方向上很重要的基础原理&#xff0c;设置密码的目的是保证信息的机密性、完整性和不可抵赖性&#xff0c;安全方向上另外的功能——可用性则无法保证&#xff0c;可用性有两种方案保证&#xff0c;冗余和备份&#xff0…...

开源模型迎来颠覆性突破:DeepSeek-V3与Qwen2.5如何重塑AI格局?

不用再纠结选择哪个AI模型了&#xff01;chatTools 一站式提供o1推理模型、GPT4o、Claude和Gemini等多种选择&#xff0c;快来体验吧&#xff01; 在全球人工智能模型快速发展的浪潮中&#xff0c;开源模型正逐渐成为一股不可忽视的力量。近日&#xff0c;DeepSeek-V3和Qwen 2.…...