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图

五、程序设计

cpp 复制代码
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);
	}
}

六、实验效果

七、包含内容

项目分享

相关推荐
清风6666662 小时前
基于单片机的水塔液位检测与智能调节报警系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
某zhuan3 小时前
STM32中PB4引脚作普通GPIO使用的一个小问题
stm32·单片机·嵌入式硬件
蓝天居士4 小时前
PY32F040单片机介绍(2)
单片机·国产mcu
点灯小铭6 小时前
基于单片机的人体红外传感的步进电机调速自动门智能控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
一月千帆6 小时前
STM32 串口 Bootloader 固件升级方案实现
stm32·单片机·嵌入式硬件
朱嘉鼎7 小时前
GPIO引脚操作方法概述
单片机·嵌入式硬件
小+不通文墨9 小时前
GPIO口输入
stm32·单片机·嵌入式硬件
zzywxc78710 小时前
解锁 Rust 开发新可能:从系统内核到 Web 前端的全栈革命
开发语言·前端·python·单片机·嵌入式硬件·rust·scikit-learn
小莞尔13 小时前
【51单片机】【protues仿真】基于51单片机秒表计时器系统(带存储)
c语言·stm32·单片机·嵌入式硬件·物联网·51单片机
国科安芯13 小时前
ASP3605A电源芯片在高速ADC子卡中的适配性研究
网络·人工智能·单片机·嵌入式硬件·安全