简介:本资源是一套完整的基于STM32的智能鱼缸控制系统开发套件,面向本科毕业设计、课程设计、工程实训及嵌入式初学者,解决水族环境多参数监测与自动调控的实际问题。系统涵盖温度、水位、光照、溶氧、投喂等核心功能,集成Wi-Fi远程通信与本地人机交互,具备较强工程实践性与教学延展性。压缩包共228个文件,含45个头文件(.h)、43个C源码(.c)、35个编译中间文件(.o/.d)及原理图(.schdoc)、PCB(.pcbdoc)、Keil工程(.uvprojx)、论文(.pdf/.docx)和材料清单(.xlsx)等关键交付物,总大小26.47MB。已有412人学习下载,所有代码经实机测试可直接编译运行,配套完整硬件框图与模块化源码结构,便于理解传感器驱动、PID温控逻辑、Wi-Fi透传协议及多任务调度机制,支持二次开发与功能扩展。
1. 项目概述与核心价值
最近几年,智能家居的概念越来越火,从智能音箱到智能窗帘,似乎万物皆可“智能”。但很多所谓的智能设备,功能华而不实,操作复杂,离真正的“好用”还有距离。今天我想聊一个更具体、更接地气的项目:基于STM32的智能鱼缸控制系统。这不仅是很多电子、自动化专业同学做毕设、课设的热门选题,更是一个能真正解决养鱼爱好者痛点的实用项目。想象一下,你再也不用担心出差几天回家发现鱼缸浑浊不堪,或者因为忘记换水而导致爱鱼生病。这个系统能帮你自动监测水质、控制灯光、定时喂食,甚至通过手机远程查看鱼缸状态,把繁琐的养护工作交给机器。
这个项目的核心,就是利用一块STM32微控制器作为大脑,连接各种传感器和执行器,构建一个闭环控制系统。它听起来有点复杂,但拆解开来,无非是“感知-决策-执行”三个步骤。市面上成品的智能鱼缸设备价格不菲,而且功能固定,难以定制。自己动手做一个,成本可能不到两百块,但获得的不仅仅是几条健康的鱼,更是一整套嵌入式系统开发的实战经验。从电路设计、PCB绘制、单片机编程到手机App开发,几乎涵盖了嵌入式工程师的必备技能栈。无论你是学生想做一个出彩的毕业设计,还是爱好者想给自己心爱的鱼缸升级,这个项目都极具参考价值。
接下来,我会结合一个典型的实现方案,把整个系统的设计思路、硬件选型、软件编程和调试心得,毫无保留地分享出来。我们会用到STM32F103C8T6这款经典的“蓝桥杯”核心板,搭配一些常见的传感器模块。即使你之前只点过灯、调过串口,跟着走一遍,也能把这个系统搭起来。
2. 系统整体设计与核心思路拆解
2.1 需求分析与功能定义
做任何项目,第一步永远是明确需求。智能鱼缸要“智能”在哪里?我们不能为了智能而智能,功能必须切中养鱼的实际痛点。经过和几位鱼友的交流,我梳理出以下几个核心需求:
- 水质监测:这是养鱼的命脉。主要关注水温、PH值、溶解氧(DO)和浊度。水温直接影响鱼类新陈代谢;PH值波动过大会导致鱼体不适;溶解氧不足会让鱼窒息;浊度则反映了水体清洁度。
- 环境控制:根据监测结果自动调节鱼缸环境。包括:
- 恒温控制:通过加热棒或风扇,维持水温在设定范围(如热带鱼26-28°C)。
- 灯光控制:模拟自然光周期,定时开关灯,甚至实现日出日落的光照渐变,有利于水草光合作用和鱼类作息。
- 增氧控制:根据溶解氧数据,自动启停增氧泵。
- 自动喂食:这是最实用的功能之一。可以设置每天定时、定量投喂,避免人工喂食的不规律或遗忘。
- 自动换水:进阶功能。通过水泵和电磁阀,定期排出部分旧水,补充等量困好的新水,极大减轻维护负担。
- 状态显示与远程监控:需要一个本地界面(如OLED屏)显示实时数据,同时能将数据上传到手机App,支持远程查看和控制。
基于以上需求,我们的系统功能框图就清晰了。STM32作为主控,需要连接多种传感器(温度、PH、浊度等),驱动多种执行器(继电器控制加热棒、灯光、水泵、喂食器舵机等),并通过串口或Wi-Fi/蓝牙模块与上位机通信。
2.2 硬件平台选型与核心电路设计
硬件是系统的骨架,选型决定了项目的成本、复杂度和可靠性。
2.2.1 主控芯片:为什么是STM32F103C8T6?
对于这个项目,STM32F103C8T6(常说的“C8T6”或“最小系统板”)是性价比之王。理由如下:
- 性能足够:72MHz的Cortex-M3内核,处理多路传感器数据、运行PID控制算法、驱动外设绰绰有余。
- 外设丰富:它拥有多个ADC(用于读取模拟传感器)、定时器(用于PWM输出控制灯光亮度、舵机角度、生成精确延时)、UART(连接Wi-Fi模块、调试)、I2C和SPI(连接OLED屏等模块)。这些正是我们项目所需要的。
- 生态完善:资料最多,社区支持最好。无论是标准库还是HAL库,都有海量的例程。出了问题,很容易找到解决方案。
- 成本低廉:核心板价格通常在十到二十元,极大地降低了项目门槛。
2.2.2 传感器选型与接口设计
传感器是系统的“眼睛”和“皮肤”,选型要兼顾精度、成本和接口简易性。
- 水温传感器:DS18B20是首选。它是单总线数字传感器,精度±0.5°C,完全满足要求,且抗干扰能力强,只需一根数据线连接STM32的一个GPIO,节省IO口。
- PH值传感器:市场上有模拟量输出的PH计模块。它输出的是模拟电压信号(通常0-5V对应PH 0-14)。我们需要用STM32的ADC通道来读取这个电压值,再通过公式换算成PH值。注意:PH探头需要定期校准,且不能长时间干燥存放。
- 浊度传感器:同样常用模拟输出模块。它利用光学原理,通过测量水中悬浮颗粒对光的散射程度来输出模拟电压,电压越高通常表示浊度越高(水质越差)。
- 溶解氧传感器:这类传感器通常比较昂贵。对于毕业设计或低成本项目,有时可以简化,用定时启停增氧泵来代替闭环控制,或者使用更廉价的模拟溶解氧模块(精度一般,但可用于演示原理)。
电路设计要点: 对于DS18B20,注意在数据线上加一个4.7kΩ的上拉电阻。对于模拟传感器(PH、浊度),输出信号线直接连接到STM32的ADC输入引脚(如PA0)。如果模块输出是5V,而STM32的ADC是3.3V供电,必须使用电阻分压电路或电压跟随器进行电平转换,否则会烧坏单片机ADC!这是一个非常容易踩的坑。
2.2.3 执行器驱动电路设计
执行器是系统的“手”和“脚”,驱动它们需要特别注意电流和隔离。
- 继电器模块:控制加热棒、水泵、灯光、增氧泵等220V大功率设备。STM32的GPIO输出3.3V信号控制继电器模块(通常为5V供电),继电器内部通过光耦隔离,再用晶体管驱动电磁继电器吸合。重要提示:强电(220V)部分务必谨慎操作,接线要牢固,做好绝缘,安全第一!建议直接使用成品的继电器模块,避免自己设计强电电路。
- 舵机:用于自动喂食器。常见的SG90舵机使用PWM信号控制角度。STM32的定时器可以很方便地生成指定占空比的PWM波。
- LED灯带:如果需要调光,可以使用PWM控制MOS管来驱动LED灯带,实现灯光亮度的平滑调节。
2.2.4 人机交互与通信模块
- 本地显示:0.96寸OLED屏(I2C接口)是最佳选择。它显示信息丰富(温度、PH、状态等),功耗低,接线简单(仅需SCL和SDA两根线)。
- 远程通信:根据需求选择。
- ESP8266 Wi-Fi模块:性价比极高。通过UART与STM32连接,让鱼缸接入局域网,进而通过MQTT协议连接云平台(如阿里云、OneNET)或内网服务器,实现手机App远程监控。这是目前的主流方案。
- 蓝牙模块(如HC-05):适合短距离控制,手机直接连接,开发更简单,但距离受限。
- 4G Cat.1模块:如果鱼缸放置地点没有Wi-Fi,可以考虑,但成本较高。
原理图设计心得: 使用立创EDA等工具绘制原理图时,务必将不同功能模块分页绘制(如电源页、主控页、传感器页、执行器页),清晰明了。电源部分要设计好,建议采用12V/5V开关电源作为总输入,通过LDO(如AMS1117-3.3)为STM32和3.3V器件供电。给模拟传感器(特别是PH)的供电最好单独用LDO,并与数字电源用磁珠或0Ω电阻隔离,以减少数字噪声对模拟信号的干扰。
3. 软件架构与核心程序实现
硬件搭好了,软件就是灵魂。一个好的软件架构能让程序逻辑清晰,易于维护和扩展。
3.1 程序整体框架与任务调度
对于这种多任务系统(读取多个传感器、更新显示、控制多个执行器、处理通信),不建议用超级循环(while(1))里顺序执行,那样会导致某个任务阻塞影响其他任务。推荐两种方式:
基于定时器中断的裸机状态机:这是最实用且易于掌握的方法。我们可以配置一个基本定时器(如SysTick)产生固定的时间节拍(比如1ms或10ms)。在主循环中,检查由这个定时器中断更新的时间标志,来周期性地执行不同任务。
// 伪代码示例 volatile uint32_t sys_tick = 0; // SysTick中断服务函数 void SysTick_Handler(void) { sys_tick++; } // 任务标志 #define TASK_READ_SENSOR (1 << 0) #define TASK_UPDATE_DISPLAY (1 << 1) #define TASK_CHECK_CONTROL (1 << 2) volatile uint32_t task_flags = 0; // 在定时器中断或主循环中设置标志 if(sys_tick % 100 == 0){ // 每100ms task_flags |= TASK_READ_SENSOR; } int main(void) { // 初始化... while(1) { if(task_flags & TASK_READ_SENSOR) { task_flags &= ~TASK_READ_SENSOR; read_all_sensors(); // 读取所有传感器 } if(task_flags & TASK_UPDATE_DISPLAY) { task_flags &= ~TASK_UPDATE_DISPLAY; oled_show_data(); // 更新显示 } // ... 其他任务 // 空闲时可以进入低功耗模式 __WFI(); } }这种方式实现了简单的分时复用,响应性比纯顺序执行好得多。
使用实时操作系统(RTOS):如FreeRTOS。这是更专业和强大的方式,可以创建多个独立任务,由内核进行调度。对于功能复杂的系统(比如需要同时维护TCP连接、处理复杂协议),RTOS优势明显。但对于初学者,裸机状态机足以应对本项目。
3.2 传感器数据采集与滤波处理
传感器读回来的数据通常带有噪声,直接使用会导致控制不稳定。必须进行滤波。
DS18B20:读取的是数字值,相对稳定,但也可以做滑动平均滤波。
模拟传感器(PH,浊度):噪声较大,必须滤波。
- 多次采样取平均:最简单的办法,在ADC读取函数中连续采样N次(如10次),然后取算术平均值。
- 滑动平均滤波:维护一个固定长度的队列,每次新数据入队,旧数据出队,计算队列平均值。这对缓变信号效果很好。
- 一阶低通滤波(软件实现):适用于抑制周期性干扰。公式为
Y(n) = α * X(n) + (1-α) * Y(n-1),其中α是滤波系数(0<α<1),X(n)是本次采样值,Y(n)和Y(n-1)是本次和上次滤波输出。α越接近1,响应越快,但滤波效果差;α越小,滤波效果好,但滞后严重。需要根据实际情况调整。
// 一阶低通滤波示例 float low_pass_filter(float new_value, float old_value, float alpha) { return alpha * new_value + (1 - alpha) * old_value; } // 在ADC读取后调用 current_ph_value = low_pass_filter(adc_raw_to_ph(adc_value), current_ph_value, 0.2);
PH值校准:这是关键。PH模块通常需要两点校准。准备两种标准缓冲液(如PH4.01和PH6.86)。将探头分别放入两种溶液中,读取对应的ADC值,得到两个点(ADC1, 4.01)和(ADC2, 6.86)。假设PH值与ADC值线性相关(大部分模块在此范围内近似线性),就可以计算出斜率和截距,建立PH = k * ADC + b的公式。将这个公式写入程序。每次测量前,最好让探头在溶液中稳定一段时间。
3.3 控制逻辑与PID算法实现
控制系统的大脑需要根据测量值(PV)和设定值(SP)的偏差,计算出控制量(OUT)去驱动执行器。
灯光控制:最简单的是定时开关。更高级的是用PWM模拟日出日落,即随时间改变PWM占空比。
恒温控制:这是典型的闭环控制,适合用PID算法。假设我们用加热棒加热。
- P(比例):偏差越大,加热功率越大。纯P控制会有静差(最终温度达不到设定值)。
- I(积分):累积历史偏差,消除静差。但积分太强会引起超调甚至震荡。
- D(微分):根据偏差变化率提前动作,抑制超调,增加系统稳定性。
位置式PID公式:
Output = Kp * e(k) + Ki * ∑e(j) + Kd * [e(k) - e(k-1)]其中e(k)是当前偏差(设定温度 - 当前温度)。在STM32上实现,需要注意积分抗饱和和输出限幅。加热棒的控制输出通常是PWM占空比,需要限制在0%~100%。
typedef struct { float Kp, Ki, Kd; float integral; float prev_error; float out_max, out_min; // 输出限幅 } PID_Controller; float PID_Calculate(PID_Controller *pid, float setpoint, float measurement) { float error = setpoint - measurement; pid->integral += error; // 积分抗饱和:如果输出已经饱和,则停止积分累加(这里简化处理,实际可判断error方向) if(pid->integral > pid->out_max / pid->Ki) pid->integral = pid->out_max / pid->Ki; if(pid->integral < pid->out_min / pid->Ki) pid->integral = pid->out_min / pid->Ki; float derivative = error - pid->prev_error; float output = pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative; // 输出限幅 if(output > pid->out_max) output = pid->out_max; if(output < pid->out_min) output = pid->out_min; pid->prev_error = error; return output; // 这个output可以映射为PWM的占空比 }参数整定:
Kp, Ki, Kd需要调试。常用“试凑法”或“临界比例度法”。可以先设Ki=Kd=0,增大Kp直到系统出现等幅振荡,记录此时的Kp为Ku,振荡周期为Tu。然后根据Ziegler-Nichols公式计算:Kp = 0.6 * Ku,Ki = 2 * Kp / Tu,Kd = Kp * Tu / 8。再微调。喂食控制:通过舵机旋转特定角度,打开喂食器仓门一定时间。可以用一个定时器来管理喂食周期和持续时间。
3.4 上下位机通信与协议设计
如果使用ESP8266,STM32与ESP8266之间通过UART通信。需要设计一个简单可靠的通信协议。
帧结构设计(示例):[帧头 0xAA] [长度] [命令字] [数据域] [校验和] [帧尾 0x55]
- 帧头/帧尾:用于帧同步。
- 长度:数据域的长度。
- 命令字:区分不同指令,如
0x01上报传感器数据,0x02控制灯光开关。 - 数据域:具体的数据内容。
- 校验和:简单的累加和或CRC8,用于检错。
例如,STM32定时(如每5秒)向上位机发送一帧数据:AA 09 01 00 19 00 06 41 00 64 XX 55解释:长度09,命令01(上报数据),数据域:温度0x0019(25°C),PH0x0006(6.0),浊度0x41(65),溶解氧0x0064(100%),XX为校验和。
上位机(手机App或电脑软件)发送控制指令,如开灯:AA 03 02 01 XX 55解释:长度03,命令02(控制),数据域01(灯开)。
在STM32端,需要编写一个串口数据解析状态机,来正确接收和解析这些不定长的数据帧,避免粘包、断包问题。
ESP8266的配置:通常需要让ESP8266工作在Station模式,连接到无线路由器,然后通过AT指令配置为TCP Client,连接到指定的服务器IP和端口。这部分代码逻辑相对固定,但AT指令的响应处理需要耐心,要等待“OK”或“ERROR”等回应后再发送下一条指令。
4. 系统集成、调试与优化实战
当硬件焊接完毕,各个模块的程序也调试通过后,就进入了最考验人的系统集成与调试阶段。
4.1 硬件联调与常见问题排查
- 电源问题:这是第一大坑。系统不工作,首先查电源。用万用表测量STM32的3.3V、5V引脚电压是否稳定。特别是当继电器动作时,观察电源电压是否有大幅跌落。如果跌落严重,说明电源带载能力不足或存在短路,需要检查电源电路或更换功率更大的适配器。
- 传感器读数异常:
- DS18B20读不到数据:检查接线顺序(VCC, DQ, GND),确认数据线是否已加上拉电阻(4.7kΩ)。检查单总线时序是否严格,延时函数是否准确。不同晶振频率下,
__nop()产生的延时不同,建议使用定时器做基准延时。 - 模拟传感器读数跳动大:首先检查供电是否稳定。尝试在传感器输出端与地之间并联一个0.1uF~10uF的电容,可以滤除高频噪声。软件上必须实施滤波算法。确保ADC的参考电压稳定(通常是3.3V)。
- PH值读数漂移:PH探头需要预热和校准。新探头或干燥存放后,需要在缓冲液或清水中浸泡数小时活化。校准后,尽量保持探头前端球泡湿润。
- DS18B20读不到数据:检查接线顺序(VCC, DQ, GND),确认数据线是否已加上拉电阻(4.7kΩ)。检查单总线时序是否严格,延时函数是否准确。不同晶振频率下,
- 继电器误动作或干扰:继电器线圈在断开时会产生很高的反向电动势,可能干扰单片机。务必在继电器线圈两端并联一个续流二极管(如1N4148,阴极接电源正极)。同时,确保控制继电器和单片机的电源地线是连接在一起的(共地)。
- ESP8266连接不稳定:
- 检查Wi-Fi密码是否正确,路由器是否设置了MAC地址过滤。
- 确保TCP服务器(如电脑上的网络调试助手或自己写的服务端)已开启并监听正确端口。
- 检查ESP8266的固件版本,过旧的固件可能AT指令不完整。可以尝试刷写最新AT固件。
- 在代码中增加重连机制。如果连接断开,延迟几秒后重新发送连接指令。
4.2 软件调试技巧与工具
- 串口调试助手是你的眼睛:充分利用串口打印日志。在程序关键节点(如初始化完成、收到传感器数据、执行控制操作、发送网络数据)打印信息。这能帮你快速定位程序卡在哪一步。
- 使用逻辑分析仪或示波器:对于时序要求严格的接口,如DS18B20的单总线、I2C、PWM波形,逻辑分析仪是神器。它可以直观地显示信号线上的电平变化和时间关系,帮你判断时序是否符合数据手册要求。没有硬件分析仪,可以用一些软件模拟工具辅助分析。
- 分段调试法:不要试图一次性写完所有代码并期望它工作。应该分模块调试:
- 第一步:让单片机跑起来,点亮一个LED。
- 第二步:调试OLED,能显示固定字符。
- 第三步:单独调试DS18B20,读出温度并在OLED显示。
- 第四步:单独调试ADC,读取一个电位器电压并显示。
- 第五步:调试继电器,用按键控制继电器吸合。
- 第六步:调试ESP8266,能连接Wi-Fi并发送“Hello World”到服务器。
- 最后,再把所有模块像拼积木一样组合起来,整合逻辑。
- 利用STM32的硬件调试功能:如果使用ST-Link或J-Link,可以在IDE(如Keil, STM32CubeIDE)中设置断点、单步执行、查看变量值、观察外设寄存器,这是最强大的调试手段。
4.3 功耗优化与可靠性提升
如果希望系统能长期稳定运行(比如用电池或太阳能供电),功耗和可靠性是关键。
功耗优化:
- 睡眠模式:在任务间隙,让STM32进入睡眠(Sleep)或停机(Stop)模式。可以通过
__WFI()或__WFE()指令进入。需要配置好唤醒源,比如定时器唤醒(RTC)、外部中断唤醒(按键或传感器信号)。 - 外设管理:不用的外设时钟及时关闭(
__HAL_RCC_XXX_CLK_DISABLE())。ADC采样完成后可以关闭。 - 降低主频:在满足实时性要求的前提下,可以降低系统时钟频率(HCLK)。
- 传感器供电控制:对于功耗较大的传感器(如某些浊度传感器),可以用一个GPIO口控制一个MOS管,为其供电,只在需要测量时上电。
- 睡眠模式:在任务间隙,让STM32进入睡眠(Sleep)或停机(Stop)模式。可以通过
可靠性提升:
- 看门狗:一定要开启独立看门狗(IWDG)或窗口看门狗(WWDG)。当程序跑飞或陷入死循环时,看门狗能复位系统。喂狗操作要放在主循环或关键任务中,但注意不要在长时间阻塞的操作(如等待ESP8266响应)中喂狗,否则会误触发复位。
- 软件容错:对关键数据(如设定参数)进行存储时,除了写入Flash,可以计算CRC校验,读取时验证。通信协议中必须包含校验字段。
- 异常处理:在可能出错的地方(如传感器读取失败、网络断开)加入超时机制和错误处理流程,比如重试几次,然后记录错误日志或恢复到安全状态(如关闭加热棒)。
5. 项目进阶与扩展思路
完成基础功能后,你可以考虑以下方向进行深化,这会让你的项目在答辩或实际应用中更加出彩。
5.1 数据可视化与云平台接入
本地OLED显示信息有限。可以将数据上传到云平台,实现更丰富的功能。
- 使用开源物联网平台:如ThingsBoard或EMQX。它们提供了设备管理、数据可视化、规则引擎和报警功能。你可以在STM32端实现MQTT协议,将数据发布到这些平台,平台会自动生成漂亮的仪表盘,显示温度、PH曲线,并设置阈值报警(如温度超过30°C发送邮件或短信)。
- 自建简单服务器:如果你会一些后端开发(如Python Flask, Node.js),可以在树莓派或云服务器上搭建一个简单的HTTP/WebSocket服务器。STM32定时POST数据到服务器,服务器将数据存入数据库(如SQLite, MySQL),并提供一个网页前端来展示数据和发送控制指令。
5.2 引入更高级的控制算法
基础的PID对于恒温控制已经足够。但如果你想挑战更复杂的控制,比如根据PH值自动添加酸碱调节剂(这是一个大滞后、非线性的过程),可以研究模糊控制或模糊PID控制。模糊控制不需要精确的数学模型,而是用“如果PH偏高,则少量添加酸液”这样的语言规则,更适合经验性的控制场景。
5.3 增加本地交互与智能化
- 语音控制:接入一个离线语音识别模块(如LD3320),实现“打开灯光”、“喂鱼”等语音指令。
- 图像识别:如果手头有闲置的摄像头模块(如OV7670)或更强大的开发板(如STM32H7系列或树莓派),可以尝试简单的图像处理,比如识别鱼的数量、判断鱼的活动状态是否异常等。这属于边缘AI的范畴,难度较大,但极具前沿性。
5.4 结构设计与外观美化
一个完整的项目不止是电路板和代码。可以考虑用亚克力板或3D打印设计一个漂亮的外壳,将电路板、电源、继电器等封装进去,只露出传感器探头和显示屏。喂食器也可以用3D打印设计一个带舵机控制的旋转式储粮仓。好的外观设计能极大提升项目的完整度和观感。
6. 材料清单与成本估算
这里列出一个基础版本的材料清单和大致成本(价格随市场波动),供你采购参考:
| 类别 | 名称 | 型号/规格 | 数量 | 预估单价(元) | 备注 |
|---|---|---|---|---|---|
| 主控 | STM32最小系统板 | STM32F103C8T6核心板 | 1 | 15 | 带USB转串口芯片为佳 |
| 传感器 | 温度传感器 | DS18B20(防水探头) | 1 | 5 | |
| PH传感器 | 模拟输出PH计模块 | 1 | 30-50 | 含探头和变送板 | |
| 浊度传感器 | 模拟输出浊度模块 | 1 | 15 | ||
| 水位传感器 | 光电或浮球式 | 1 | 5 | 用于缺水报警,可选 | |
| 执行器 | 继电器模块 | 5V 高电平触发,常开触点 | 4 | 5 | 控制灯、加热棒、水泵、增氧泵 |
| 舵机 | SG90 | 1 | 10 | 用于自动喂食器 | |
| 水泵 | DC 5-12V 小型潜水泵 | 1 | 10 | 用于换水或造流 | |
| 加热棒 | 根据鱼缸大小选择 | 1 | 30 | 注意安全 | |
| LED灯带 | 12V/24V RGB或白光 | 1 | 20 | ||
| 交互与通信 | OLED显示屏 | 0.96寸 I2C 128x64 | 1 | 10 | |
| Wi-Fi模块 | ESP-01S (ESP8266) | 1 | 10 | ||
| 蓝牙模块 | HC-05/HC-06 | 1 | 15 | 与Wi-Fi二选一 | |
| 其他 | 电源模块 | 12V/5V 双输出开关电源 | 1 | 25 | 功率需足够(建议>3A) |
| 电平转换模块 | 5V转3.3V 或 逻辑电平转换器 | 1 | 2 | 如需连接5V器件 | |
| 杜邦线、面包板 | 公对公、母对母 | 若干 | 10 | 用于原型搭建 | |
| PCB打样 | 双面板 10cm*10cm | 1 | 20 | 如需做成品板 | |
| 外壳、结构件 | 亚克力/3D打印 | 1 | 30 | 可选,提升美观度 | |
| 总计 | 约 200-300 | 不含加热棒等大功率设备 |
成本控制提示:很多传感器模块功能相似,可以多对比。PH传感器是成本大头,如果仅作演示,可以用电位器分压模拟PH信号输入。初期调试可以在面包板上进行,稳定后再设计PCB。
从一块小小的STM32芯片开始,到最终构建出一个能自动照料鱼缸的智能系统,这个过程充满了挑战,也充满了乐趣。你会遇到电源干扰、传感器飘移、程序死机、网络掉线等各种问题,但每一个问题的解决,都是实实在在的成长。这个项目麻雀虽小,五脏俱全,它综合运用了模拟电路、数字电路、嵌入式编程、自动控制、通信协议等多方面知识。当你看到鱼缸里的鱼儿在恒温清澈的水中悠然自得,而你可以通过手机随时查看这一切时,那种成就感是无与伦比的。希望这份超详细的拆解,能为你点亮一盏灯,助你顺利打造出自己的智能鱼缸。
本文还有配套的精品资源,点击获取