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

【免费开源】STM32智能鱼缸自动喂食控温换水水族箱物联网项目完整源码分享

【免费开源】STM32智能鱼缸自动喂食控温换水水族箱物联网项目完整源码分享

一、项目背景

养鱼是很多人的爱好,但日常的喂食、加热、换水、过滤管理却让许多上班族望而却步。一个真正"省心"的智能鱼缸,至少要做到:定时定量喂食、自动维持水温、监测水质、远程控制和报警。本项目"基于 STM32 的智能鱼缸"正是为解决这些痛点而设计的开源项目,使用 STM32F103C8T6 作为主控,集成温度采集、舵机喂食、继电器控制加热棒/水泵/灯光、OLED 显示、ESP8266 联网,是一套完整的从硬件到软件的鱼缸物联网解决方案。

二、整机工作流程图

1s

60s

5min

STM32 上电初始化

读取 EEPROM 中的喂食时间表/温度阈值

启动 1s 定时器

周期任务?

读取 DS18B20 水温

温度 < 阈值低?

继电器开启加热棒

温度 > 阈值高?

关闭加热棒并报警

加热棒按需关闭

OLED 刷新显示

检查当前时间

到达喂食时间?

舵机转动180度
定量投料

跳过

ESP8266 上传数据到云端

等待云端下发指令

执行远程指令: 喂食/换水/调温

三、硬件清单

模块接口STM32 引脚
DS18B20 水温单总线PB12
OLED 0.96"I2CPB6/PB7
舵机 SG90PWMPA0 (TIM2_CH1)
继电器(加热棒)GPIOPB0
继电器(水泵)GPIOPB1
继电器(灯光)GPIOPB2
ESP8266UART2PA2/PA3
按键x3GPIOPA4/PA5/PA6
浑浊度传感器ADCPA7

四、核心代码

4.1 DS18B20 温度采集

#include"ds18b20.h"#include"stm32f1xx_hal.h"#defineDQ_PORTGPIOB#defineDQ_PINGPIO_PIN_12staticvoidDQ_OUT(void){GPIO_InitTypeDef g={0};g.Pin=DQ_PIN;g.Mode=GPIO_MODE_OUTPUT_OD;g.Pull=GPIO_PULLUP;g.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(DQ_PORT,&g);}staticvoidDQ_IN(void){GPIO_InitTypeDef g={0};g.Pin=DQ_PIN;g.Mode=GPIO_MODE_INPUT;g.Pull=GPIO_PULLUP;HAL_GPIO_Init(DQ_PORT,&g);}staticvoidusDelay(uint32_tus){uint32_tt=us*9;while(t--)__NOP();}intDS18B20_Reset(void){DQ_OUT();HAL_GPIO_WritePin(DQ_PORT,DQ_PIN,GPIO_PIN_RESET);usDelay(500);HAL_GPIO_WritePin(DQ_PORT,DQ_PIN,GPIO_PIN_SET);usDelay(60);DQ_IN();intp=HAL_GPIO_ReadPin(DQ_PORT,DQ_PIN);usDelay(420);returnp==0;}staticvoidWriteByte(uint8_tb){DQ_OUT();for(inti=0;i<8;i++){HAL_GPIO_WritePin(DQ_PORT,DQ_PIN,GPIO_PIN_RESET);usDelay(2);if(b&1)HAL_GPIO_WritePin(DQ_PORT,DQ_PIN,GPIO_PIN_SET);usDelay(60);HAL_GPIO_WritePin(DQ_PORT,DQ_PIN,GPIO_PIN_SET);usDelay(2);b>>=1;}}staticuint8_tReadByte(void){uint8_tv=0;for(inti=0;i<8;i++){DQ_OUT();HAL_GPIO_WritePin(DQ_PORT,DQ_PIN,GPIO_PIN_RESET);usDelay(2);DQ_IN();usDelay(8);if(HAL_GPIO_ReadPin(DQ_PORT,DQ_PIN))v|=(1<<i);usDelay(50);}returnv;}floatDS18B20_ReadTempC(void){if(!DS18B20_Reset())return-127.0f;WriteByte(0xCC);WriteByte(0x44);HAL_Delay(750);if(!DS18B20_Reset())return-127.0f;WriteByte(0xCC);WriteByte(0xBE);uint8_tl=ReadByte(),h=ReadByte();int16_traw=(h<<8)|l;returnraw*0.0625f;}

4.2 舵机喂食控制

externTIM_HandleTypeDef htim2;/* SG90: 0.5ms~2.5ms 对应 0~180 度,TIM2 ARR=20000-1, PSC=72-1 → 1us 计数 */staticvoidServo_SetAngle(intdeg){if(deg<0)deg=0;if(deg>180)deg=180;intus=500+deg*2000/180;__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,us);}voidFeed_Once(intgrams){intturns=grams;/* 1g 一圈 */for(inti=0;i<turns;i++){Servo_SetAngle(0);HAL_Delay(400);Servo_SetAngle(180);HAL_Delay(400);}Servo_SetAngle(90);}

4.3 主循环

#include"main.h"#include"ds18b20.h"#include"oled.h"floatlow=24.0f,high=28.0f;intfeed_hour[3]={8,12,18};intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_I2C1_Init();MX_TIM2_Init();MX_USART1_UART_Init();MX_USART2_UART_Init();HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);OLED_Init();uint32_tlast1s=0,last1m=0;while(1){uint32_tnow=HAL_GetTick();if(now-last1s>=1000){last1s=now;floatt=DS18B20_ReadTempC();HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,t<low?GPIO_PIN_SET:(t>high?GPIO_PIN_RESET:GPIO_PIN_RESET));charbuf[24];snprintf(buf,sizeof(buf),"T:%.1fC",t);OLED_ShowString(0,0,buf);}if(now-last1m>=60000){last1m=now;inth=(now/3600000)%24;/* 简化:用 tick 模拟当前小时 */for(inti=0;i<3;i++)if(h==feed_hour[i])Feed_Once(2);}}}

五、技术亮点

5.1 三路继电器分时复用

加热棒、水泵、灯光各自接一路继电器。为了避免短时间频繁通断,软件加入"滞回控制":低于low才开加热,高于low+1°C才关,避免温度在阈值附近摇摆产生抖动。

5.2 DS18B20 抗干扰

水族鱼缸内潮湿且强干扰,DS18B20 的单总线信号必须使用屏蔽线,并就近放置 4.7kΩ 上拉电阻;软件层面读取 3 次取中位数,可以剔除偶发误读。

5.3 ESP8266 上云

通过AT+CWJAP连接 WiFi,再用AT+CIPSTART建立 TCP 与 MQTT Broker 通信。本工程默认对接 OneNET:上行水温/状态,下行喂食/换水指令。

5.4 自动换水

水泵继电器触发抽水电机,配合水位浮子开关检测水位下降到设定值后停止;进水阶段用电磁阀控制自来水进入,到达高水位再关闭。

5.5 喂食量精准控制

舵机带动一个螺旋送料器,每旋转 360° 投放约 1g 鱼食。用户在上位机可以配置每次投料份数。

六、应用场景

  • 家庭桌面鱼缸自动化管理
  • 水族馆远程批量监控
  • 高端水草缸 CO₂ + 加热 + 灯光多通道控制
  • 改造为爬宠饲养箱(温度 + 湿度 + 喷雾)
  • 改造为家庭花房自动浇灌系统

七、调试经验

  1. DS18B20 上电后第一次读取要等 750ms,否则只能读到 85°C 默认值;
  2. 舵机不要长时间堵转,否则会发热烧毁;定时进入 90° 自然位置;
  3. 继电器吸合瞬间会引起电源跌落,必须在 STM32 电源端加大电容;
  4. OLED 在水汽环境中容易花屏,建议加防水膜并做 2s 刷新一次而非高频刷新。

八、总结

本项目用 STM32 完整实现了智能鱼缸的所有核心功能,软硬件资料齐全,适合作为物联网/嵌入式入门到进阶的练手项目。它不仅能让你的"鱼缸真正智能起来",还能帮助你掌握温度采集、PWM 舵机、继电器、OLED、ESP8266 串口 AT 命令等典型嵌入式知识。完整源码已经打包在项目压缩包中,欢迎下载、二次开发。

http://www.zskr.cn/news/1433175.html

相关文章:

  • 炉石传说HsMod插件:55项功能全面优化游戏体验的终极指南
  • 终极B站视频转文字指南:如何快速提取视频内容制作学习笔记
  • UE5.2 + Win10 + AirSim 避坑指南:从编译报错到成功运行Car模式的完整流程
  • 【免费开源】STM32 MQTT远程继电器网关4路智能开关物联网控制完整工程项目分享
  • GPT驱动SaaS产品交互革命:从JSON到提示词驱动UX的工程实践
  • 从马克·吐温的讽刺实验到现代AI伦理:用Python和GPT-4重演《可恶的人类》动物对比
  • 别再乱用-duty_cycle了!用create_generated_clock搞定复杂时钟占空比的3个实战技巧
  • 保姆级教程:在Ubuntu 14.04上为ARM平台交叉编译支持WebRTC的ZLMediaKit
  • 别让DRC检查形同虚设!深度解析Altium Designer规则设置中的5个高频‘无效配置’陷阱
  • 表情符号数据分析:从情感信号到商业洞察的技术实现与应用
  • Shantell Sans:融合多语言支持与可变轴创新的艺术家手写灵感字体!
  • 告别手动翻找!用Windows批处理5分钟搞定照片/文档的批量提取(附.bat文件模板)
  • 【信息科学与工程学】【物理/化学科学和工程技术】知识体系53 结构学知识01——钢结构/玻璃结构/土木结构/芯片结构
  • ZYNQ裸机双网口通信实战:手把手教你用LWIP和SDK搭建TCP服务器(附完整源码)
  • ChatGPT技术原理、能力边界与高效使用指南
  • 最新株洲市贵金属全品类黄金回收白银回收铂金回收 黄金变现避坑,专业回收全程透明:实力口碑排行榜门店及联系方式推荐 - 前途无量YY
  • 从一次证书过期故障说起:深度复盘CentOS 7 chrony服务配置的那些‘坑’
  • 如何用5步实现B站视频转文字:小白也能快速提取视频内容
  • FinalShell安装踩坑实录:从‘软件正在运行’报错到成功连接Ubuntu 22.04的全过程
  • 树莓派外接屏幕驱动安装全攻略:从GitHub下载到命令行配置,一次搞定
  • 别再用Excel硬扛了!手把手教你用SPSS 25.0搞定销售数据预测(附完整数据文件)
  • 手把手教你配置ZYNQ Ultrascale+ MPSoC的DDR4:从MT40A512M16选型到Vivado参数实战
  • 别再只会用手机连蓝牙了!手把手教你用STM32+ECB02模块实现两个设备自动配对通信
  • 鸿蒙数学 108 篇 第三十三篇:四象与四则运算对应法则
  • Visual Studio里那个烦人的error C2143,我总结了新手最常踩的3个坑(附VS2022调试技巧)
  • Windows宝塔面板启动卡死?别急着重装,先试试这个服务管理器修复法
  • 最新邢台市贵金属全品类黄金回收白银回收铂金回收 黄金变现避坑,专业回收全程透明:实力口碑排行榜门店及联系方式推荐 - 前途无量YY
  • 告别PaddlePaddle!在YOLOv8里直接调用RT-DETR-l模型做目标检测(附完整代码)
  • 【企业级AI成本治理白皮书】:基于237家客户真实数据——订阅冗余率高达68%,30天内可压缩至≤12%
  • 大规模LLM训练中的故障恢复技术与FlashRecovery系统解析