当前位置: 首页 > 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.jsqmd.com/news/921853/

相关文章:

  • 豆包内容偏好:豆包喜欢什么内容,企业就要生产什么证据 - 招财兔数字员工
  • 用GPT-4玩转《我的世界》:手把手教你理解VOYAGER智能体的核心代码与技能库设计
  • 深度解析抖音直播间数据抓取:DouyinLiveWebFetcher技术实战指南
  • HsMod:基于BepInEx框架的炉石传说效率增强技术方案
  • 炉石传说HsMod插件:55项功能全面优化游戏体验的终极指南
  • 终极B站视频转文字指南:如何快速提取视频内容制作学习笔记
  • Oxide机架服务处理器消失之谜:历经调试终寻得修复方案
  • 豆包GEO获客:我理解的豆包GEO,不是技巧,而是一套获客系统 - 招财兔数字员工
  • 《Interfaces》杂志聚焦界面设计,订阅享多权益开启构建界面知识之旅
  • 如何快速部署医疗AI:18个医学图像数据集的完整实战指南
  • Windows 11自带神器Hyper-V,零成本搭建Linux测试环境保姆级教程
  • Win11系统下Eplan2023安装保姆级教程,附hosts文件修改与防火墙关闭避坑指南
  • 从‘椒盐八人图’到你的科研数据:手把手教你用MATLAB medfilt2处理实验图像与二维数据
  • 破解“仅我可见”难题:构建可感知上下文的数字产品设计
  • SpaceX拟募资750亿美元冲击最大IPO,2万亿美元估值是机遇还是套利?
  • UE5.2 + Win10 + AirSim 避坑指南:从编译报错到成功运行Car模式的完整流程
  • 【免费开源】STM32 MQTT远程继电器网关4路智能开关物联网控制完整工程项目分享
  • 保姆级教程:在VMware上给Ubuntu 22.04虚拟机配置国内镜像源(附最佳服务器选择)
  • AI读懂企业:企业要成为豆包愿意推荐的答案,先要让它读懂你 - 招财兔数字员工
  • GPT驱动SaaS产品交互革命:从JSON到提示词驱动UX的工程实践
  • 从‘图书馆出版物’到你的项目:手把手教你用类图、状态图和DFD完成一次完整的OOA
  • 超越TextMeshPro?手把手教你为Unity旧版Text组件实现智能标点避头尾
  • 从马克·吐温的讽刺实验到现代AI伦理:用Python和GPT-4重演《可恶的人类》动物对比
  • 移动端项目实战:手把手教你用Vue3+Vant封装一个树状多选组件(附完整代码)
  • 5分钟搞定B站视频下载:免费保存大会员4K超清内容终极指南
  • 告别随机采样!用Python手把手实现强化学习中的优先经验回放(附SumTree代码详解)
  • Qt5.15项目里QWebEngine加载网页卡死?别急着改代理,先看看Windows这个隐藏设置
  • 有效内容覆盖,豆包GEO的核心不是刷屏,而是让内容有意义地覆盖 - 招财兔数字员工
  • UE4材质进阶:别再直接调UV了,手把手教你精准控制法线贴图强度(附完整蓝图)
  • 基于Wav2Vec 2.0构建端到端语音识别系统:从原理到实践