0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于XIAO ESP32S3的可以检测困倦的海绵宝宝

柴火创客空间 来源:柴火创客空间 2024-10-28 09:33 次阅读

今天为大家带来的是来自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 传感器的interwetten与威廉的赔率体系 输出,并通过一些数学运算将其转换为 CO2 ppm 水平。这是在特定的持续时间内完成的(在我的代码中为 5 分钟),并且 ppm 值是该持续时间的平均值。然后,微控制器打开丝杆电机,直到磁体位于霍尔传感器前面,该传感器对应于相同的 ppm(在容差范围内)。这样眼睑就会移动以匹配 ppm 水平。

4f95ff2c-9275-11ef-a511-92fbcf53809c.png

4fa1ffca-9275-11ef-a511-92fbcf53809c.png

电路设计

对于这个项目,决定设计一个 PCB 并组装起来是个很好的选择。尽管之前没有过这样的经验,但这正是一个探索新领域的机会。许多创作者在 Instructables 和 YouTube 上展示了他们自己的 PCB 制作过程,这为这个项目提供了很好的灵感和指导。

使用 EasyEDA 设计电路和 PCB 是一个不错的选择。虽然可能还有其他更优秀的工具,但 EasyEDA 因其易于学习和使用而受到许多 YouTuber 的青睐。通过这个平台,可以有效地设计出所需的电路图和印刷电路板,从而使整个项目更加顺利地进行。

4fc7575c-9275-11ef-a511-92fbcf53809c.png

设计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

    文章

    7545

    浏览量

    151325
  • 传感器
    +关注

    关注

    2550

    文章

    51042

    浏览量

    753105
  • 电机
    +关注

    关注

    142

    文章

    9002

    浏览量

    145345
  • esp32s3
    +关注

    关注

    0

    文章

    6

    浏览量

    494

原文标题:创客项目秀|基于XIAO ESP32S3 的可以检测困倦的海绵宝宝!

文章出处:【微信号:ChaiHuoMakerSpace,微信公众号:柴火创客空间】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于XIAO的图像分类处理项目

    XIAOXIAO今天小编给大家带来的是圣地亚哥的Maker Marcelo Rovai 使用 XIAO ESP32S3 Sensor 搭配Edge Impulse 实现的图像分类的项目。
    的头像 发表于 10-28 09:50 1367次阅读
    基于<b class='flag-5'>XIAO</b>的图像分类处理项目

    ESP32S3外置Jtag连接失败的原因?

    首先介绍一下情况: 芯片:ESP32S3 ESPIDF版本:V5.04 OpenOCD:ESPIDF自带的版本 JlinkV9:已经通过zadig-2.8切换成WinUSB 现状:已经烧毁efuse
    发表于 06-07 08:30

    使用esp-idf-tools2.12不能搭建esp32s3开发环境是什么原因?

    。 我选择V4.3.1版本后,系统不支持esp32s3的开发,可以支持esp32s2编译和调试。但我们使用的芯片是esp32s3,还请各位帮忙查看下什么原因。谢谢。
    发表于 06-27 08:20

    请问ESP32S3的PCLK的上限为多少?

    参考贵司的链接 https://docs.espressif.com/projects/esp ... .html#pclk ESP32 的 PCLK 上限为 8 MHz 。 ESP32S2 的 PCLK 上限为 32 MHz。
    发表于 06-28 11:55

    ESP32S3 通过USB烧录,烧录失败

    ESP32S3板通过usb插入电脑,电脑端COM设备能检测到串口,现象为反复连接、断开。现手动强制让ESP32S3进入烧录状态,按照官网说明,先按下boot键(GPIO0脚拉低),再按en
    发表于 09-30 10:28

    esp32s3 lcd接口有api可以调用了吗?

    我在esp32s3的datasheet看见写提供了一个lcd接口,请问这个接口现在有api可以调用了吗,我想驱动并口的lcd,esp32似乎使用的是i2s
    发表于 02-17 08:37

    esp32S3无法烧写的原因是什么?

    使用的是esp32S3,IDF v4.3,环境windows 10前面的构建都可以成功,但是一进入烧写就会报错:A fatal error occurred: This chip
    发表于 02-20 08:11

    是否有任何外部组件可以使ESP32S3与CAN-FD兼容?

    控制器与 ISO11898-1 FD 格式帧不兼容,并将此类帧解释为错误。我想知道是否有任何外部组件可以使 ESP32S3 与 CAN-FD 兼容。
    发表于 03-02 08:35

    ESP32S3内部外设包括DMA之类的可以直接用ESP32的配置来启用吗?

    ESP32S3的选项,DMA是auto选择吗?在SPI LCD的例程里面也没有S3的管脚配置,LVGL的例程里面,也是卡在DMA初始化的配置。新手问下,ESP32S3内部外设包括DMA之类的
    发表于 03-06 07:10

    使用esp-idf-tools2.12不能搭建esp32s3开发环境的原因?

    V4.3.1版本后,系统不支持esp32s3的开发,可以支持esp32s2编译和调试。但我们使用的芯片是esp32s3,还请各位帮忙查看下什么原因。谢谢。
    发表于 03-09 06:47

    使用Arduino通过USB串行对ESP32S3进行编程和调试

    电子发烧友网站提供《使用Arduino通过USB串行对ESP32S3进行编程和调试.zip》资料免费下载
    发表于 10-19 14:50 3次下载
    使用Arduino通过USB串行对<b class='flag-5'>ESP32S3</b>进行编程和调试

    基于ESP32S3系列模组的开发板

    基于ESP32S3系列模组的开发板
    的头像 发表于 04-10 11:25 3951次阅读
    基于<b class='flag-5'>ESP32S3</b>系列模组的开发板

    esp32s3使用多串口

    esp32s3使用多串口 我按照别人博客中设置串口2,串口打印有问题,因为没有看到esp32s3 多串口,就总结了一下自己的经验 下图为esp32的引脚图 下图为esp32s3的引脚图
    的头像 发表于 11-06 11:29 4812次阅读
    <b class='flag-5'>esp32s3</b>使用多串口

    UIFlow 2.0 新增支持 XIAO ESP32S3

    SupportSeeedStudioXIAOESP32S3UIFlow2.0现已支持SeeedStudioXIAOESP32S-S3开发板。这款基于ESP32-S3芯片的小型开发板以其低功耗、高性能
    的头像 发表于 05-25 08:29 763次阅读
    UIFlow 2.0 新增支持 <b class='flag-5'>XIAO</b> <b class='flag-5'>ESP32S3</b>

    基于XIAO ESP32S3 sense开发板的小型相机设计

    在这个科技飞速发展的时代,DIY(Do It Yourself)文化正成为连接创新与日常生活的桥梁,今天小编给大家带来了来自麻省理工学院的Arnov Sharma 的基于XIAO ESP32S3 sense的小型相机项目,该相机拥有一个圆形的触摸屏幕
    的头像 发表于 09-06 10:17 578次阅读
    基于<b class='flag-5'>XIAO</b> <b class='flag-5'>ESP32S3</b> sense开发板的小型相机设计