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);
	}
}

六、实验效果

七、包含内容

项目分享

相关推荐
兆龙电子单片机设计15 分钟前
【STM32项目开源】STM32单片机语音分类垃圾桶-蓝牙APP
stm32·单片机·嵌入式硬件·物联网·开源·自动化·毕业设计
零涂毕业设计1 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
阿龙的工作记录2 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
ye150127774552 小时前
220V转5V1A隔离芯片WT5602
单片机·嵌入式硬件·其他·硬件工程
武汉万象奥科3 小时前
AGV导航控制器方案 | 基于HD-RK3576系列核心板的算控融合一体化平台
arm开发·嵌入式硬件·arm核心板·单板机
ye150127774554 小时前
DC24V-100V转3.3V500mA隔离芯片WT5602
单片机·嵌入式硬件·其他·硬件工程
Lumos6fly4 小时前
51单片机从零到实战(15)——数字时钟温度计
单片机·嵌入式硬件·51单片机
gwf2164 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
zlinear数据采集卡6 小时前
从“脏信号”到“纳伏级纯净”:硬核拆解DABL7606的多级抗混叠滤波与24位过采样算法
arm开发·科技·嵌入式硬件·fpga开发·开源
放学校门口见6 小时前
vscode部署stm32开发调试环境
ide·vscode·stm32