内容介绍
内容介绍
一、项目需求
基本任务:
- 能够读取温度、湿度,并能够在屏幕中显示
额外任务参考:(可完成全部额外任务,或者其中部分,也可以自行扩展,参与大奖评选)
- 添加UI界面
- 自制箱体并设计结构:
- 能够使箱内湿度降低到20%RH以下
- 能够加热箱内温度至少40度以上并温度可控
- 能够将湿润物体(如纸巾)烘干后,自动排出水汽并保持湿度在20%RH以下
二、项目设计思路:
- 温湿度控制:
- 目标温度设定:用户可以通过控制面板(OLED屏,按键,电位器)设定目标温湿度。
- 温湿度传感器:使用高精度的温湿度传感器(纳芯微电子NSHT30传感器)实时监测箱内温湿度。
- 加热元件:使用加热片(230摄氏度)作为加热元件,确保温度均匀分布。
- 除湿系统:采用加热除湿开孔,确保湿度达到设定值。
- 用户界面:
- 显示屏幕:使用OLED显示屏,显示当前温度、湿度、设定值和工作状态。
- 按键操作:提供简单的按键操作,方便用户设置和控制。
硬件电路搭建
- 主控芯片:
- 使用乐鑫ESP32负责整个系统的控制和数据处理。
- 温度控制电路:
- 温度传感器接口:连接NSHT30温度传感器的VCC、GND、SCL、SDA到乐鑫ESP32的引脚,读取温度数据。
- 加热元件驱动:使用继电器驱动加热元件,根据温度传感器反馈调整加热功率。
- 用户界面电路:
- 显示屏幕:连接LED显示屏到乐鑫ESP32,显示系统状态。
- 按键接口:连接按键到乐鑫ESP32的GPIO引脚,实现用户操作。
基于纳芯微电子NSHT30传感器的温湿度传感器模块特写与实物照片
三、软硬件框图
软件层级框图
软件逻辑框图
硬件电气连接图
硬件通信连接图
四、主控及传感器模块的原理图和PCB
纳芯微电子NSHT30温湿度传感器模块的原理图
ESP32主控的原理图
纳芯微电子NSHT30温湿度传感器模块的PCB
ESP32主控的PCB
五、关键代码
//显示UI界面
void get_Display() {
Humid();//显示箱内实时温湿度
// tft.setSwapBytes(true); //使图片颜色由RGB->BGR
showMyFonts(0, 5, "箱内温度", TFT_WHITE); //在(0,5)处显示“箱内温度”
showMyFonts(112, 5, "℃", TFT_WHITE); //在(112,5)处显示“箱内温度”
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(70, 0, 4); //设置起始坐标(70, 0),4号字体
tft.println(":");
showMyFonts(0, 25, "箱内湿度", TFT_WHITE); //在0,25)处显示“箱内湿度”
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(112, 25, 2); //设置起始坐标(70, 70),4号字体
tft.println("%");
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(70, 20, 4); //设置起始坐标(70, 20),4号字体
tft.println(":");
showMyFonts(0, 55, "设置温度", TFT_WHITE); //在(0,55)处显示“设置温度”
showMyFonts(112, 55, "℃", TFT_WHITE); //在(112,5)处显示“箱内温度”
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(70, 50, 4); //设置起始坐标(70, 50),4号字体
tft.println(":");
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(85, 55, 2); //设置起始坐标(70, 0),1号字体
tft.println(set_temp);
showMyFonts(0, 75, "设置湿度", TFT_WHITE); //在(0,75)处显示“设置湿度”
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(112, 75, 2); //设置起始坐标(70, 70),4号字体
tft.println("%");
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(70, 70, 4); //设置起始坐标(70, 70),4号字体
tft.println(":");
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(85, 75, 2); //设置起始坐标(70, 0),1号字体
tft.println(set_humi);
showMyFonts(0, 105, "工作状态", TFT_WHITE); //在(0,105)处显示“工作状态”
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(70, 100, 4); //设置起始坐标(70, 100),4号字体
tft.println(":");
}
//显示设置界面
void get_SetDisplay()
{
showMyFonts(0, 0, "选项设置", TFT_WHITE); //在(0,0)处显示“选项设置”
showMyFonts(20, 35, "温度", TFT_WHITE); //在(0,55)处显示“设置温度”
showMyFonts(85, 35, "℃", TFT_WHITE); //在(112,5)处显示“箱内温度”
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(50, 30, 4); //设置起始坐标(70, 50),4号字体
tft.println(":");
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(60, 35, 2); //设置起始坐标(70, 0),1号字体
tft.println(set_temp);
showMyFonts(20, 75, "湿度", TFT_WHITE); //在(0,75)处显示“设置湿度”
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(85, 75, 2); //设置起始坐标(70, 70),4号字体
tft.println("%");
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(50, 70, 4); //设置起始坐标(70, 70),4号字体
tft.println(":");
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(60, 75, 2); //设置起始坐标(70, 0),1号字体
tft.println(set_humi);
showMyFonts(20, 115, "退出", TFT_WHITE); //在(20, 115)处显示“工作状态”
if(i==2){
//显示标号1
tft.fillTriangle(0, 32, 0, 52, 15, 42, TFT_MAGENTA);//选择标号1
tft.fillTriangle(0, 72, 0, 92, 15, 82, TFT_BLACK);//选择标号2
tft.fillTriangle(0, 112, 0, 132, 15, 122, TFT_BLACK);//选择标号3
set_temp= map(analogRead(potPin), 0, 4095, 30, 70);
}
else if(i==3){
//显示标号2
tft.fillTriangle(0, 32, 0, 52, 15, 42, TFT_BLACK);//选择标号1
tft.fillTriangle(0, 72, 0, 92, 15, 82, TFT_MAGENTA);//选择标号2
tft.fillTriangle(0, 112, 0, 132, 15, 122, TFT_BLACK);//选择标号3
set_humi= map(analogRead(potPin), 0, 4095, 10, 80);
}
else if(i>=4){
//显示标号3
tft.fillTriangle(0, 32, 0, 52, 15, 42, TFT_BLACK);//选择标号1
tft.fillTriangle(0, 72, 0, 92, 15, 82, TFT_BLACK);//选择标号2
tft.fillTriangle(0, 112, 0, 132, 15, 122, TFT_MAGENTA);//选择标号3
}
}
//显示箱内实时温湿度
void Humid()
{
if (sht3x.measure()) {
Serial.print("Temperature: ");
Serial.print(sht3x.temperature(), 1);
Serial.print(" *C\tHumidity: ");
Serial.print(sht3x.humidity(), 1);
Serial.print(" %RH");
Serial.println();
} else {
Serial.println("SHT3x read error");
}
delay(2000);
temp=sht3x.temperature();
humi=sht3x.humidity();
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(85, 5, 2); //设置起始坐标(70, 0),1号字体
tft.println(temp);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(85, 25, 2); //设置起始坐标(70, 0),1号字体
tft.println(humi);
}
//中断
void ISR() {
flag = true;
}
// 显示ui加状态
void get_DisplayStatus() {
if (i==0)
{
if(k==1)
{
tft.fillScreen(TFT_BLACK); // 清屏
k=2;
}
get_Display();
showMyFonts(80, 105, "待机中", TFT_WHITE); //在(80,105)处显示“工作状态”
//关闭风扇
digitalWrite(relayPin2, LOW); // 继电器高电平关闭
Serial.println("风扇关闭");
// 关闭发热片
digitalWrite(relayPin1, LOW); // 继电器低电平关闭
Serial.println("发热片关闭");
}
else
{
if (humi>set_humi)
{
if(k==2)
{
tft.fillScreen(TFT_BLACK); // 清屏
k=3;
}
get_Display();
showMyFonts(80, 105, "工作中", TFT_WHITE); //在(80,105)处显示“工作状态”
//开启风扇
digitalWrite(relayPin2, HIGH); // 继电器触发
Serial.println("风扇开启");
}
if(temp<=set_temp)
{
// 开启发热片
digitalWrite(relayPin1, HIGH); // 继电器触发
Serial.println("发热片开启");
//开启风扇
digitalWrite(relayPin2, HIGH); // 继电器触发
Serial.println("风扇开启");
}
else{
// 关闭发热片
digitalWrite(relayPin1, LOW); // 继电器低电平关闭
Serial.println("发热片关闭");
}
if (humi<=set_humi) {
if(k==3)
{
tft.fillScreen(TFT_BLACK); // 清屏
k=1;
}
get_Display();
//关闭风扇
digitalWrite(relayPin2, LOW); // 继电器高电平关闭
Serial.println("风扇关闭");
// 关闭发热片
digitalWrite(relayPin1, LOW); // 继电器高电平关闭
Serial.println("发热片关闭");
showMyFonts(80, 105, "完成", TFT_WHITE); //在(80,105)处显示“工作状态”
showMyFonts(80, 125, "烘干", TFT_WHITE); //在(80,125)处显示“工作状态”
//返回待机状态进行下一次工作
if (flag) {
unsigned long start = micros();
unsigned long delayTime = 500000; // 0.5 秒
while (micros() - start < delayTime) {
// 按键消抖
}
i=0,set_temp=40,set_humi=20;
flag = false;
}
}
}
}
六、箱体结构展示
七、心得感悟
(一)技术方面
1.硬件与软件的协同
1.在这个项目中,深刻体会到了硬件和软件协同工作的重要性。硬件是软件的基础,软件是硬件功能的体现。只有硬件设计合理,软件才能充分发挥其作用;反之,软件的优化也能够弥补硬件的一些不足。例如,在解决传感器数据不准确的问题时,不仅需要对硬件电路进行改进,还需要调整软件中的采集和处理程序。
2.新技术的学习与应用
1.ESP32作为一款新兴的微控制器,具有很多先进的功能。在项目过程中,不断学习和掌握ESP32的相关知识,如Wi - Fi和蓝牙功能的使用、不同通信协议的实现等。
(二)项目管理方面
1.规划与执行
1.在项目开始之前,制定详细的项目计划是非常必要的。明确项目的各个阶段、任务和时间节点,有助于合理安排资源和控制项目进度。然而,在项目执行过程中,也需要根据实际情况对计划进行调整。例如,在遇到硬件调试问题时,可能会导致软件开发的延迟,此时就需要重新评估项目进度,调整任务的优先级。
2.团队合作
1.团队成员之间的沟通和协作是项目成功的关键。不同成员可能负责不同的模块,如硬件设计、软件开发、测试等,只有保持良好的沟通,才能确保各个模块之间的接口兼容,避免出现互相推诿责任的情况。在本项目中,通过定期的团队会议和即时通讯工具,及时解决了项目中出现的各种问题。
总的来说,基于ESP32的干燥箱项目是一次非常有意义的实践经历。通过这个项目,不仅提高了自己在硬件设计、软件开发和项目管理方面的能力,也对物联网技术在实际产品中的应用有了更深入的了解。在未来的项目中,将继续积累经验,不断提升自己的综合素质。
软硬件
KiCad文件
使用说明
全屏
附件下载
代码.zip
团队介绍
一名电子小白
评论
0 / 100
查看更多
猜你喜欢
基于纳芯微NSHT30芯片的干燥箱外循环系统该项目使用了NSHT30、NSPAS3、带屏版的12指神探,实现了干燥箱外循环控制的设计,它的主要功能为:可以对箱体内部进行干燥,加热等功能。
无言的朝圣
49
基于纳芯微NSHT30传感器设计的温湿度计该项目使用了KiCad软件、MicroPython语言,实现了便捷温湿度计的设计,它的主要功能为:基于十二指神探开发板,使用KiCad绘制NSHT30传感器原理图以及PCB,实现了一个环境温湿度传感器设计。
a_ha
25
基于纳芯微NSHT30温湿度芯片设计的干燥箱平台该项目使用了NSHT30,实现了干燥箱控制台的设计,它的主要功能为:升高室内温度和物体相对湿度。
xhb
61