0 前言
🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩 **stm32单片机远程智能WIFI鱼缸设计与实现 **
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:2分
- 创新点:3分
🧿 毕设项目分享:见文末!
1 简介
基于STM32的智能鱼缸系统,该系统通过检测水温水体浊度和水深来控制继电器开关选择打氧,、加热、照明或者水泵加水,通过wifi与onenet进行数据传输并数据可视化。
2 主要器件
- STM32F103C8T6主控芯片
- 水位传感器
- 光敏传感器
- ESP-01S WIFI模块
- OLED屏
- 继电器
3 实现效果
4 设计原理
4.1 水位传感器
简介
Water Sensor水位传感器是一款简单易用、性价比较高的水位/水滴识别检测传感器,其是通过具有一系列的暴露的平行导线线迹测量其水滴/水量大小从而判断水位。轻松完成水量到模拟信号的转换,,达到水位报警的功效。
优点
简单易用、小巧轻便、性价比高
特点
1、水量到模拟量的转换
2、可塑性强,本传感器输出为基础模拟值
3、低功耗,灵敏度高
4、可直接与魏处理器或其他逻辑电路相连接,适合各种开发板和控制器(如:Arduino控制器、STC单片机、AVR单片机等)
4.2 光敏传感器
简介
光敏传感器是最常见的传感器之一,它的种类繁多,主要有:光电管、光电倍增管、光敏电阻、光敏三极管、太阳能电池、红外线传感器、紫外线传感器、光纤式光电传感器、色彩传感器、CCD和CMOS图像传感器等。光传感器是目前产量最多、应用最广的传感器之一,它在自动控制和非电量电测技术中占有非常重要的地位。光敏传感器是利用光敏元件将光信号转换为电信号的传感器,它的敏感波长在可见光波长附近,包括红外线波长和紫外线波长。光传感器不只局限于对光的探测,它还可以作为探测元件组成其他传感器,对许多非电量进行检测,只要将这些非电量转换为光信号的变化即可。
总结:照射光敏二极管的光强不同,通过光敏二极管的电流大小就不同,所以可以通过检测电流大小,达到检测光强的目的。利用这个电流变化,我们串接一个电阻,就可以转换成电压的变化,从而通过ADC读取电压值,判断外部光线的弱。
优点
- 采用灵敏型光敏电阻传感器
- 比较器输出,信号干净,波形好,驱动能力超过15mA。
- 配可调电位器可调节检测光线亮度
- 工作电压3.3V-5V
- 输出形式 :数字开关量输出(0和1)
- 设有固定螺栓孔,方便安装
原理图
4.3 ESP-01S WIFI模块
简介
ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266的低功耗UART-WiFi芯片模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。
尺寸、管脚定义
ESP8266的指令介绍
AT指令可以细分四种类型:
1.测试指令:AT+=?
该命令用于查询设置指令的参数以及取值的范围
2.查询指令:AT+?
该命令用于返回参数的当前值
3.设置指令:AT+=<’’’>
该命令用于设置用户自定义的参数
4.执行指令:AT+
该命令用于执行受模块内部程序控制的变参数不可变的功能
ESP8266的指令测试
可以通过STM开发板转为电平转换的功能连接上ESP8266模块在通过串口显示窗口在PC机上热输入AT指令来进行操作。
ESP8266的AT指令一览
5 部分核心代码
#include "water.h"
#include "delay.h"
#define WA GPIO_Pin_11
/*************** 配置LED用到的I/O口 *******************/
void Water_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能端口时钟
GPIO_InitStructure.GPIO_Pin = WA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化端口
//GPIO_SetBits(GPIOB, WA); // 关闭所有LED
}
int Water_state(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin_x)
{
Delay_ms(10);
if( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin_x) == 0)
{
return 1;
}
else
{
return 0;
}
}
#include "gm.h"
void gm_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_11);
}
🧿 毕设项目分享:见文末!
6 最后
**项目分享: ** https://blog.csdn.net/m0_984093