今天为大家带来的是来自Hackster创作者Mondal3011的作品:可以检测困倦的海绵宝宝.这个装置主要是使用二氧化碳传感器去进行二氧化碳浓度测试,通过识别二氧化碳来判断环境是否会造成人体困倦。通常,房间里的高 CO2 会导致嗜睡。当房间里的 CO2 水平上升时,这个海绵宝宝会变得困倦,这样你就可以打开窗户了!
材料清单
Seeed Studio XIAO ESP32S3 Sense
Mq135
跳线
丝杆电机
M4螺栓
软件
Arduino IDE
JLCPCB易达
故事背景
最近,你可能注意到自己在课堂上感到很困。也许你并不觉得课程无聊,而且晚上睡得很好,所以这不是原因。经过一些在线研究(主要是通过 Google 和 ChatGPT),你发现这种困倦可能是由于教室里积累了过多的二氧化碳。这让人觉得有道理,因为最近天气很冷,教室的门窗大部分时间都关着。
同样的问题也可能出现在你的宿舍。当你学习时,可能会感到昏昏欲睡,因为一直关着窗户,导致房间内二氧化碳浓度过高。于是,你想出了一个创意,制作一个看起来很酷且直观易懂的 CO2 监测器!这个监测器的设计灵感来源于海绵宝宝,眼睑会根据二氧化碳水平的变化而上下移动,显示他有多困。当 CO2 水平较低时,海绵宝宝的眼睛会睁得大大的,眼睑高高翘起;随着二氧化碳浓度的升高,眼睑会逐渐降低。如果眼睛完全闭上,意味着房间里的二氧化碳浓度过高,你最好让一些新鲜空气进来!
加工流程
该项目的主要组件是 MQ135 空气质量传感器和小 esp32 微控制器。该装置还包含 5 个霍尔效应传感器,每个传感器都映射到特定的 CO2 ppm 水平。电机通过 L293D 电机驱动器 IC 连接到微控制器。该电机是一种 DIY 丝杆电机,可根据旋转方向上下移动眼睑。眼睑的长端包含一个磁铁,霍尔传感器可以检测到该磁铁。微控制器读取 MQ135 传感器的vwin 输出,并通过一些数学运算将其转换为 CO2 ppm 水平。这是在特定的持续时间内完成的(在我的代码中为 5 分钟),并且 ppm 值是该持续时间的平均值。然后,微控制器打开丝杆电机,直到磁体位于霍尔传感器前面,该传感器对应于相同的 ppm(在容差范围内)。这样眼睑就会移动以匹配 ppm 水平。
对于这个项目,决定设计一个 PCB 并组装起来是个很好的选择。尽管之前没有过这样的经验,但这正是一个探索新领域的机会。许多创作者在 Instructables 和 YouTube 上展示了他们自己的 PCB 制作过程,这为这个项目提供了很好的灵感和指导。
使用 EasyEDA 设计电路和 PCB 是一个不错的选择。虽然可能还有其他更优秀的工具,但 EasyEDA 因其易于学习和使用而受到许多 YouTuber 的青睐。通过这个平台,可以有效地设计出所需的电路图和印刷电路板,从而使整个项目更加顺利地进行。
设计PCB
PCB 由 Seeed Fusion 制造,因此在设计之前,确保仔细阅读了他们的所有指南。
首先,用户在设计菜单中选择了“将原理图转换为 PCB”选项,立创EDA 随即生成了一个新的 PCB 文件,其中包含了原理图中的所有元器件。接下来,用户开始设计 PCB,并生成了 Gerber 文件。目前的设计以海绵宝宝为特色,虽然没有他的 SquarePants,但欢迎其他人添加裤子,完全没有规定禁止这样做!
在材料选择上,决定使用 Sunboard,这是一种低密度 PVC 板。Sunboard 非常易于使用,同时仍然具备较好的耐用性,十分适合这种手工艺项目。
制作海绵宝宝
这个项目中使用 Sunboard,一种低密度 PVC 板。它非常易于使用,同时仍然非常耐用,非常适合这种工艺。
组装
组装好 PCB 后,把它全部组装在一起。并将 CO2 传感器放在后面以将其隐藏起来。如果您也这样做,请确保框架不要放置在没有空气流通的房间角落。否则你的海绵宝宝可能总是昏昏欲睡!移动时眼睑确实会有点晃动,但这根本不是问题。由于它们仅在 CO2 水平存在显著差异时才会移动,因此您几乎不会看到它们移动。但是,它在移动时确实会发出一些噪音。主要是因为旧减速电机磨削。所以认为微型 N20 电机会是更好的选择。
代码
// 为霍尔传感器、电机驱动器和 MQ135 传感器定义引脚 const int hallSensors[] = {D1, D2, D3, D4, D5}; const int motorEnable = D8; const int motorInput1 = D6; const int motorInput2 = D7; const int mq135Pin = A0; MQ135 gasSensor = MQ135(mq135Pin); // 为每个霍尔传感器定义 CO2 ppm 范围 const int ppmRanges[][2] = { {800, 1000}, {1001, 1200}, {1201, 1400}, {1401, 1600}, {1601, 1800} }; //存储 CO2 ppm 读数 const int maxReadings = 30; // 5 minutes / 10 seconds float ppmReadings[maxReadings]; int readingIndex = 0; void setup() { Serial.begin(115200); // 将霍尔传感器初始化为输入端 for (int i = 0; i < 5; i++) { pinMode(hallSensors[i], INPUT); } // 将电机驱动器引脚初始化为输出端 pinMode(motorEnable, OUTPUT); pinMode(motorInput1, OUTPUT); pinMode(motorInput2, OUTPUT); // 初始化电机,使其停止 digitalWrite(motorEnable, LOW); } void loop() { // 从 MQ135 传感器读取二氧化碳ppm 含量 float ppm = gasSensor.getPPM(); // 存储 CO2 ppm 读数 ppmReadings[readingIndex] = ppm; readingIndex = readingIndex + 1; if(readingIndex >= 30) { //计算二氧化碳的平均ppm含量 int avgPPM = calculateAveragePPM(); // 根据 CO2 ppm 平均水平确定目标大厅传感器 int targetSensor = determineTargetSensor(avgPPM); // 将电机移至目标霍尔传感器处 moveMotorToTargetSensor(targetSensor); readingIndex = 0; } delay(10000); // 等待 10 秒 } // 根据存储的读数计算二氧化碳的平均ppm含量 int calculateAveragePPM() { int sum = 0; for (int i = 0; i < maxReadings; i++) { sum += ppmReadings[i]; } return sum / maxReadings; } // 根据 CO2 ppm 平均水平确定目标大厅传感器 int determineTargetSensor(int avgPPM) { for (int i = 0; i < 5; i++) { if (avgPPM >= ppmRanges[i][0] && avgPPM <= ppmRanges[i][1]) { return i; } } return 0; //如果 avgPPM 超出范围,则默认为第一个传感器 } // 将电机移至目标霍尔传感器处 void moveMotorToTargetSensor(int targetSensor) { int currentSensor = getCurrentSensor(); if (currentSensor != targetSensor) { int direction = (targetSensor > currentSensor) ? 1 : -1; while (currentSensor != targetSensor) { moveMotor(direction); currentSensor = getCurrentSensor(); } stopMotor(); } } // 获取当前霍尔传感器 int getCurrentSensor() { for (int i = 0; i < 5; i++) { if (digitalRead(hallSensors[i]) == LOW) { return i; } } return 0; // 如果没有传感器处于活动状态,则默认为第一个传感器 } // 按指定方向移动电机 void moveMotor(int direction) { digitalWrite(motorEnable, HIGH); if (direction == 1) { digitalWrite(motorInput1, HIGH); digitalWrite(motorInput2, LOW); } else { digitalWrite(motorInput1, LOW); digitalWrite(motorInput2, HIGH); } } // 停止电机 void stopMotor() { digitalWrite(motorEnable, LOW); }
-
微控制器
+关注
关注
48文章
7542浏览量
151309 -
传感器
+关注
关注
2550文章
51035浏览量
753051 -
电机
+关注
关注
142文章
9000浏览量
145335 -
esp32s3
+关注
关注
0文章
6浏览量
492
原文标题:创客项目秀|基于XIAO ESP32S3 的可以检测困倦的海绵宝宝!
文章出处:【微信号:ChaiHuoMakerSpace,微信公众号:柴火创客空间】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论