STM32项目分享:智能鱼缸

目录

一、前言

 二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

六、实验效果 

 七、包含内容

  项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

STM32智能鱼缸/水族箱

(资料分享见文末) 

 二、项目简介

1.功能详解

基于STM32的智能鱼缸

功能如下:

  1. 可检测温度,水位,以及TDS水质,同时将数据显示到OLED屏幕上
  2. 当温度过高时,继电器1吸合散热,温度过低时继电器2吸合加热。异常下蜂鸣器触发报警
  3. 当水位过低时,继电器3工作,模拟进水操作。当水位过高时继电器4工作放水。
  4. 当TDS水质过高时,继电器3和4相继工作模拟换水。
  5. 可计时喂食时间,倒计时结束后,舵机转动模拟喂食操作。
  6. 阈值可通过按键调节
  7. 连接手机APP,远程查看数据信息,控制LED开关,阈值调节等

2.主要器件

  • STM32F103C8T6最小系统板
  • OLED 屏幕
  • DS18B20温度传感器
  • ESP8266-01S  WiFi模块
  • TDS电导率传感器
  • 超声波传感器
  • 继电器
  • 舵机
  • 大功率LED灯模块
  • 有源蜂鸣器

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

int main(void)
{
	int time;
	delay_init();
	LED_Init();
  OLED_Init();
	Adc_Init();
	DS18B20_Init();	                  // 温度初始化
	HC_SR04Config();                  // 超声波初始化
  uart_init(115200);
  timeInit(4999,7199);              // 72M 0.1ms 500ms 串口数据初始化、
	timeSendInit(9999,7199);          // 72m 0.1ms 1s    发送数据定时
  timePwmInit(199,7199);            // PWM-> CH3->PA2  CH4->PA3  (调脉宽)TIM_SetCompare4(TIM2,100);
	TIM_SetCompare4(TIM2,SG90_CLOSE); // 关闭喂食
	OLED_ShowChLength(38,16,47,3);    // 显示启动中	
	ESP8266Init(WIFIName,WIFIpwd);
	OLED_Clear();
	while(1){
		DisplayUI();
		if( time++ > 5 ){
			time = 0;
			temp  =  getTemperture();           // 获取温度
			delay_ms(1000);
			delay_ms(1000);
			temp  =  getTemperture();           // 获取温度
			TDS_Value_Conversion();             // 获取TDS水质值
		}
		level =  Getlength();         // 获取水位
		OLED_ShowNum(45,0,temp,2,16,1);
		OLED_ShowNum(45,16,level,3,16,1);
		OLED_ShowNum(45,32,TDS_value,3,16,1);
		OLED_ShowNum(76,48,cacheFeedTime,3,16,1);
		OLED_Refresh();
		
		// 开始喂食
	  if( feedFlag ){
			TIM_SetCompare4(TIM2,SG90_OPEN);
			// 等待喂食结束
			if( feedEndFlag ){
				feedFlag = 0;
				feedEndFlag = 0;
			  feedTime = cacheFeedTime;
				TIM_SetCompare4(TIM2,SG90_CLOSE);
			}
		}
		
    // 进入设置页面
		if( !KEY_EDIT ){      
			while( !KEY_EDIT ); // 防抖
			paramEdit();        // 进入参数设置
			// 刷新参数提示按钮(每次进入设置以后出来这个按钮没有,需要更新一下)
			if( !paramFlag ) OLED_ShowChLength(105,2,62,1);
			else OLED_ShowString(105,2,"  ",16,1);
		}
		
		// 切换参数提醒设置
		if( !KEY_NEXT ){      
			while( !KEY_NEXT );
			paramFlag = !paramFlag;  
			if( !paramFlag ){   // 关闭提示
				JD2 = 0;JD3 = 0;JD4 = 0;JD1 = 0;BUZZ = 0;
				OLED_ShowChLength(105,2,62,1);
			}else{
				OLED_ShowString(105,2,"  ",16,1);
			}
      OLED_Refresh();			
		}
		
		// 上位机更改数据
		if( handleFlag ) handleData();
		
		// 3s上传一次数据
		if( sendFlag && 1){      
			ESP8266Pub(temp,level,TDS_value);
			sendFlag = 0;                 // 重置标志位
			sendDataTime = cacheSendTime; // 刷新发送时间
		}
		// 检查参数是否超出范围(开启了参数检查)
		if( paramFlag ) paramCheck();   
		
		delay_ms(100);
	}
}

六、实验效果 

 七、包含内容

  项目分享

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

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

相关文章

基于MinIO的对象存储增删改查

MinIO是一个高性能的分布式对象存储服务。Python的minio库可操作MinIO,包括创建/列出存储桶、上传/下载/删除文件及列出文件。 查看帮助信息 minio.exe --help minio.exe server --help …

14-6-1C++STL的list

(一)list容器的基本概念 list容器简介: 1.list是一个双向链表容器,可高效地进行插入删除元素 2.list不可以随机存取元素,所以不支持at.(pos)函数与[ ]操作符 (二)list容器头部和尾部的操作 list对象的默…

汽车网络信息安全-ISO/SAE 21434解析(中)

目录 第七章-分布式网络安全活动 1. 供应商能力评估 2. 报价 3. 网络安全职责界定 第八章-持续的网络安全活动 1. 网路安全监控 2. 网络安全事件评估 3. 漏洞分析 4. 漏洞管理 第九章-概念阶段 1. 对象定义 2. 网路安全目标 3. 网络安全概念 第十章 - 产品开发 第十…

C#分页思路:双列表数据组合返回设计思路

一、应用场景 需要分页查询(并非全表查载入物理内存再筛选),返回列表1和列表2叠加的数据时 二、实现方式 列表1必查,列表2根据列表1的查询结果决定列表2的分页查询参数 三、示意图及其实现代码 1.示意图 黄色代表list1的数据&a…

YOLOv8源码修改(4)- 实现YOLOv8模型剪枝(任意YOLO模型的简单剪枝)

目录 前言 1. 需修改的源码文件 1.1添加C2f_v2模块 1.2 修改模型读取方式 1.3 增加 L1 正则约束化训练 1.4 在tensorboard上增加BN层权重和偏置参数分布的可视化 1.5 增加剪枝处理文件 2. 工程目录结构 3. 源码文件修改 3.1 添加C2f_v2模块和模型读取 3.2 添加L1正则…

【Block总结】DynamicFilter,动态滤波器降低计算复杂度,替换传统的MHSA|即插即用

论文信息 标题: FFT-based Dynamic Token Mixer for Vision 论文链接: https://arxiv.org/pdf/2303.03932 关键词: 深度学习、计算机视觉、对象检测、分割 GitHub链接: https://github.com/okojoalg/dfformer 创新点 本论文提出了一种新的标记混合器(token mix…

设计模式Python版 原型模式

文章目录 前言一、原型模式二、原型模式示例三、原型管理器 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对…

一文讲解Java中的BIO、NIO、AIO之间的区别

BIO、NIO、AIO是Java中常见的三种IO模型 BIO:采用阻塞式I/O模型,线程在执行I/O操作时被阻塞,无法处理其他任务,适用于连接数比较少的场景;NIO:采用非阻塞 I/O 模型,线程在等待 I/O 时可执行其…

使用 postman 测试思源笔记接口

思源笔记 API 权鉴 官方文档-中文:https://github.com/siyuan-note/siyuan/blob/master/API_zh_CN.md 权鉴相关介绍截图: 对应的xxx,在软件中查看 如上图:在每次发送 API 请求时,需要在 Header 中添加 以下键值对&a…

AWTK 骨骼动画控件发布

Spine 是一款广泛使用的 2D 骨骼动画工具,专为游戏开发和动态图形设计设计。它通过基于骨骼的动画系统,帮助开发者创建流畅、高效的角色动画。本项目是基于 Spine 实现的 AWTK 骨骼动画控件。 代码:https://gitee.com/zlgopen/awtk-widget-s…

新年手搓--本地化部署DeepSeek-R1,全程实测

1.环境准备安装ollma ollma官网链接: Download Ollama on Linux ubuntu命令行安装: curl -fsSL https://ollama.com/install.sh | sh 选择运行模型,用7b模型试一下(模型也差不多5G): ollama run deepseek-r1:7b 运行qwen: ollama run qwen2.5:7b 2.为方便运行…

STM32使用VScode开发

文章目录 Makefile形式创建项目新建stm项目下载stm32cubemx新建项目IED makefile保存到本地arm gcc是编译的工具链G++配置编译Cmake +vscode +MSYS2方式bilibiliMSYS2 统一环境配置mingw32-make -> makewindows环境变量Cmake CmakeListnijia 编译输出elfCMAKE_GENERATOR查询…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.21 索引宗师:布尔索引的七重境界

1.21 索引宗师:布尔索引的七重境界 目录 #mermaid-svg-Iojpgw5hl0Ptb9Ti {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Iojpgw5hl0Ptb9Ti .error-icon{fill:#552222;}#mermaid-svg-Iojpgw5hl0Ptb9Ti .…

毕业设计--具有车流量检测功能的智能交通灯设计

摘要: 随着21世纪机动车保有量的持续增加,城市交通拥堵已成为一个日益严重的问题。传统的固定绿灯时长方案导致了大量的时间浪费和交通拥堵。为解决这一问题,本文设计了一款智能交通灯系统,利用车流量检测功能和先进的算法实现了…

课题推荐:基于matlab,适用于自适应粒子滤波的应用

自适应粒子滤波(Adaptive Particle Filter, APF)是一种用于状态估计的有效方法,特别适用于非线性和非高斯系统。 文章目录 应用场景MATLAB 代码示例代码说明结果扩展说明 以下是一个基于自适应粒子滤波的简单应用示例,模拟一个一维…

Redis(5,jedis和spring)

在前面的学习中,只是学习了各种redis的操作,都是在redis命令行客户端操作的,手动执行的,更多的时候就是使用redis的api(),进一步操作redis程序。 在java中实现的redis客户端有很多,…

基于聚类与相关性分析对马来西亚房价数据进行分析

碎碎念:由于最近太忙了,更新的比较慢,提前祝大家新春快乐,万事如意!本数据集的下载地址,读者可以自行下载。 1.项目背景 本项目旨在对马来西亚房地产市场进行初步的数据分析,探索各州的房产市…

(2025 年最新)MacOS Redis Desktop Manager中文版下载,附详细图文

MacOS Redis Desktop Manager中文版下载 大家好,今天给大家带来一款非常实用的 Redis 可视化工具——Redis Desktop Manager(简称 RDM)。相信很多开发者都用过 Redis 数据库,但如果你想要更高效、更方便地管理 Redis 数据&#x…

智慧园区管理系统为企业提供高效运作与风险控制的智能化解决方案

内容概要 快鲸智慧园区管理系统,作为一款备受欢迎的智能化管理解决方案,致力于为企业提供高效的运作效率与风险控制优化。具体来说,这套系统非常适用于工业园、产业园、物流园、写字楼及公寓等多种园区和商办场所。它通过数字化与智能化的手…

C++中常用的排序方法之——冒泡排序

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C中常用的排序方法之——冒泡排序的…