毕业设计 基于单片机的便携抽湿加湿器

201 篇文章 118 订阅
187 篇文章 114 订阅

0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 毕业设计 基于单片机的便携抽湿加湿器

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿 选题指导, 项目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md

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;
// wifi

SoftwareSerial 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:
    // I2C
    Wire.begin();
    // 液晶显示屏
    lcd.begin(16, 2);
    //
    Serial.begin(9600);
    espSerial.begin(115200);
    pinMode(relayPin, OUTPUT);
}

// 以下 获取湿度值部分开始

bool StartMeasure(void)

{
    // 通知传感器开始测量
    Wire.beginTransmission(0x44); // 传感器地址44hex末尾+0
    Wire.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 0



  if (Serial.available())

  {

    espSerial.write(Serial.read());
  }

  if (espSerial.available())

  {

    Serial.write(espSerial.read());
  }

#endif

    if (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;
    }
}

最后

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值