文章目录
- 0 前言
- 1 简介
- 2 主要器件
- 3 实现效果
- 4 设计原理
- RC振荡电路
- HS300X温湿度传感器模块
- ESP-01S WIFI模块
- 5 部分核心代码
- 5 最后
0 前言
🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩 基于单片机的移动便携桌面加湿器
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:4分
- 工作量:4分
- 创新点:3分
1 简介
基于Arduino uno 开发板便携抽湿加湿器。主控模块总体重量不超过300g。 拥有多个功能,可通过更换模块,实现给室内空气抽湿加湿的功能。 同时,便于维修,拓展。各模块之间耦合度低,通过更换不同的模块部分,为后续开发维修留下了余地。 此外还可以通过手机控制参数,实现个体化定制。
2 主要器件
- Arduino uno 开发板
- 加湿模块:rc震荡电路+108k微孔雾化片构成+棉棒+棉棒外壳
- 抽湿模块:半导体制冷片+散热片+导热硅胶+散热扇
- lcd液晶显示模块
- esp8266 wifi透传模块,负责把手机端发送的湿度设定值等参数传送给arduino
- HS300X传感器模块
3 实现效果
4 设计原理
RC振荡电路
工作原理
RC振荡电路,是指用电阻R、电容C组成选频网络的振荡电路,一般用来产生1Hz~1MHz范围的低频率信号。通常由放大器、正反馈网络和选频网络组成,其常见的RC振荡电路有RC相移振荡电路和RC桥式振荡电路。
RC振荡电路由放大电路、选频网络、正畈馈网络,稳幅环节四部分构成。主要优点是结构简单,经济方便。根据RC选频网络的不同形式,可以将RC振荡电路分为RC超前(或滞后)相移振荡电路和文氏电路振荡电路。
HS300X温湿度传感器模块
简介
IDT HS300x高性能相对湿度和温度传感器通过专有的传感器级别保护提供高可靠性和长期稳定性。这些高精度、完全校准的传感器具有极短的测量响应时间,采用小型6-LGA封装。因此,HS300x适合用于各种应用,从专门用于恶劣环境的产品到便携式设备,不一而足。集成校准和温度补偿逻辑提供通过标准I2C输出发送的完全校正相对湿度和温度值。HS300x高性能相对湿度和温度传感器具有极低功耗和电流消耗。坚固的碳化硅结构提供出色的长期稳定性。
特性
HS300X应用电路
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 <LiquidCrystal.h>#include <Wire.h>#include <WiFi.h>#include <SoftwareSerial.h>bool g_getDataSuccess = false;
bool g_startMeasure = false;int relayPin = A2;
static int setHumi = 78;
// wifiSoftwareSerial espSerial(A0, A1);
LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); // rs=2,d7=12// 湿度数据结构static struct SMeasureData
{int Humidity;int humi_h;int humi_l;bool Init(){Humidity = 0;humi_h = 0;humi_l = 0;}} Mdata;void setup()
{// put your setup code here, to run once:// I2CWire.begin();// 液晶显示屏lcd.begin(16, 2);//Serial.begin(9600);espSerial.begin(115200);pinMode(relayPin, OUTPUT);
}// 以下 获取湿度值部分开始bool StartMeasure(void){// 通知传感器开始测量Wire.beginTransmission(0x44); // 传感器地址44hex末尾+0Wire.endTransmission();delay(1000);g_startMeasure = true;return g_startMeasure;
}bool DataFetch(void)
{Mdata.Init();Wire.requestFrom(0x44, 2); // 获取湿度数据bool getHigh = true;while (Wire.available()){if (getHigh){Mdata.humi_h = Wire.read(); // Humidity Data [15:8]getHigh = false;}else{Mdata.humi_l = Wire.read(); // Humidity Data [7:0]getHigh = true;}}Mdata.Humidity = (Mdata.humi_h << 8) | Mdata.humi_l; // 拼接完整数据delay(1000);g_getDataSuccess = true;return g_getDataSuccess;
}int HumiCalc(int humi)
{float fixNum = 16383.0; // (2e+14)- 1 = 16383,根据芯片手册计算公式int humiResult = (humi / fixNum) * 100;return humiResult;
}
// 以上 获取湿度值部分结束void loop()
{// put your main code here, to run repeatedly:lcd.setCursor(0, 0);lcd.print("setHumi: ");lcd.print(setHumi, DEC);// 获取湿度数据开始StartMeasure();if (g_startMeasure){DataFetch();if (g_getDataSuccess){Mdata.Humidity = HumiCalc(Mdata.Humidity); //计算湿度值lcd.setCursor(0, 1);lcd.print("HUMI:");lcd.print(Mdata.Humidity, DEC);}}// 获取湿度数据结束if (setHumi >= Mdata.Humidity){}else{digitalWrite(relayPin, HIGH); // 否则 ,关闭加湿}#if 0if (Serial.available()){espSerial.write(Serial.read());}if (espSerial.available()){Serial.write(espSerial.read());}#endifif (espSerial.available()){int addOrDel = 0;addOrDel = (int)espSerial.read();}if (addOrDel == 0x01); // wifi接受数据0A{setHumi = setHumi + 1;}elseif(addOrDel == 0x02) // wifi 接受数据0D{setHumi = setHumi - 1;}
}