基于STM32设计的智能鱼缸(蓝牙版)

2024-10-21 09:56   重庆  

一、前言

1.1 项目介绍

已开源的全部工具软件、源码、教程文档、视频都已经上传到网盘【内容一直在更新】。 https://pan.quark.cn/s/145a9b3f7f53

【1】项目开发背景

随着现代生活节奏的加快和人们对于生活质量追求的提高,越来越多的家庭选择养鱼作为放松心情、增添生活乐趣的方式之一。 传统的鱼缸维护往往需要定期的人工干预,包括水质检测、温度调节、喂食等,这不仅耗时费力,而且对专业知识有一定要求,使得很多潜在爱好者望而却步。随着物联网技术的发展以及智能家居概念的普及,市场对于更加智能、便捷的家居设备需求日益增长。

在此背景下,开发一款基于STM32单片机控制的智能鱼缸系统显得尤为重要。本项目利用先进的嵌入式技术和无线通信手段,结合传感器技术,打造一个能够自动监测并调节鱼缸内环境参数的智能化解决方案。通过集成水质检测、温度控制、过滤循环、自动喂食及光照管理等多项功能,该系统简化用户操作流程,降低维护难度,同时提升鱼类及其他水生生物的生活质量。考虑到当今社会智能手机的高度普及率及其强大的计算能力,本方案还特别强调了与移动终端的良好兼容性,允许用户通过专门设计的应用程序无线监控和调整鱼缸状态,真正实现了随时随地的便捷管理。

这款智能鱼缸项目的提出是基于当前市场需求和技术发展趋势的综合考量。它不仅响应了消费者对于更高质量生活的向往,同时也为推动智能家居领域创新应用提供了新的思路。通过实现对传统鱼缸管理方式的根本变革,我们希望能够为广大养鱼爱好者带来前所未有的使用体验,并促进整个行业的进一步发展。




【2】设计实现的功能

水质监测与报警:

  • 采用浑浊度传感器实时监测鱼缸水质状况。

  • 当检测到的水质数值超过用户预设的最大值时,系统将自动点亮红色LED灯作为警告信号,提示用户需要清洁或更换过滤材料。

温度监控:

  • 配备了防水式温度传感器来测量水温。

  • 温度数据将在OLED显示屏上持续显示,让用户随时掌握当前水温情况。

高效过滤及循环系统:

  • 内置高效的过滤装置能够去除水中的有害物质和杂质。

  • 结合循环水泵使用,确保水质保持清洁,同时减少换水频率,理想情况下一缸水可维持长达半年之久。

自动喂食机制:

  • 支持用户设置定时投喂计划,根据鱼类种类和需求定制食物供给时间表。

  • 系统会按照预定的时间间隔自动投放适量的食物,保证鱼类获得规律且充足的营养供应。

光照控制:

  • 提供可调节的照明灯光,不仅有助于观赏效果,还能促进水草等植物的生长。

  • 模拟自然昼夜周期变化,增强水体中溶解氧含量,有利于整个生态系统的健康发展。

信息展示:

  • OLED显示屏作为主要的信息输出界面,清晰地展示了包括但不限于水质百分比、实际水温、光照强度等关键参数。

  • 显示屏还提供了额外页面,用于查看和调整如水温阈值、水质阈值以及增氧操作的时间间隔等设置项。

手机管理与配置:

  • 通过HC05蓝牙模块,所有收集的数据可以上传至用户的Android手机APP。

  • 利用Qt框架开发的应用程序允许用户轻松访问鱼缸状态并进行相关设置调整,例如更改水质和温度的警戒线、设定自动喂食周期等。

  • 手机应用程序提供了一个直观友好的用户界面,使得即使不在家也能方便地管理和监控鱼缸环境。


【3】项目硬件模块组成

本项目的智能鱼缸系统由多个硬件模块组成,每个模块都承担着特定的功能,共同协作以实现系统的智能化管理。

以下是该项目的主要硬件模块组成:

1. 主控模块 - STM32F103RCT6微控制器

  • 作为整个系统的核心,STM32F103RCT6负责处理所有传感器数据、执行逻辑判断、控制各个外围设备,并通过蓝牙与手机APP通信。

  • 采用C语言进行编程,利用寄存器级编程风格以提高效率,开发环境使用Keil5。

2. 显示模块 - OLED显示屏

  • 用于显示水质百分比、水温、光照强度等实时信息。

  • 提供用户界面,展示当前设置和状态信息,如水质阈值、水温阀值及增氧间隔时间。

3. 水质检测模块 - 浑浊度传感器

  • 实时监测鱼缸内的水质状况,输出相应的信号给主控芯片。

  • 当水质超过预设标准时,触发报警机制(红色LED灯)。

4. 温度检测模块 - 防水式温度传感器

  • 安装于鱼缸内部,持续监测水温变化,并将数据传递给STM32单片机处理后在OLED上显示。

5. 过滤与循环模块 - 过滤装置+循环水泵

  • 包括一个高效的过滤系统和一个循环水泵,确保水质清洁并促进氧气溶解。

  • 循环水泵保持水流循环,有助于维持良好的水质条件。

6. 自动喂食模块 - 定时投喂装置

  • 可设定的定时器控制自动喂食器,按照预定的时间表投放饲料。

  • 保证鱼类获得规律的食物供给。

7. 照明模块 - LED灯光控制系统

  • 由可调节亮度的LED灯构成,模拟自然光照周期,支持植物生长并增加水中溶解氧含量。

  • 可通过主控芯片调整光强和开启/关闭时间。

8. 无线通信模块 - HC05蓝牙模块

  • 用于建立鱼缸系统与Android手机之间的无线连接。

  • 支持数据传输,允许用户通过手机APP查看鱼缸状态和配置各项参数。

9. 报警提示模块 - LED指示灯

  • 用于水质超标时发出视觉警告,提醒用户采取相应措施。

10. 电源模块

  • 为整个系统提供稳定可靠的电力供应,包括电池、适配器供电方式。


1.2 设计思路

本项目的设计思路围绕着提供一个全面、智能且用户友好的鱼缸管理系统展开。考虑到传统养鱼过程中常见的问题,如水质监控不足、温度控制不精确以及定期喂食和清洁的繁琐,决定采用先进的传感器技术和自动化解决方案来解决这些问题。通过集成浑浊度传感器、防水式温度传感器等设备,系统能够实时监测鱼缸内的关键环境参数,并将这些信息清晰地展示在OLED显示屏上,让用户一目了然。

为了进一步提升用户体验,引入了自动化的概念,包括过滤系统的智能化管理以及自动喂食功能。过滤装置与循环水泵协同工作,不仅净化水质,还能促进水体循环,提高氧气溶解率,从而创造更加健康的生活环境。同时,定时投喂机制允许用户根据鱼类的具体需求设定合理的喂食计划,确保营养供给的规律性。此外,照明控制系统也经过精心设计,模拟自然光照变化,不仅美化观赏效果,还促进了水生植物的光合作用,间接增加了水中溶解氧含量,有利于整个生态系统的平衡发展。

考虑到现代人对移动互联的需求,注重手机APP与鱼缸系统的无缝连接。通过HC05蓝牙模块,实现了数据的无线传输,使得用户可以通过智能手机远程查看鱼缸状态并调整设置。基于Qt框架开发的Android应用程序提供了直观易用的界面,让用户可以轻松配置水质和温度阈值、查看历史数据记录及接收异常警报通知,极大地方便了日常管理。这样的设计不仅满足了用户对于便捷性的追求,也为长期维护提供了可靠的技术支持。

本项目的整体设计思路是结合当前先进的嵌入式技术、传感技术和物联网通信手段,打造一个集水质监测、温度控制、自动喂食、光照调节等功能于一体的智能鱼缸系统。通过优化用户体验,简化操作流程,最终目标是为用户提供一种更为高效、舒适的家庭养鱼体验。


1.3 系统功能总结

序号功能模块描述实现方式/技术
1水质检测通过浑浊度传感器实时监测水质,当水质数值超过预设最大值时,LED灯亮红警示。浑浊度传感器、红色LED灯、STM32F103RCT6
2温度检测使用防水式温度传感器监测水温,并在OLED显示屏上显示当前水温。防水温度传感器、OLED显示屏、STM32F103RCT6
3过滤系统采用高效的过滤装置净化水质,去除有害物质,配合循环水泵工作,减少换水频率。过滤装置、循环水泵、STM32F103RCT6
4水泵系统保持水体循环,促进氧气溶解,维持水质清洁。循环水泵、STM32F103RCT6
5自动喂食支持设定定时投喂计划,确保鱼类获得规律的食物供应。定时器、自动喂食器、STM32F103RCT6
6照明灯光可调节的LED灯光模拟昼夜周期,促进植物生长,增加水中溶解氧含量。LED灯光控制系统、STM32F103RCT6
7显示屏信息展示OLED显示屏展示水质百分比、水温、光照强度等关键参数,并提供设置页面。OLED显示屏、STM32F103RCT6
8手机监测与控制通过蓝牙将数据上传至Android手机APP,用户可以远程查看状态并调整设置。HC05蓝牙模块、Qt开发的Android APP



1.4 开发工具的选择

【1】设备端开发

STM32的编程语言选择C语言,C语言执行效率高,大学里主学的C语言,C语言编译出来的可执行文件最接近于机器码,汇编语言执行效率最高,但是汇编的移植性比较差,目前在一些操作系统内核里还有一些低配的单片机使用的较多,平常的单片机编程还是以C语言为主。C语言的执行效率仅次于汇编,语法理解简单、代码通用性强,也支持跨平台,在嵌入式底层、单片机编程里用的非常多,当前的设计就是采用C语言开发。

开发工具选择Keil,keil是一家世界领先的嵌入式微控制器软件开发商,在2015年,keil被ARM公司收购。因为当前芯片选择的是STM32F103系列,STMF103是属于ARM公司的芯片构架、Cortex-M3内核系列的芯片,所以使用Kile来开发STM32是有先天优势的,而keil在各大高校使用的也非常多,很多教科书里都是以keil来教学,开发51单片机、STM32单片机等等。目前作为MCU芯片开发的软件也不只是keil一家独大,IAR在MCU微处理器开发领域里也使用的非常多,IAR扩展性更强,也支持STM32开发,也支持其他芯片,比如:CC2530,51单片机的开发。从软件的使用上来讲,IAR比keil更加简洁,功能相对少一些。如果之前使用过keil,而且使用频率较多,已经习惯再使用IAR是有点不适应界面的。

【2】上位机开发

本项目中使用的Qt开发环境是一个跨平台的应用程序开发框架,它允许开发者使用C++语言来创建高性能的图形用户界面(GUI)应用程序。Qt不仅支持桌面操作系统如Windows、macOS和Linux,还广泛应用于嵌入式系统和移动设备,包括Android和iOS平台。对于本项目的智能鱼缸系统而言,我们选择了Qt 5.12.6版本来开发与鱼缸硬件通信的Android手机应用程序。

跨平台能力: Qt的一个重要特点是其强大的跨平台能力。这意味着同一个代码库可以被编译成不同操作系统的可执行文件,极大地提高了开发效率并简化了维护工作。在本项目中,虽然主要目标是Android平台,但未来如果需要扩展到其他平台,Qt的这一特性将提供极大的便利。

丰富的API和工具集: Qt提供了大量的类库和API,涵盖了从网络通信、数据库访问到多媒体处理等多个方面。对于本项目而言,Qt的网络模块尤为重要,因为它支持通过蓝牙协议进行数据传输,使得手机APP能够无缝地与基于STM32单片机的鱼缸控制系统连接。此外,Qt Quick和QML等技术也便于快速构建现代化的用户界面,为用户提供直观的操作体验。

集成开发环境 - Qt Creator: Qt自带了一个功能齐全的集成开发环境(IDE),即Qt Creator。它集成了项目管理、代码编辑、UI设计、调试等多种功能于一体,极大地简化了软件开发流程。在开发过程中,我们可以利用Qt Designer来可视化地设计应用程序界面,同时借助Qt Creator的强大调试工具快速定位并解决代码中的问题。

社区支持与文档资源: Qt拥有一个活跃且庞大的开发者社区,这意味着当遇到技术难题时,可以很容易找到相关的解决方案或获得帮助。此外,Qt官方提供的详尽文档和示例代码也为新手开发者提供了一个很好的学习起点,有助于快速上手并深入理解Qt的各项特性和最佳实践。

选择Qt作为本项目Android应用程序的开发环境,主要是看中了它的跨平台能力、丰富的功能库以及高效的开发工具。这些优势结合在一起,为实现一个既美观又实用的智能鱼缸管理应用奠定了坚实的基础。通过Qt开发的手机APP,用户不仅可以方便地监控鱼缸状态,还能轻松调整各项设置,真正享受到智能家居带来的便捷生活。


1.5 模块的技术详情介绍

【1】浑浊度传感器

在本项目中,浑浊度传感器用于实时监测鱼缸内的水质状况。浑浊度是指水体中悬浮颗粒物的数量和大小,这些颗粒物可以是泥土、藻类、微生物或其他有机和无机物质。浑浊度的增加通常意味着水质的恶化,可能对鱼类和其他水生生物的健康产生不利影响。

浑浊度传感器的工作原理基于光的散射效应。具体来说,传感器内部有一个光源(通常是红外LED或激光二极管)和一个光电探测器。光源发出的光线穿过水样时,会与水中的悬浮颗粒发生相互作用,导致光线被散射。散射的程度取决于水中悬浮颗粒的数量和大小。光电探测器则用来检测散射光的强度。

当水中的悬浮颗粒较多时,更多的光线会被散射,光电探测器接收到的散射光强度也会相应增加。反之,如果水中的悬浮颗粒较少,散射光强度则会降低。通过测量光电探测器接收到的散射光强度,传感器可以间接地推算出水样的浑浊度。

传感器输出的信号通常是模拟电压信号,这个信号与水样的浑浊度成正比。在实际应用中,该模拟信号会被送入STM32单片机的模数转换器(ADC),转换为数字信号进行进一步处理。单片机会根据预设的阈值来判断水质是否超标,并采取相应的控制措施,如点亮红色LED灯提醒用户需要清理过滤系统。

浑浊度传感器具有响应速度快、精度高、易于集成等优点,非常适合用于实时监测水质变化。通过使用这种传感器,本项目能够及时发现水质问题并采取措施,从而确保鱼缸内环境的清洁和稳定,提升鱼类及其他水生生物的生活质量。


【2】照明灯的作用

在智能鱼缸项目中,添加照明灯不仅提升了观赏效果,还对鱼类和水生植物的健康生长起到了重要作用。

以下是照明灯在鱼缸中的主要含义和作用:

  1. 促进水生植物生长

  • 光合作用:照明灯模拟自然光照,为水生植物提供必要的光照条件,使其能够进行光合作用。光合作用是植物生长的基础,通过这一过程,植物可以吸收二氧化碳并释放氧气,同时产生能量供自身生长。

  • 营养供给:适当的光照强度和光照周期有助于水生植物合成所需的营养物质,如糖类、蛋白质等,从而保持其健康生长。

  1. 模拟昼夜周期

  • 生物钟调节:鱼类和其他水生生物都有一定的生物钟,需要遵循一定的昼夜节律。通过定时开关照明灯,可以模拟自然界的昼夜变化,帮助鱼类维持正常的生理节奏,包括进食、休息和繁殖行为。

  • 减少应激反应:稳定的光照周期有助于减少鱼类的应激反应,使它们更加适应环境,减少疾病的发生。

  1. 提高水中溶解氧含量

  • 光合作用产氧:水生植物在光合作用过程中会产生氧气,这些氧气会溶解在水中,增加水体中的溶解氧含量。这对于鱼类和其他需氧生物来说是非常重要的,因为充足的溶解氧有助于它们的呼吸和新陈代谢。

  • 促进微生物活动:适当的光照还能促进有益微生物的活动,这些微生物在分解有机物和维持水质平衡方面起着关键作用。

  1. 增强观赏效果

  • 美观展示:照明灯不仅可以照亮鱼缸内的景物,还能通过不同颜色和亮度的变化,创造出丰富多彩的视觉效果,提升鱼缸的整体美感。

  • 突出特色:通过调整灯光的颜色和角度,可以突出鱼缸内特定的景观或装饰,使整个鱼缸看起来更加生动和有层次感。

  1. 便于观察和管理

  • 夜间观察:在夜间或光线较暗的情况下,照明灯可以提供足够的光线,方便用户观察鱼缸内部的情况,及时发现和处理问题。

  • 维护操作:良好的照明条件有助于用户在清洁鱼缸或更换过滤材料时更好地查看细节,确保操作的准确性。


1.6 市场产品的技术调研结果

【1】技术大纲

系统设计

基于物联网技术

STM32单片机作为核心

传感器采集数据

数据处理与分析

云平台通信

功能实现

自动温控

自动喂食

水质监测

自动换水

光照调节

用户交互

手机APP远程控制

短信报警功能

实时数据查看

应用场景

家用观赏鱼缸

物联网家居系统集成

智能生态水族箱

技术优势

成本低廉,操作简便

可靠性高,稳定运行测试表明稳定可靠

未来发展方向

智能化饲养管理系统扩展


【2】主要集中的功能总结

  1. 控制核心:大多数设计都采用了STM32单片机作为控制核心。STM32单片机因其高性能和丰富的外设接口,能够有效地处理鱼缸环境中的各种传感器数据,并控制相应的执行机构。

  2. 环境监测:系统通常包括对鱼缸内温度、水位、水质(如PH值、溶氧量、浑浊度)等环境参数的监测。例如,都提到了对这些参数的监测和控制。

  3. 自动控制功能:智能鱼缸系统能够实现自动调节水温、自动供氧、自动喂食等功能。如等都提到了这些自动控制功能。

  4. 远程监控与控制:通过物联网技术,用户可以远程监控鱼缸环境并进行控制。例如,都提到了远程监控和控制的功能。

  5. 用户界面:系统通常配备有手机APP或网页界面,用户可以通过这些界面查看鱼缸状态并进行操作。如等都提到了用户界面的设计。

  6. 生态平衡:一些设计还考虑到了鱼缸生态系统的平衡,如提到的智能生态鱼缸系统,包含了恒温、投食、水位检测、光照、水质检测等多个子系统,形成了一个立体的智能生态景观。


1.7 研究意义

随着现代生活节奏的加快和人们对于生活质量要求的提高,养鱼作为一种休闲活动越来越受到欢迎。然而,传统的鱼缸维护工作繁琐且需要定期的人工干预,这不仅耗时费力,还要求一定的专业知识。智能鱼缸系统的开发能够显著简化这些维护任务,提升用户体验,使更多人能够轻松享受养鱼的乐趣。通过集成多种传感器和自动化装置,智能鱼缸系统可以实时监测水质、温度等关键参数,并自动执行必要的操作,如过滤、增氧和定时喂食。这种自动化管理不仅提高了鱼缸内环境的稳定性,还能确保鱼类和其他水生生物的健康。

本项目的研究意义不仅仅在于提供一个便捷的养鱼解决方案,还在于推动智能家居技术的发展。随着物联网(IoT)技术的普及,越来越多的家庭设备实现了智能化管理。智能鱼缸系统作为智能家居的一个重要组成部分,展示了如何将先进的传感技术、嵌入式系统和无线通信技术结合在一起,为用户提供更加高效、舒适的生活体验。通过蓝牙模块实现与智能手机的连接,用户可以远程监控和控制鱼缸状态,这种远程管理能力极大地提升了系统的灵活性和便利性。

此外,本项目还具有重要的经济和社会价值。一方面,智能鱼缸系统的开发可以带动相关产业链的发展,包括传感器制造、嵌入式系统开发、移动应用开发等多个领域,促进技术创新和产业升级。另一方面,智能鱼缸系统的推广和应用可以减少传统养鱼过程中因人工干预不足导致的资源浪费和环境污染问题,有助于实现可持续发展。同时,智能鱼缸系统还可以应用于教育和科研领域,为学生和研究人员提供一个直观的教学和实验平台,增强他们对生态环境保护的认识。

从长远来看,本项目的成功实施不仅可以为用户提供一个高效、便捷且易于管理的养鱼解决方案,还能为智能家居领域的其他应用提供宝贵的经验和技术支持。通过对智能鱼缸系统的研究和开发,我们希望能够激发更多的创新思维,推动智能家居技术的进一步发展,为未来智慧生活的实现奠定坚实的基础。


1.8 参考文献

1. 张胜男,杨荣国.物联网鱼缸智能控制系统设计[J].现代商贸工业,2020. 
2. 朱炯健,张喜洋,杨树辉等.基于STM32的远程无线智能鱼缸控制系统设计[J].科技风,2019.
3. 向镍锌,郭平,曹旬.基于STM32智能鱼缸监控系统的设计[J].科技视界,2020.
4. 张志辉,张小花,王嘉辉等.基于物联网的智能鱼缸远程控制系统设计及开发[J].电子技术与软件工程,2019.
5. 彭炫.基于STM32单片机的智能鱼缸设计与研究[J].电子世界,2020.
6. 柳春林.基于ONENET云平台的智能鱼缸研究报告[J].科学技术创新,2019.
7. 刘伟,林开司,刘安勇.基于物联网的鱼缸智能控制系统设计与实现[J].淮海工学院学报(自然科学版),2016.
8. 邱义.基于STM32的智能鱼缸远程控制系统设计[J].信息技术与信息化,2020.
9. 何锋,兰慧.基于手机遥控的智能鱼缸控制系统的设计 附视频[J].电脑知识与技术,2024.
10. 白春雨,吴红海,赵怀冬等.基于GSM的可调节智能鱼缸生态系统[J].科技风,2017.
11. 张胜男,杨荣国.一种基于STM32物联网家居控制的鱼缸监控系统[J].现代商贸工业,2022.
12. 郭宇豪,朱宵月,田晨阳等.基于STM32的家用智慧鱼缸系统设计[J].新型工业化,2021.
13. 吴海青,何满塘,周朝阳等.基于STM32单片机的智能鱼缸控制系统设计[J].机械工程与自动化,2022.
14. 宋英路,张玉薇,李政林等.基于物联网的鱼缸智能控制系统[J].数字技术与应用,2019.
15. 王宇鑫,胡晓华,黄淑燕等.基于STM32的智能生态鱼缸系统设计与实现[J].冶金管理,2021.
16. 无锡学院自动化学院.基于STM32的智能鱼缸的设计与实现[J].微处理机,2023.
17. 华蕊,单超颖,赵凯等.基于物联网的智能鱼缸[J].湖北农机化,2020.
18. 徐汉林,丁国超,孙殿棋等.基于STM32的智能鱼缸养殖系统[J].现代化农业,2022.
19. 赵春波,李超,侯学梅等.智能生态水族箱的设计与实现[J].电子技术与软件工程,2019.
20. 徐喆.一款家用鱼缸智能控制系统设计[D].西南交通大学,2017.
21. WANG Yun-lei,QI Yu-ming.Design of Intelligent Aquarium System based on Embedded System[J].International Journal of Plant Engineering and Management,2017.
22. 梁顺可,黄志明,徐奕森等.基于4G的物联鱼缸系统设计[J].现代制造技术与装备,2021.
23. You Luo, Jiajun Ren et al. “Design and Realization of Intelligent Fish Tank System based on STM32 Microcontroller.” Journal of Big Data and Computing(2024).
24. 张云达.智能生态鱼缸系统设计与实现[D].浙江海洋大学,2023.
25. 基于STM32与FreeRTOS的物联网鱼缸.
26. Zihao Wu, Lin Zhong et al.A multi-functional fish tank remote monitoring system based on STM32.” International Journal of Frontiers in Engineering Technology(2022).
27. 1. 山西农业大学信息科学与工程学院2. 山西农业大学工学院.基于STM32的水下自主巡游机器鱼的设计与实现[J].山西电子技术,2019.
28. Xi Xie, Wei-zhong Jiang. “Intelligent Fishpond Monitoring System Based on STM32 and Zigbsee.” Research Journal of Applied Sciences, Engineering and Technology(2016).
29. Improvement of Smart Farm by using IoT for Ornamental Fishes and Aquatic Animals Store.International Journal of Innovative Technology and Exploring Engineering(2020).
30. Ananto Indra Nugraha, Yesy Diah Rosita et al.PROTOTIPE SMART AKUARIUM BERBASIS IOT DENGAN PEMANFAATAN ESP32.SEMINAR NASIONAL FAKULTAS TEKNIK(2023).



二、硬件选型

1. 主控芯片 - STM32F103RCT6

  • 型号: STM32F103RCT6

  • 特性:

    • ARM Cortex-M3内核,最高工作频率72MHz。

    • 内置512KB Flash和64KB SRAM。

    • 多个定时器、ADC(模数转换器)、USART(通用同步异步收发传输器)等外设。

    • 支持多种通信接口,包括SPI、I2C、USB等。

  • 选择理由:

    • 性能强大,足以处理复杂的传感器数据处理任务。

    • 丰富的外设支持,便于连接各种传感器和执行机构。

    • 成本效益高,广泛应用于嵌入式系统开发。

2. 显示屏 - OLED显示屏

  • 型号: 0.96寸OLED显示屏

  • 特性:

    • 分辨率:128x64像素。

    • I2C或SPI接口。

    • 低功耗,自发光,对比度高。

  • 选择理由:

    • 尺寸适中,易于集成到鱼缸面板上。

    • 高清晰度显示,即使在光线较暗的环境下也能清晰阅读。

    • 低功耗特性延长了电池寿命或降低了电源需求。

3. 水质检测 - 浑浊度传感器

  • 型号: TDS/Turbidity Sensor

  • 特性:

    • 输出模拟信号,表示水质的浑浊程度。

    • 可以通过电压值来判断水质状况。

  • 选择理由:

    • 简单可靠,成本低廉。

    • 直接输出模拟信号,便于与STM32的ADC接口相连。

4. 温度检测 - 防水式温度传感器

  • 型号: DS18B20 或类似的防水数字温度传感器

  • 特性:

    • 数字输出,精度可达±0.5°C。

    • 单总线接口,简化布线。

    • 防水设计,适用于水下环境。

  • 选择理由:

    • 高精度且稳定性好。

    • 防水特性确保长期稳定工作。

    • 单总线接口减少了引脚占用,简化电路设计。

5. 过滤与循环 - 过滤装置 + 循环水泵

  • 过滤装置:

    • 类型: 多层过滤系统,包含物理过滤、化学过滤和生物过滤。

    • 选择理由: 综合过滤效果好,能够有效去除杂质和有害物质。

  • 循环水泵:

    • 类型: 低噪音直流泵

    • 特性: 低功耗、长寿命、静音运行

    • 选择理由: 保证水流循环的同时,减少对鱼类的影响。

6. 自动喂食 - 定时投喂装置

  • 类型: 电动旋转喂食器

  • 特性:

    • 可设定多个时间段自动投喂。

    • 能够储存一定量的饲料。

  • 选择理由:

    • 结构简单,易于控制。

    • 可以根据需要调整投喂量和时间,适应不同种类的鱼类。

7. 照明 - LED灯光控制系统

  • 类型: RGB LED灯条

  • 特性:

    • 可调亮度和颜色。

    • 通过PWM信号控制。

  • 选择理由:

    • 提供多样的光照条件,模拟自然光照周期。

    • PWM控制可以精确调节光强,节省能源。

8. 无线通信 - HC05蓝牙模块

  • 型号: HC05

  • 特性:

    • 串行通信接口(UART)。

    • 工作电压3.3V~6V。

    • 支持蓝牙2.0协议。

  • 选择理由:

    • 体积小,便于集成。

    • 功耗低,稳定性好。

    • 价格合理,广泛应用于物联网项目。

9. 报警提示 - LED指示灯

  • 类型: 红色LED灯

  • 特性:

    • 低功耗,亮度高。

    • 通过GPIO直接控制。

  • 选择理由:

    • 简单直观的报警方式。

    • 低成本,易于集成。

10. 电源管理

  • 电源供应:

    • 类型: 5V DC电源适配器

    • 选择理由: 为整个系统提供稳定的电源,同时支持其他低电压器件的工作。

  • 备用电源:

    • 类型: 可充电锂电池

    • 选择理由: 在断电情况下作为应急电源使用,保持系统的部分功能继续运行。




三、上位机开发

为了方便查看设备上传的数据,接下来利用Qt开发一款Android手机APP

3.1 Qt开发环境安装

Qt的中文官网: https://www.qt.io/zh-cn/



QT5.12.6的下载地址:https://download.qt.io/archive/qt/5.12/5.12.6

打开下载链接后选择下面的版本进行下载:

qt-opensource-windows-x86-5.12.6.exe 13-Nov-2019 07:28 3.7G Details

软件安装时断网安装,否则会提示输入账户。

安装的时候,第一个复选框里勾选一个mingw 32编译器即可,其他的不管默认就行,直接点击下一步继续安装。


选择MinGW 32-bit 编译器: (一定要看清楚了)


说明: 我这里只是介绍PC端,也就是Windows系统下的Qt环境搭建。 Android的开发环境比较麻烦,如果想学习Android开发,想编译Android程序的APP,需要自己去搭建Android环境。


也可以看下面这篇文章,不过这个文章是在Qt开发专栏里付费的,需要订阅专栏才可以看。 如果不想付费看,也可以自行找其他教程,自己搭建好必须的环境就行了

Android环境搭建的博客链接: https://blog.csdn.net/xiaolong1126626497/article/details/117254453


3.2 新建上位机工程

前面2讲解了需要用的API接口,接下来就使用Qt设计上位机,设计界面,完成整体上位机的逻辑设计。


【1】新建工程


【2】设置项目的名称。



【3】选择编译系统


【4】选择默认继承的类


【5】选择编译器



【6】点击完成


【7】工程创建完成



3.3 设计UI界面与工程配置

【1】打开UI文件


打开默认的界面如下:



【2】开始设计界面

根据自己需求设计界面。


3.4 编译Windows上位机

点击软件左下角的绿色三角形按钮进行编译运行。



3.5 配置Android环境

如果想编译Android手机APP,必须要先自己配置好自己的Android环境。(搭建环境的过程可以网上找下教程学习配置)


然后才可以进行下面的步骤。


【1】选择Android编译器



【2】创建Android配置文件





创建完成。

【3】配置Android图标与名称


【3】编译Android上位机

Qt本身是跨平台的,直接选择Android的编译器,就可以将程序编译到Android平台。

然后点击构建。


成功之后,在目录下可以看到生成的apk文件,也就是Android手机的安装包,电脑端使用QQ发送给手机QQ,手机登录QQ接收,就能直接安装。


生成的apk的目录在哪里呢? 编译完成之后,在控制台会输出APK文件的路径。

知道目录在哪里之后,在Windows的文件资源管理器里,找到路径,具体看下图,找到生成的apk文件。


D:/linux-share-dir/QT/build-app_Huawei_Eco_tracking-Android_for_arm64_v8a_Clang_Qt_5_12_6_for_Android_ARM64_v8a-Release/android-build//build/outputs/apk/debug/android-build-debug.apk




四、STM32代码开发

4.1 蓝牙与串口的配置代码

串口初始化代码(USART1 115200波特率)

#include "stm32f10x.h"

void USART1_Init(void) {
// 1. 开启时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // 开启GPIOA时钟
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // 开启USART1时钟

// 2. 配置PA9(TX)为复用推挽输出,PA10(RX)为浮空输入
GPIOA->CRH &= ~(GPIO_CRH_MODE9 | GPIO_CRH_CNF9); // 清除之前配置
GPIOA->CRH |= (GPIO_CRH_MODE9_1 | GPIO_CRH_CNF9_1); // 配置PA9为50MHz复用推挽输出
GPIOA->CRH &= ~(GPIO_CRH_MODE10 | GPIO_CRH_CNF10); // 清除之前配置
GPIOA->CRH |= GPIO_CRH_CNF10_0; // 配置PA10为浮空输入

// 3. 设置波特率
// 波特率计算: BaudRate = Fck / (16 * USARTDIV)
// 假设Fck为72MHz,设定波特率为115200:
// USARTDIV = 72MHz / (16 * 115200) = 39.0625
// 将39.0625拆分为39整数部分(0x27)和1/16小数部分(0x1)
USART1->BRR = (39 << 4) | 1;

// 4. 配置USART1
USART1->CR1 |= USART_CR1_TE; // 使能发送功能
USART1->CR1 |= USART_CR1_RE; // 使能接收功能
USART1->CR1 |= USART_CR1_UE; // 使能USART

// 5. 使能RXNE中断
USART1->CR1 |= USART_CR1_RXNEIE;
NVIC_EnableIRQ(USART1_IRQn); // 开启USART1中断
}

void USART1_IRQHandler(void) {
if (USART1->SR & USART_SR_RXNE) {
uint8_t data = USART1->DR; // 读取接收到的数据
// 这里可以添加数据处理逻辑
}
}

void USART1_SendChar(char c) {
while (!(USART1->SR & USART_SR_TXE)); // 等待发送缓冲区空
USART1->DR = c;
}

void USART1_SendString(char* str) {
while (*str) {
USART1_SendChar(*str++);
}
}

HC05 蓝牙模块配置

HC05蓝牙模块的基本配置通常是在串口上进行简单的AT命令配置。在初始化完成后,可以发送AT指令来配置蓝牙模块。

void HC05_Init(void) {
USART1_SendString("AT\r\n"); // 发送AT指令,测试蓝牙是否响应
// 添加延时或等待响应

USART1_SendString("AT+UART=115200,0,0\r\n"); // 设置蓝牙波特率为115200, 无校验位,1个停止位
// 等待蓝牙返回OK

USART1_SendString("AT+ROLE=0\r\n"); // 将蓝牙设置为从机模式
// 等待蓝牙返回OK

USART1_SendString("AT+NAME=SmartFishTank\r\n"); // 设置蓝牙设备名称为"SmartFishTank"
// 等待蓝牙返回OK
}


  1. 串口初始化:串口1初始化时,设置波特率为115200,使用STM32的寄存器进行配置。使用PA9作为TX引脚,PA10作为RX引脚。

  2. HC05配置:通过USART1发送AT指令对HC05蓝牙模块进行配置,包括波特率设置、角色设置、蓝牙名称设置等。

这段代码可以用于实现HC05蓝牙模块的初始化与通信,之后可以通过Android手机APP通过蓝牙与STM32进行通信。



4.2 主函数里的项目逻辑代码

下面是项目的主函数里的项目逻辑代码(其他子模块的代码太多,文档无法全部贴出)。

可以去网盘里下载传感器模块的代码:https://pan.quark.cn/s/145a9b3f7f53

以下是智能鱼缸项目的 main.c 逻辑代码框架,所有子模块(如水质检测、温度检测、OLED显示、自动喂食、蓝牙通信等)已经编写好之后,可以根据项目需求直接调用相应的函数。

main.c 逻辑代码

#include "stm32f10x.h"
#include "usart.h" // 假设这里有串口驱动
#include "oled.h" // OLED显示屏驱动
#include "bluetooth.h" // 蓝牙模块驱动
#include "sensor.h" // 传感器(如水质、温度传感器等)
#include "feeder.h" // 自动喂食模块
#include "pump.h" // 水泵系统

// 阀值设定
#define MAX_WATER_QUALITY 40 // 水质最大值(%)
#define MAX_WATER_TEMP 23 // 水温最大值(摄氏度)

// 全局变量,存储当前水质、水温等状态
float water_quality = 0;
float water_temp = 0;
uint8_t light_intensity = 0;
uint32_t next_oxygen_time = 0; // 下次增氧时间

void SystemClock_Config(void);
void Update_OLED_Display_Page1(void);
void Update_OLED_Display_Page2(void);

int main(void) {
// 初始化系统时钟
SystemClock_Config();

// 初始化相关模块
USART1_Init(); // 初始化串口用于蓝牙通信
OLED_Init(); // 初始化OLED显示
Sensor_Init(); // 初始化水质、温度传感器等
Feeder_Init(); // 初始化自动喂食系统
Pump_Init(); // 初始化水泵系统
HC05_Init(); // 初始化蓝牙模块

// 主循环
while (1) {
// 1. 获取传感器数据
water_quality = Get_Water_Quality(); // 获取水质数据
water_temp = Get_Water_Temperature(); // 获取水温数据
light_intensity = Get_Light_Intensity(); // 获取光照强度

// 2. 更新OLED显示屏
Update_OLED_Display_Page1(); // 更新显示屏第一页内容
// 可根据具体按键切换到第二页显示
// Update_OLED_Display_Page2();

// 3. 检查水质,超过阀值时报警(例如点亮红色LED)
if (water_quality > MAX_WATER_QUALITY) {
LED_SetColor(RED); // 假设存在LED驱动模块
} else {
LED_SetColor(GREEN);
}

// 4. 自动增氧(根据设定的增氧间隔时间执行)
if (Check_Oxygen_Time(next_oxygen_time)) {
Pump_Oxygen(); // 启动增氧水泵
next_oxygen_time = Get_Next_Oxygen_Time(); // 设定下次增氧时间
}

// 5. 自动喂食
if (Check_Feeding_Time()) {
Feeder_Start(); // 触发喂食动作
}

// 6. 蓝牙通信,将当前状态通过蓝牙发送到手机APP
Send_Bluetooth_Data(water_quality, water_temp, light_intensity, next_oxygen_time);

// 延时一段时间,减少循环频率
Delay_ms(1000);
}
}

// 更新OLED第1页显示内容
void Update_OLED_Display_Page1(void) {
OLED_Clear();
OLED_ShowString(0, 0, "物联网智能鱼缸");

OLED_ShowString(0, 2, "水质 ");
OLED_ShowNum(64, 2, water_quality, 3);
OLED_ShowString(90, 2, "%");

OLED_ShowString(0, 3, "水温 ");
OLED_ShowNum(64, 3, water_temp, 3);
OLED_ShowString(90, 3, "C");

OLED_ShowString(0, 4, "光强 ");
OLED_ShowNum(64, 4, light_intensity, 3);
OLED_ShowString(90, 4, "lux");

OLED_ShowString(0, 5, "下次增氧时间");
OLED_ShowTime(64, 5, next_oxygen_time); // 自定义的时间显示函数
}

// 更新OLED第2页显示内容
void Update_OLED_Display_Page2(void) {
OLED_Clear();
OLED_ShowString(0, 0, "物联网智能鱼缸");

OLED_ShowString(0, 2, "水温阀值 ");
OLED_ShowNum(90, 2, MAX_WATER_TEMP, 3);
OLED_ShowString(120, 2, "C");

OLED_ShowString(0, 3, "水质阀值 ");
OLED_ShowNum(90, 3, MAX_WATER_QUALITY, 3);
OLED_ShowString(120, 3, "%");

OLED_ShowString(0, 4, "增氧间隔 ");
OLED_ShowNum(90, 4, 3); // 假设增氧间隔为3分钟
OLED_ShowString(120, 4, "min");
}

// 系统时钟配置
void SystemClock_Config(void) {
// 配置系统时钟为72MHz
RCC->CFGR |= RCC_CFGR_SW_PLL; // 使用PLL作为系统时钟
RCC->CR |= RCC_CR_PLLON; // 打开PLL
while (!(RCC->CR & RCC_CR_PLLRDY)); // 等待PLL稳定
}

// 其他可能用到的辅助函数
uint32_t Get_Next_Oxygen_Time(void) {
// 假设返回下次增氧时间,增加3分钟
return Get_Current_Time() + 180; // 180秒 = 3分钟
}

uint8_t Check_Oxygen_Time(uint32_t next_time) {
// 检查是否到了设定的增氧时间
return Get_Current_Time() >= next_time;
}

代码说明:

  1. 系统初始化: 初始化系统时钟和各个外设模块(如串口、OLED、水质传感器、温度传感器、水泵、喂食器等)。

  2. 主循环:

  • 获取水质和温度传感器的数据。

  • 更新OLED屏幕的显示内容。

  • 根据水质检测的结果,判断是否需要报警(如使用LED灯指示)。

  • 控制自动增氧系统。

  • 控制自动喂食系统。

  • 通过蓝牙模块将数据发送到手机端。

  • 页面更新: 提供了两个OLED页面的更新函数,分别显示鱼缸的实时数据和阀值设定情况。

  • 辅助功能: 包括系统时钟配置函数、增氧时间检查函数等。



  • 五、总结

    本项目开发一款基于STM32F103RCT6单片机控制的智能鱼缸系统,集成水质监测、温度控制、自动喂食以及光照调节等多种功能于一体。该系统利用先进的传感器技术来实时监控鱼缸内的环境参数,通过直观的OLED显示屏向用户展示这些信息。系统采用浑浊度传感器进行水质检测,当水质指标超过预设阈值时,将通过红色LED灯提醒用户需要清理过滤系统;防水式温度传感器用于测量水温并在主面板上显示当前数值,确保鱼类生活在适宜的温度条件下。高效的过滤系统与循环水泵协同工作,不仅能够净化水质去除有害物质,还能延长换水周期至半年一次,显著减少维护成本。

    为了进一步增强用户体验,项目包括了自动喂食机制,允许用户设定定时投喂计划,从而保证鱼类获得规律的食物供应。照明方面,设计考虑到了植物生长的需求,设置了可调节强度和模拟昼夜变化的灯光,促进光合作用,增加水中溶解氧含量,有利于整个生态系统的健康稳定。所有这些关键数据都将通过一块易于阅读的OLED屏幕呈现给用户,其中包括水质百分比、实际水温和光照强度等重要指标。

    智能鱼缸还支持蓝牙通信,通过HC05蓝牙模块实现与Android手机APP的数据交换。借助于Qt框架开发的应用程序,用户可以在智能手机上远程查看鱼缸状态并调整各项设置,比如水质及水温阈值、增氧间隔时间等。这样既简化了日常管理流程,也使得养鱼变得更加便捷有趣。整体而言,这一综合解决方案致力于提供一个更加智能化且易于管理的家庭养鱼体验。


    DS小龙哥 嵌入式技术资讯
    不定时更新STM32、物联网、linux驱动、QT等技术文章;打造嵌入式开发相关知识分享、技术交流平台
     最新文章