【免费开源】STM32智能鱼缸自动喂食控温换水水族箱物联网项目完整源码分享 【免费开源】STM32智能鱼缸自动喂食控温换水水族箱物联网项目完整源码分享一、项目背景养鱼是很多人的爱好但日常的喂食、加热、换水、过滤管理却让许多上班族望而却步。一个真正省心的智能鱼缸至少要做到定时定量喂食、自动维持水温、监测水质、远程控制和报警。本项目基于 STM32 的智能鱼缸正是为解决这些痛点而设计的开源项目使用 STM32F103C8T6 作为主控集成温度采集、舵机喂食、继电器控制加热棒/水泵/灯光、OLED 显示、ESP8266 联网是一套完整的从硬件到软件的鱼缸物联网解决方案。二、整机工作流程图1s是否是否60s是否5minSTM32 上电初始化读取 EEPROM 中的喂食时间表/温度阈值启动 1s 定时器周期任务?读取 DS18B20 水温温度 阈值低?继电器开启加热棒温度 阈值高?关闭加热棒并报警加热棒按需关闭OLED 刷新显示检查当前时间到达喂食时间?舵机转动180度定量投料跳过ESP8266 上传数据到云端等待云端下发指令执行远程指令: 喂食/换水/调温三、硬件清单模块接口STM32 引脚DS18B20 水温单总线PB12OLED 0.96I2CPB6/PB7舵机 SG90PWMPA0 (TIM2_CH1)继电器(加热棒)GPIOPB0继电器(水泵)GPIOPB1继电器(灯光)GPIOPB2ESP8266UART2PA2/PA3按键x3GPIOPA4/PA5/PA6浑浊度传感器ADCPA7四、核心代码4.1 DS18B20 温度采集#includeds18b20.h#includestm32f1xx_hal.h#defineDQ_PORTGPIOB#defineDQ_PINGPIO_PIN_12staticvoidDQ_OUT(void){GPIO_InitTypeDef g{0};g.PinDQ_PIN;g.ModeGPIO_MODE_OUTPUT_OD;g.PullGPIO_PULLUP;g.SpeedGPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(DQ_PORT,g);}staticvoidDQ_IN(void){GPIO_InitTypeDef g{0};g.PinDQ_PIN;g.ModeGPIO_MODE_INPUT;g.PullGPIO_PULLUP;HAL_GPIO_Init(DQ_PORT,g);}staticvoidusDelay(uint32_tus){uint32_ttus*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();intpHAL_GPIO_ReadPin(DQ_PORT,DQ_PIN);usDelay(420);returnp0;}staticvoidWriteByte(uint8_tb){DQ_OUT();for(inti0;i8;i){HAL_GPIO_WritePin(DQ_PORT,DQ_PIN,GPIO_PIN_RESET);usDelay(2);if(b1)HAL_GPIO_WritePin(DQ_PORT,DQ_PIN,GPIO_PIN_SET);usDelay(60);HAL_GPIO_WritePin(DQ_PORT,DQ_PIN,GPIO_PIN_SET);usDelay(2);b1;}}staticuint8_tReadByte(void){uint8_tv0;for(inti0;i8;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|(1i);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_tlReadByte(),hReadByte();int16_traw(h8)|l;returnraw*0.0625f;}4.2 舵机喂食控制externTIM_HandleTypeDef htim2;/* SG90: 0.5ms~2.5ms 对应 0~180 度TIM2 ARR20000-1, PSC72-1 → 1us 计数 */staticvoidServo_SetAngle(intdeg){if(deg0)deg0;if(deg180)deg180;intus500deg*2000/180;__HAL_TIM_SET_COMPARE(htim2,TIM_CHANNEL_1,us);}voidFeed_Once(intgrams){intturnsgrams;/* 1g 一圈 */for(inti0;iturns;i){Servo_SetAngle(0);HAL_Delay(400);Servo_SetAngle(180);HAL_Delay(400);}Servo_SetAngle(90);}4.3 主循环#includemain.h#includeds18b20.h#includeoled.hfloatlow24.0f,high28.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_tlast1s0,last1m0;while(1){uint32_tnowHAL_GetTick();if(now-last1s1000){last1snow;floattDS18B20_ReadTempC();HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,tlow?GPIO_PIN_SET:(thigh?GPIO_PIN_RESET:GPIO_PIN_RESET));charbuf[24];snprintf(buf,sizeof(buf),T:%.1fC,t);OLED_ShowString(0,0,buf);}if(now-last1m60000){last1mnow;inth(now/3600000)%24;/* 简化用 tick 模拟当前小时 */for(inti0;i3;i)if(hfeed_hour[i])Feed_Once(2);}}}五、技术亮点5.1 三路继电器分时复用加热棒、水泵、灯光各自接一路继电器。为了避免短时间频繁通断软件加入滞回控制低于low才开加热高于low1°C才关避免温度在阈值附近摇摆产生抖动。5.2 DS18B20 抗干扰水族鱼缸内潮湿且强干扰DS18B20 的单总线信号必须使用屏蔽线并就近放置 4.7kΩ 上拉电阻软件层面读取 3 次取中位数可以剔除偶发误读。5.3 ESP8266 上云通过ATCWJAP连接 WiFi再用ATCIPSTART建立 TCP 与 MQTT Broker 通信。本工程默认对接 OneNET上行水温/状态下行喂食/换水指令。5.4 自动换水水泵继电器触发抽水电机配合水位浮子开关检测水位下降到设定值后停止进水阶段用电磁阀控制自来水进入到达高水位再关闭。5.5 喂食量精准控制舵机带动一个螺旋送料器每旋转 360° 投放约 1g 鱼食。用户在上位机可以配置每次投料份数。六、应用场景家庭桌面鱼缸自动化管理水族馆远程批量监控高端水草缸 CO₂ 加热 灯光多通道控制改造为爬宠饲养箱温度 湿度 喷雾改造为家庭花房自动浇灌系统七、调试经验DS18B20 上电后第一次读取要等 750ms否则只能读到 85°C 默认值舵机不要长时间堵转否则会发热烧毁定时进入 90° 自然位置继电器吸合瞬间会引起电源跌落必须在 STM32 电源端加大电容OLED 在水汽环境中容易花屏建议加防水膜并做 2s 刷新一次而非高频刷新。八、总结本项目用 STM32 完整实现了智能鱼缸的所有核心功能软硬件资料齐全适合作为物联网/嵌入式入门到进阶的练手项目。它不仅能让你的鱼缸真正智能起来还能帮助你掌握温度采集、PWM 舵机、继电器、OLED、ESP8266 串口 AT 命令等典型嵌入式知识。完整源码已经打包在项目压缩包中欢迎下载、二次开发。