当前位置: 首页 > article >正文

基于CCS811与CircuitPython的可穿戴呼吸监测面具制作全解析

1. 项目概述与核心价值几年前当我第一次接触到可穿戴健康设备时就被其潜力深深吸引。但市面上的产品要么是封闭的“黑盒”数据不透明要么价格高昂难以进行个性化定制。我一直想能不能自己动手做一个既开源透明、又能直观反映身体状态的小玩意儿直到我遇到了Adafruit的CCS811气体传感器和Circuit Playground Express开发板这个想法才真正落地——一个能实时监测并可视化你呼吸状态的可穿戴面具。这个LED呼吸状态面具的核心是让看不见的生理数据变得“可见”。它通过一个高精度的气体传感器持续采集你呼出气体中的二氧化碳浓度和总挥发性有机化合物浓度同时监测环境温度。然后利用CircuitPython编程将这些抽象的数字信号实时映射到三组共24颗NeoPixel RGBW LED灯上形成动态的光效反馈。比如当你平静呼吸时LED灯带会缓慢、规律地亮起和熄灭而在运动后或代谢状态变化时灯光的颜色、亮起的数量或闪烁频率都会随之改变。这不仅仅是一个炫酷的电子制作项目。从健康监测的角度看呼吸中的CO2水平与呼吸效率相关而TVOC中的丙酮等成分在特定饮食模式下如生酮饮食会显著升高可作为代谢状态的一个间接参考指标。因此这个面具可以作为一个有趣的个人健康探索工具用于观察日常活动、睡眠或饮食改变对呼吸代谢产物的潜在影响。当然它绝不能替代专业的医疗诊断设备其价值更多在于教育、自我量化以及创客实践。整个项目融合了硬件焊接、嵌入式编程和可穿戴设计非常适合对物联网、健康科技或互动艺术感兴趣的开发者、学生和DIY爱好者。无论你是想学习如何用CircuitPython驱动传感器还是想制作一个独特的可穿戴交互装置这个项目都能提供一条清晰的实践路径。接下来我将从设计思路、硬件组装、代码解析到穿戴调试毫无保留地分享整个制作过程中的所有细节、踩过的坑和总结出的实用技巧。2. 硬件选型、设计与核心原理2.1 核心元器件深度解析一个项目的成功始于对每个元件特性的深刻理解。这个面具的“大脑”和“感官”由几个关键部件构成选型背后都有其特定的考量。主控单元Adafruit Circuit Playground Express我选择它而非更常见的Arduino Uno或ESP32主要基于三点。第一是高度集成与易用性。这块板子堪称“瑞士军刀”板载了10颗可编程RGB NeoPixel LED、运动传感器、温度传感器、光线传感器、麦克风甚至还有触摸感应引脚。对于可穿戴项目这意味着外围电路极大简化我们无需再为基本的灯光或感应功能额外焊接元件。第二是对CircuitPython的原生支持。它出厂就预装了CircuitPython连接到电脑后直接显示为一个U盘用任何文本编辑器修改code.py文件就能运行程序这种开发体验对初学者和快速原型制作极其友好。第三是供电与接口灵活性。它可以通过USB供电也支持3.7V锂电池接口非常适合需要移动使用的可穿戴设备。其上的多个模拟/数字引脚和专用的I2C引脚为连接外部传感器提供了便利。气体传感核心Adafruit CCS811这是项目的“嗅觉”器官。CCS811是一个金属氧化物半导体气体传感器能检测空气中的二氧化碳和挥发性有机化合物。其工作原理是传感器内部的敏感材料在接触到特定气体时电阻会发生变化芯片将这个变化转化为数字信号通过I2C接口输出。选择它的理由很充分数字输出与内置算法。它直接输出经过校准和温度补偿的eCO2等效二氧化碳和TVOC总挥发性有机化合物读数单位是ppm百万分之一和ppb十亿分之一。这省去了我们处理模拟信号、进行复杂校准和补偿的麻烦。其I2C接口也使得与Circuit Playground Express的连接只需要两根数据线SCL, SDA非常简洁。可视化组件NeoPixel RGBW LED灯条我特意选用了RGBW红绿蓝白四色灯珠的版本而非普通的RGB。这是因为在显示白色或某些混合色时RGBW灯珠通过独立的白色LED能提供更纯净、亮度更高的白光且功耗相对更低。对于需要清晰、明亮地指示不同数据级别的应用来说这点很重要。两个8位灯条加上板载的10颗LED为我们提供了充足的可视化“画布”。每个NeoPixel都可以独立控制颜色和亮度通过CircuitPython的neopixel库我们可以轻松实现诸如“用灯光高度表示数值大小”、“用颜色渐变表示状态变化”等复杂效果。其他关键材料四分之一的Perma-Proto原型板用于固定和连接CCS811传感器与NeoPixel灯条。选择带焊盘的原型板可以让我们像焊接普通电路板一样进行可靠连接比面包板更稳固适合可穿戴设备。口罩基底需要一个有一定厚度和支撑性、且透气性不是太好的口罩。我试过几种最终发现带有活性炭滤芯的日常防护口罩比较合适其内部空间足以容纳电路板外层布料也便于缝合固定。切勿使用医用外科口罩或N95口罩进行改装这会破坏其防护结构且内部空间通常不足。导线与缝纫线使用细径的硅胶导线如AWG 28-30进行电气连接它们柔软、耐弯折。使用结实的尼龙缝纫线来将组件物理固定到口罩上而不是用胶水这样更牢固且可逆。2.2 系统架构与数据流设计在动焊枪之前必须在脑子里把整个系统的信号和电力流向理清楚。这个项目的架构可以概括为“一核、一感、三显”。“一核”即Circuit Playground Express它是整个系统的控制与数据处理中心。它通过USB或电池获取电力并通过其I2C引脚SCL和SDA与CCS811传感器通信周期性地读取传感器数据。“一感”即CCS811传感器。它需要从主控板获取3.3V供电和接地并将采集并处理好的数字数据通过I2C总线发回给主控板。“三显”即三组NeoPixel LED板载LED用于显示温度数据。直接使用板载的LED无需额外接线。外部灯条A连接至主控板的A1引脚用于显示TVOC数据。外部灯条B连接至主控板的A2引脚用于显示CO2数据。电力分配是整个设计的另一个关键。所有NeoPixel灯条和CCS811传感器都从Circuit Playground Express的3.3V输出引脚取电。这里有一个至关重要的细节虽然NeoPixel的工作电压通常是5V但Circuit Playground Express的3.3V输出引脚在驱动少量LED如本项目中的16颗时通常也能正常工作尤其是当我们将LED亮度设置得较低时代码中brightness.1。这简化了供电设计。但如果发现灯光闪烁或不稳定就需要考虑为灯条单独提供5V电源例如从板子的VOUT引脚如果接USB则为5V取电但这需要额外的电平转换或确保信号引脚兼容。数据流的逻辑是主循环中主控板读取传感器数据 - 根据预设的数值范围如CO2: 400-8192 ppm将数据线性映射到0-8的LED索引上 - 依次点亮相应数量的LED - 短暂延时后熄灭所有LED营造“呼吸”感 - 进入下一个循环。这种“映射-显示-清空”的循环构成了动态可视化的基础。3. 硬件组装与焊接实操详解3.1 原型板裁剪与元件布局规划拿到四分之一的Perma-Proto板后第一步不是直接焊接而是规划。我们的目标是将CCS811和两个NeoPixel灯条的接口都集中在这块小板上再通过排线连接到主控板。这样口罩内部只需要固定这块集成小板和主控板布线会整洁很多。裁剪技巧原文提到用“啃咬钳”来修剪PCB板。如果没有这种专业工具可以用一把结实的老虎钳配合一把小锉刀。先用笔在需要切割的地方画线然后用老虎钳沿着画线处一点点、分段地掰断PCB。这个过程要慢用力要均匀避免PCB碎裂飞溅。掰断后边缘会非常粗糙锋利这时就需要用小锉刀仔细地将边缘打磨光滑。务必戴上护目镜防止玻璃纤维碎屑进入眼睛。布局规划将CCS811传感器放在小板中央。因为传感器需要暴露在空气中所以计划最终将它置于口罩上开好的一个小窗处。两个NeoPixel灯条的接口VCC, GND, DIN则分别规划在小板的两侧。关键点仔细查看CCS811和NeoPixel的引脚定义。CCS811通常有6-8个引脚但我们只用到4个Vin3.3V, GND, SCL, SDA。NeoPixel灯条以WS2812B RGBW为例通常有4个引脚5V或V DI数据输入 GND 以及一个额外的白色LED阳极对于RGBW。在我们的电路中我们将其5V引脚连接到3.3V DI连接数据引脚 GND接地白色引脚如果有可以悬空或不接因为我们代码中使用的是RGB模式bpp4表示使用RGBA或RGBW格式但代码中只填充了前三个或四个值中的三个实际上当bpp4时第四个值是白色分量我们将其设为0。在Perma-Proto板上用记号笔简单勾勒一下各个焊盘未来的连接关系形成一个“接线图”草稿这能极大减少后续焊接的错误。3.2 精细焊接与可靠连接焊接是硬件项目中最需要耐心和技巧的环节尤其是处理这种小型、密集的焊盘。焊接CCS811与排针首先将CCS811传感器和几组排针母头焊接到Perma-Proto板上。建议先焊接排针。将排针插入小板把小板放在一个帮助固定的底座如面包板上从背面焊接。对于CCS811由于其引脚可能很短一个非常实用的技巧是使用“飞线”。即先不把CCS811直接焊在板上而是用四根细导线分别焊接在它的Vin, GND, SCL, SDA引脚上导线的另一端再焊接到小板的对应焊盘上。这样做的优点是CCS811可以灵活地调整位置和朝向便于最后安装在口罩的开口处。焊接NeoPixel灯条接口对于NeoPixel灯条同样建议使用飞线。将灯条自带的导线剪短至约2英寸5厘米剥线后先上好锡。然后在小板上规划好三个连接点VCC电源、GND地、DIN数据输入。将两根灯条的VCC并联焊接到一个小板的VCC焊盘两根GND并联焊接到GND焊盘。而它们的数据线DIN则需要分开灯条A的DIN焊接到一个焊盘将来连接主控板A1灯条B的DIN焊接到另一个焊盘将来连接主控板A2。注意如果灯条是串联需求一个灯条的数据输出DOUT接下一个的DIN则需要按顺序连接。但本项目是并联控制两个灯条独立。制作连接主控板的线束接下来需要制作从小板到Circuit Playground Express的连接线。我们需要6根导线3.3V, GND, SCL, SDA, A1, A2。使用不同颜色的导线以便区分例如红色-3.3V黑色-GND黄色-SCL绿色-SDA蓝色-A1白色-A2。每根导线一端焊接到小板的对应焊盘另一端焊接上杜邦公头以便插接到主控板的插针上。焊接公头时先给导线和公头金属部分分别上锡然后用镊子夹住快速点焊避免塑料部分熔化。最终集成检查焊接完成后先不要安装到口罩上。用万用表的通断档仔细检查所有连接电源与地之间是否短路应显示断开每个信号线SCL, SDA, A1, A2是否与电源或地短路应显示断开每个连接点是否导通应显示接近0欧姆 这是避免通电后“放烟花”的最重要一步。3.3 口罩改装与组件固定硬件电路测试无误后就可以开始改造口罩了。开口定位在口罩上确定几个开口位置。传感器窗口在口罩正面对应于佩戴者口鼻前方偏下的位置开一个比CCS811传感器略小的方形或圆形孔。可以用小剪刀或美工刀小心切割。目的是让呼出的气体能直接流经传感器但又不能让传感器完全暴露在外以免物理损坏。LED灯条窗口在口罩两侧各开一个细长的缝隙用于让NeoPixel灯条的光透出来。位置可以根据美观和个人喜好调整。主控板位置在口罩内侧贴近脸颊的一侧选择一个平坦、不会明显硌脸的区域作为Circuit Playground Express的放置点。在旁边开一个小孔用于将连接小板的线束穿入内侧。USB接口开口如果打算在佩戴时充电或数据传输需要在口罩边缘对应主控板USB口的位置开一个缺口。固定方法强烈推荐使用缝纫而非胶粘。胶水可能腐蚀布料或电路板且不便于后期维修。对于Perma-Proto小板可以利用板上多余的焊盘孔或固定孔用结实的尼龙线穿过口罩布料和小板孔洞反复缝合打结固定。对于Circuit Playground Express可以利用其四周的螺丝孔同样用尼龙线穿过并固定在口罩上。对于NeoPixel灯条可以将其塞入事先切好的布料夹层中或者用细线在灯条两端轻轻绑缚固定。CCS811传感器可以用一小块双面泡棉胶非导电固定在它对应的窗口内侧确保其感应面朝向口腔方向。固定时务必确保所有电子元件与佩戴者的皮肤之间有布料隔开避免短路或不适。同时整理好内部的导线用线或小扎带捆扎避免杂乱和拉扯。4. CircuitPython代码深度解析与定制4.1 开发环境搭建与代码部署CircuitPython的开发体验极其简单。用USB线将Circuit Playground Express连接到电脑后电脑上会出现一个名为CIRCUITPY的U盘。这就是开发板的存储空间。第一步检查与更新固件。首次使用时建议访问 CircuitPython官网 下载最新的.uf2固件文件。按住板子上的“Reset”按钮直到所有LED变红后松开电脑上会出现一个名为CPLAYBOOT的驱动器。将下载的.uf2文件拖入该驱动器完成后它会自动重启并再次变为CIRCUITPY驱动器。第二步安装必要的库。CircuitPython的核心是Python但驱动特定硬件需要额外的库文件。我们需要两个库adafruit_CCS811用于驱动CCS811传感器。neopixel通常已内置但确保其存在。 访问 Adafruit CircuitPython库合集 下载最新的库包。解压后找到adafruit_CCS811.mpy文件和可能需要的adafruit_bus_deviceI2C支持等依赖库将它们复制到CIRCUITPY驱动器根目录下的lib文件夹中如果没有就新建一个。第三步编写主程序。用任何文本编辑器如VS Code, Sublime Text, 甚至记事本打开CIRCUITPY驱动器根目录下的code.py文件。将提供的代码完全替换进去。保存文件CtrlS的瞬间代码就会自动开始运行。你会看到板载LED和外部灯条开始有规律地闪烁。4.2 核心代码逻辑逐行解读让我们深入剖析代码理解其如何工作以及如何根据需求进行修改。import time import adafruit_CCS811 import board import busio import neopixel导入必要的模块time用于延时adafruit_CCS811是传感器驱动board提供了对板子特定引脚如board.SCL,board.A1的访问busio用于硬件通信协议这里是I2Cneopixel用于控制LED。i2c_bus busio.I2C(board.SCL, board.SDA) ccs adafruit_CCS811.CCS811(i2c_bus)初始化I2C总线和传感器创建I2C对象指定时钟线SCL和数据线SDA的引脚。然后用这个I2C总线对象初始化CCS811传感器实例ccs。之后我们就可以通过ccs来读取数据了。num_leds 8 temperature_pix neopixel.NeoPixel(board.NEOPIXEL, num_leds, brightness.1) tvoc_pix neopixel.NeoPixel(board.A1, num_leds, bpp4, brightness.1) co2_pix neopixel.NeoPixel(board.A2, num_leds, bpp4, brightness.1) led_draw .05初始化NeoPixel对象num_leds 8定义每组LED的数量。板载LED有10颗但我们只使用8颗来统一显示逻辑。temperature_pix控制板载LED引脚是固定的board.NEOPIXEL亮度设为10%brightness.1这对省电和防止过亮很重要。tvoc_pix和co2_pix分别控制连接到A1和A2引脚的外部灯条。注意参数bpp4这表示我们使用4字节每像素的模式RGBW。即使灯条是RGBW如果我们只设置RGB值第四个字节白色会自动为0。亮度同样设为10%。led_draw .05定义每个LED点亮或熄灭时的动画延时秒用于创造流畅的视觉效果。while not ccs.data_ready: pass temp ccs.temperature ccs.temp_offset temp - 25.0传感器初始校准这是一个关键步骤。CCS811需要一点时间启动并准备好数据。while循环会一直等待直到ccs.data_ready为True。然后它读取传感器内部的温度读数这是用于补偿气体读数的环境温度并非我们最终显示的温度并计算一个偏移量。ccs.temp_offset temp - 25.0这一行的目的是将传感器内部用于补偿的参考温度调整到25°C左右这是传感器算法的一个常见校准点有助于提高气体读数的准确性。接下来是三个核心的显示函数逻辑相似以co2_led_meter()为例def co2_led_meter(): # Show Carbon Dioxide on a NeoPixel Strip co2_floor 400 co2_ceiling 8192 # Map CO2 range to 8 LED NeoPixel Stick co2_range co2_ceiling - co2_floor co2_led_steps co2_range / num_leds co2_leds int((ccs.eCO2 - co2_floor) / co2_led_steps) # Insert Colors for i in range(0, (co2_leds - 1)): co2_pix[i] (255, 0, 255, 0) # Magenta color time.sleep(led_draw)定义量程co2_floor和co2_ceiling设定了CO2读数的显示范围400-8192 ppm。大气背景CO2约400ppm室内浓度可能上升到1000-2000ppm8192是传感器的一个上限。你可以根据实际环境调整这两个值以改变显示的灵敏度。计算映射co2_range是总量程。co2_led_steps是每个LED代表的数值跨度如(8192-400)/8 974ppm/LED。co2_leds是当前读数ccs.eCO2应该点亮的LED数量。公式(当前值 - 下限) / 每LED步长将物理值映射到0-8的整数。点亮LED用一个for循环从第0颗LED开始点亮到第co2_leds-1颗。co2_pix[i] (255, 0, 255, 0)设置颜色为品红色R255, G0, B255, W0。time.sleep(led_draw)在点亮每颗LED后稍作延时创造出逐颗点亮的效果而不是瞬间全亮。tvoc_led_meter()和temp_led_meter()函数结构完全相同只是量程、颜色和对应的传感器读数ccs.TVOC,ccs.temperature不同。注意温度函数使用的是板载LED颜色是黄色(255, 255, 0)。def clear_pix(delay): # clear all LEDs for breathing effect for i in range(0, num_leds): temperature_pix[i] (0, 0, 0) co2_pix[i] (0, 0, 0, 0) tvoc_pix[i] (0, 0, 0, 0) time.sleep(delay)clear_pix函数将所有LED的颜色设置为(0,0,0)或(0,0,0,0)来熄灭它们然后等待一个延时。这个延时参数在循环中被设置为led_draw用于控制“熄灭”动画的速度。while True: # print to console print(CO2: , ccs.eCO2, TVOC:, ccs.TVOC, temp:, ccs.temperature) co2_led_meter() tvoc_led_meter() temp_led_meter() time.sleep(.5) clear_pix(led_draw)主循环这是一个永不停止的循环。首先通过print语句将三个传感器的读数输出到串行终端。这是非常重要的调试和观察数据的手段。依次调用三个函数根据当前读数更新三组LED的显示。time.sleep(.5)让当前显示状态保持0.5秒。调用clear_pix(led_draw)熄灭所有LED产生一个“呼气”或“重置”的视觉效果。循环继续读取新的传感器数据并更新显示从而形成动态的、随呼吸数据变化的灯光“呼吸”效果。4.3 代码定制与优化建议提供的代码是一个完美的起点但你可以根据自己的需求进行大量定制1. 调整显示范围和灵敏度 如果你发现CO2读数很少超过2000ppm导致灯光几乎只亮一两颗可以将co2_ceiling降低到3000或2000。同理TVOC的默认上限是1187 ppb如果你在非常洁净的环境可以调低tvoc_ceiling以获得更精细的显示。温度范围temp_floor和temp_ceiling也可以根据你所在地区的常温范围调整。2. 改变颜色和显示模式颜色只需修改co2_pix[i] (R, G, B, W)中的RGBW值。每个值范围是0-255。例如绿色是(0, 255, 0, 0)蓝色是(0, 0, 255, 0)。显示模式目前的模式是“高度计”点亮数量代表数值。你可以改为“颜色渐变”例如根据数值大小计算一个颜色比例让所有LED显示同一种但深浅不同的颜色。# 示例CO2值越高颜色从绿(0,255,0)渐变到红(255,0,0) co2_ratio (ccs.eCO2 - co2_floor) / co2_range red int(255 * co2_ratio) green int(255 * (1 - co2_ratio)) for i in range(num_leds): co2_pix[i] (red, green, 0, 0)3. 添加阈值报警 你可以增加逻辑当某个数值超过安全或关注阈值时让所有LED闪烁或变成特定颜色如红色。if ccs.eCO2 1500: # 例如CO2超过1500ppm时报警 for _ in range(5): # 闪烁5次 for i in range(num_leds): co2_pix[i] (255, 0, 0, 0) # 全部变红 time.sleep(0.2) clear_pix(0) time.sleep(0.2)4. 优化性能与功耗降低刷新率主循环中的time.sleep(.5)和clear_pix中的延时共同决定了刷新频率。如果不需要那么快的更新可以增加这些延时比如time.sleep(2)这能显著降低功耗。降低亮度代码中已经设置了brightness.110%亮度。在室内环境下这通常足够亮。如果是在黑暗环境中想更省电可以尝试.05或更低。使用time.monotonic()进行非阻塞延时当前代码使用time.sleep()会阻塞整个程序。对于更复杂的交互比如同时检测按钮可以使用基于时间的状态机。5. 穿戴、调试与传感器养护全指南5.1 首次上电与“烧机”流程硬件组装完成并上传代码后第一次通电需要特别耐心。CCS811传感器有一个关键的“烧机”要求。连接与观察用USB线将面具连接到电脑或充电宝上供电。你会看到所有LED按程序开始循环显示。同时打开串行监视器来观察数据。至关重要的48小时烧机Adafruit的CCS811文档和代码注释中都强调新传感器或长时间未使用的传感器需要在新鲜空气环境中连续通电48小时进行“烧机”。这个过程是为了让传感器内部的材料稳定下来使其读数在未来更加准确可靠。在这48小时内你可以正常佩戴面具或者就把它放在室内通风处。烧机期间读数可能会有较大波动这是正常的。每次使用前的预热即使完成了48小时烧机每次使用前传感器仍需要约20分钟的预热时间才能达到最佳精度。在这段时间里读数会逐渐趋于稳定。因此如果你的面具是间断使用的建议在需要监测前提前通电一会儿。重要提示传感器读数尤其是TVOC受环境影响因素巨大。香水、清洁剂、酒精、甚至呼出的食物气味都会导致读数飙升。因此数据的绝对值意义有限更重要的是观察其相对变化趋势和模式。5.2 串行数据监控与解读通过串行监视器查看原始数据是调试和理解传感器行为的最佳方式。在电脑上连接串行终端Windows可以使用PuTTY、Arduino IDE的串口监视器或免费的CoolTerm。在设备管理器中找到对应的COM端口如COM3。macOS/Linux正如原文所述使用screen命令非常方便。首先在终端输入ls /dev/tty.usbmodem*或ls /dev/ttyACM*来查找设备。通常会显示类似/dev/tty.usbmodem1421的名称。然后使用命令screen /dev/tty.usbmodem1421 115200连接。按Ctrl-A然后Ctrl-\再按y可以退出screen。通用方法许多现代代码编辑器如VS Code with PlatformIO插件或专用的串口工具如Serial Studio都提供更友好的图形化数据监视和绘图功能。解读数据流 连接成功后你会看到每秒两行类似这样的输出CO2: 856 TVOC: 125 temp: 27.3 CO2: 845 TVOC: 118 temp: 27.4eCO2等效二氧化碳单位ppm。室内空气质量标准通常建议低于1000ppm。你可以通过屏住呼吸几十秒然后呼气观察这个数值的瞬时上升来测试传感器响应。TVOC总挥发性有机化合物单位ppb。这是一个更复杂的混合物指标。在洁净的室外空气中可能低于50 ppb在通风良好的室内可能在200-500 ppb在新装修或使用化学品的房间可能超过1000 ppb。temp传感器内部温度单位摄氏度。注意这个温度是传感器芯片的温度会受到主板发热的影响不能精确代表环境或体温仅作为传感器算法的补偿参考。常见数据问题排查读数始终为0或800无效值检查I2C连接SCL, SDA是否松动或接反。检查代码中I2C初始化是否正确。确认adafruit_CCS811库文件已正确放入lib文件夹。读数异常高且不变可能是传感器仍在预热或烧机过程中。确保传感器暴露在流动的空气中而不是被密封。检查供电电压是否稳定3.3V。TVOC读数对气味极其敏感这是正常的。可以尝试喷一点酒精在远处观察TVOC值的剧烈变化这反过来证明了传感器在工作。5.3 佩戴体验优化与长期维护佩戴舒适度重量分布Circuit Playground Express是相对最重的部件。尽量将其固定在脸颊侧面或下颌角下方而不是正中间以减少对鼻梁的压力。可以将电池如果使用分散放置。导线管理确保所有导线都被妥善缝合或固定在口罩内层避免它们晃动或摩擦皮肤。可以用柔软的布胶带将线缆粘在口罩内壁。透气性由于增加了电子元件口罩的透气性会变差。切勿在剧烈运动或需要大量通气的场景下长时间佩戴以免造成不适或危险。这个项目更适合静态或轻度活动下的短期监测展示。供电方案USB供电最稳定适合调试和室内使用。可以使用小巧的移动电源。锂电池供电为了真正的“无线”可穿戴可以使用一块3.7V的锂聚合物电池连接到Circuit Playground Express的BAT输入引脚。板载的充电管理芯片可以通过USB为电池充电。选择电池时容量如500mAh和体积需要权衡。一个500mAh的电池在LED低亮度模式下可以支持数小时运行。维护与收纳清洁切勿用水或清洁剂直接擦拭或浸泡电子部分。可以用棉签蘸取少量酒精轻轻清洁传感器表面的金属网罩清除灰尘。口罩布料部分可以按照普通织物的清洁方式处理但务必事先拆除所有电子部件。存放长期不使用时请将电池断开。将整个装置存放在防静电袋或干燥的盒子里避免潮湿和灰尘。故障排查如果某天设备不工作了按以下顺序检查1. 供电USB线、电池电量2. 连接所有杜邦头是否松动3. 程序尝试重新保存code.py文件触发重启4. 硬件用万用表检查关键电压和通断。这个项目从构思到实现充满了硬件交互的乐趣和代码调试的挑战。它不仅仅是一个面具更是一个完整的、可触摸的物联网终端原型。通过它你将直观地理解传感器数据采集、微控制器编程、电源管理和可穿戴设计等多个领域的知识。最重要的是它让你以一种非常具象的方式与自己身体的无声代谢过程进行了一次有趣的对话。希望你在制作和佩戴它的过程中不仅能收获一个炫酷的作品更能点燃对物理计算和健康科技更深的探索热情。如果在制作中遇到任何问题回顾一下焊接检查、代码映射逻辑和传感器养护这几个关键部分大多数难题都能迎刃而解。

相关文章:

基于CCS811与CircuitPython的可穿戴呼吸监测面具制作全解析

1. 项目概述与核心价值 几年前,当我第一次接触到可穿戴健康设备时,就被其潜力深深吸引。但市面上的产品要么是封闭的“黑盒”,数据不透明;要么价格高昂,难以进行个性化定制。我一直想,能不能自己动手做一个…...

MongoDB 4.4+ 版本后,手把手教你搞定mongodump独立安装与配置(附环境变量设置)

MongoDB 4.4独立工具链部署指南:从零构建mongodump备份环境 当你在全新的Linux服务器上部署了MongoDB 4.4或更新版本,准备执行例行数据库备份时,在终端输入熟悉的mongodump命令却只得到command not found的响应——这不是你的操作失误&#…...

零代码玩转物联网:用ItsaSnap与Adafruit IO实现手机控制硬件

1. 项目概述:当物联网遇上零代码,用手机就能玩转硬件数据 如果你对物联网(IoT)项目感兴趣,但又对写代码、搭服务器这些技术门槛望而却步,那么今天聊的这个工具可能会让你眼前一亮。想象一下,你…...

从开发板到自研板:RK3568设备树移植与定制编译实战

1. RK3568设备树移植入门指南 第一次接触RK3568设备树移植的工程师,往往会被dts文件中密密麻麻的节点和属性搞得晕头转向。我刚开始做这块的时候,光是看那7000多行的代码就头疼。但其实只要掌握几个关键点,移植工作就会变得清晰很多。 设备树…...

5分钟掌握Snap.Hutao:免费开源的Windows原神桌面工具箱完全指南

5分钟掌握Snap.Hutao:免费开源的Windows原神桌面工具箱完全指南 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn…...

ROFL-Player:英雄联盟回放时光机,一键穿越所有版本

ROFL-Player:英雄联盟回放时光机,一键穿越所有版本 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为英雄联…...

14502黄大年茶思屋145期难题 第二题 QLC盘多namespace并发备电量优化问题 标准化解题框架

总标题:黄大年茶思屋145期难题第二题 AI无偏差版脱敏题目标准化解题详细写作框架 子标题:QLC盘多namespace并发备电量优化问题 标准化解题框架 摘要 本文严格遵循AI无偏差脱敏标准化写作范式,完整复刻本期第二道脱敏原题全文,逐项…...

避开这些坑!ISCE2数据下载实战:Earthdata账号、.netrc配置与DEM自动拼接

ISCE2数据下载实战:Earthdata账号配置与DEM自动拼接避坑指南 当你第一次尝试用ISCE2处理哨兵数据时,可能会被各种数据下载问题搞得焦头烂额。Earthdata认证失败、DEM下载报错、脚本运行异常——这些看似简单的问题往往会让整个项目停滞数天。本文将分享…...

stm32 FOC从学习开发(七)SVPWM算法MATLAB仿真进阶:从模型搭建到代码生成

1. SVPWM算法仿真与代码生成全流程 搞电机控制的朋友都知道,SVPWM(空间矢量脉宽调制)是FOC(磁场定向控制)的核心算法之一。前几期我们聊过Clark变换、Park变换,也讲过SVPWM的基本原理,今天咱们就…...

告别单一地图!用BIGEMAP叠加ArcGIS Online和OpenStreetMap,打造你的专属作业底图

告别单一地图!用BIGEMAP叠加ArcGIS Online和OpenStreetMap,打造你的专属作业底图 在GIS专业领域,单一地图源往往难以满足复杂分析需求。当我们需要同时兼顾权威数据和社区更新时,如何将不同特性的地图源智能叠加,成为提…...

LabVIEW数据记录编程:生产者-消费者模式与TDMS文件实战

1. 项目概述:为什么数据记录是自动化测试的“定海神针”干了这么多年自动化测试和工业测控,我越来越觉得,一个系统稳不稳,关键看它的数据记录环节扎不扎实。你可能花了大把时间把传感器信号调理得漂漂亮亮,把控制算法写…...

RL78/G13单片机定时器外部事件捕获与中断控制LED实践

1. 项目概述与核心思路最近在折腾瑞萨的RL78/G13系列单片机,手头正好有块开发板,就想用它来实现一个基础的定时器功能。这听起来是个老生常谈的话题,但实际动手时,你会发现从选型、配置到调试,每一步都有不少细节值得琢…...

深入解析瑞芯微RK3399/RK3288平台ISP驱动:从V4L2框架到Camera Sensor联动

1. 项目概述 在嵌入式Linux开发,特别是涉及多媒体处理的项目中,图像信号处理器(ISP)驱动的理解往往是打通摄像头应用链路的关键一环,也是很多开发者感觉“黑盒”最多的地方。最近在调试基于瑞芯微RK3399和RK3288平台的…...

手把手教你为AK7739音频芯片移植TDM接口(基于Linux ALSA框架)

手把手教你为AK7739音频芯片移植TDM接口(基于Linux ALSA框架) 在嵌入式音频系统开发中,TDM(Time Division Multiplexing)接口因其高带宽和多通道支持能力,成为专业音频设备的首选方案。AK7739作为一款高性能…...

手持设备串口屏应用指南:从架构解析到实战开发

1. 项目概述:为什么手持设备需要一块“聪明”的屏幕?在手持设备这个领域摸爬滚打了十几年,从早期的黑白点阵屏到后来的TFT彩屏,再到如今各种智能交互界面,我深刻感受到一个趋势:设备越来越“聪明”&#xf…...

从‘桥接模式’到‘Pimpl惯用法’:一个被C++编译器逼出来的设计智慧

从‘桥接模式’到‘Pimpl惯用法’:一个被C编译器逼出来的设计智慧 在面向对象编程的演进历程中,设计模式往往是对语言缺陷的优雅补偿。当Java和C#开发者享受着接口天然的"编译防火墙"时,C社区却不得不发明Pimpl这种看似笨拙实则精妙…...

CTP接口实战:从零构建量化交易系统(附完整源码)

1. CTP接口入门:量化交易的第一块基石 第一次接触CTP接口时,我盯着那堆C代码发呆了半小时——这玩意儿比我想象的复杂多了。后来才发现,其实把它理解成期货市场的普通话就简单了。就像我们用普通话跟人交流,程序用CTP接口跟期货交…...

用FM收音机也能玩双声道?手把手教你复刻电赛G题双路语音同传系统(48.5MHz频点)

用FM收音机玩转双声道:48.5MHz双路语音同传系统实战指南 在电子设计竞赛中,双路语音同传系统一直是考验学生综合能力的经典题型。但你知道吗?这套看似专业的无线收发系统,其实可以用身边最常见的FM收音机来验证和体验。本文将带你…...

从逻辑门到加法器:Verilog实现半加器与全加器的三种抽象层级

1. 项目概述:从逻辑门到加法器的数字世界基石在数字电路和芯片设计的入门路上,加法器是一个绕不开的经典课题。它不仅是算术逻辑单元(ALU)的核心组件,更是理解数字系统如何执行基本运算的关键。今天,我们不…...

ElevenLabs情绪模拟技术落地倒计时:欧盟AI法案生效前最后72小时,必须完成的5项情感输出审计项

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs情绪模拟技术落地倒计时:欧盟AI法案生效前最后72小时,必须完成的5项情感输出审计项 情绪向量合规性校验 欧盟《AI法案》附件III明确将“高风险情感交互系统”纳入严格…...

GPT-Image 2 视觉模型的逻辑跃迁:涌现还是幻觉?

GPT-Image 2 的“涌现能力”:视觉模型是否也会发生“逻辑跃迁”?(2026 深度观察与验证思路) 过去很长一段时间,大家谈“涌现(emergent)能力”,更偏向自然语言模型:从文本…...

ssh 使用问题汇总

本文深入探讨SSH连接失败、密钥管理、权限设置等常见难题,并提供详细的解决方案。通过本文,您将能够轻松应对SSH使用过程中遇到的各类问题,提升SSH操作效率,保障远程连接的安全性。 1. Connection reset by peer 现象 ssh到ser…...

Chrome QRCode插件终极指南:如何在3分钟内实现跨设备无缝内容同步

Chrome QRCode插件终极指南:如何在3分钟内实现跨设备无缝内容同步 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件,用于生成当前URL或者选中内容的二维…...

Linux 下用火焰图进行性能分析

软件的性能分析,往往需要查看 CPU 耗时,了解瓶颈在哪里。火焰图 (flame graph) 是性能分析的利器。 1. 火焰图简介 很多人感冒发烧的时候,往往会模仿神农氏尝百草的路子:先尝尝抗病毒的药,再试试抗细菌的药&#xff…...

终极英雄联盟换肤工具:R3nzSkin国服特供版完整使用教程

终极英雄联盟换肤工具:R3nzSkin国服特供版完整使用教程 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 想要在英雄联盟国服免费体验所有皮肤…...

STM32移植U8g2库驱动OLED:源码精简与硬件适配实战

1. 项目概述与核心思路之前玩ESP8266的时候,在Arduino环境下用U8g2库驱动OLED,画点线面、显示文字,确实方便。但很多实际项目,尤其是对成本、功耗有要求的,还是绕不开STM32这类更纯粹的MCU。最近有个小项目&#xff0c…...

终极指南:erd实体关系图生成器的社区生态与开源贡献全解析

终极指南:erd实体关系图生成器的社区生态与开源贡献全解析 【免费下载链接】erd Translates a plain text description of a relational database schema to a graphical entity-relationship diagram. 项目地址: https://gitcode.com/gh_mirrors/er/erd 你是…...

ME6206A 系列低压差线性稳压器

概述ME6206A 系列是高精度、低功耗、采用 CMOS 技 术制造的正电压稳压器。这些器件提供大电流,具有显 著的小电压差。 该系列与低 ESR 陶瓷电容器兼容,限流器的折返 电路也作为短路保护输出电流限制器和输出引脚。性能特点高精度输出电压:1%输…...

Taotoken Token Plan套餐在实际开发中的成本控制体感

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken Token Plan套餐在实际开发中的成本控制体感 1. 套餐选择与预算锚定 在项目开发初期,团队或个人开发者面临的…...

Rust异步任务取消机制:从协作式取消到结构化并发实践

1. 项目概述:当异步任务“半途而废”时在Rust的异步编程世界里,我们常常专注于如何让任务“跑起来”——用async/await优雅地处理并发,用Future描述计算,用tokio或async-std这样的运行时来驱动一切。代码逻辑清晰,从A点…...