基于Arduino与传感器的坐姿智能提醒器DIY全攻略

发布时间:2026/7/28 10:18:25
基于Arduino与传感器的坐姿智能提醒器DIY全攻略 1. 从“坐不住”到“坐得对”一个硬件创客的自我救赎我猜你点开这篇文章大概率和我几年前的状态一样每天在电脑前一坐就是七八个小时腰酸背痛是家常便饭颈椎时不时发出抗议眼睛干涩整个人像一台生锈的机器。医生和健身博主总在耳边念叨“保持正确坐姿”、“定时起来活动”但一旦进入工作心流状态这些提醒就像背景噪音一样被自动过滤了。直到有一次体检医生看着我的脊柱X光片皱着眉头说“你这颈椎曲度都快没了再这么下去问题就大了”我才真正意识到我需要一个能把我从“忘我”状态里拽出来的东西——一个不依赖意志力、物理上存在的“监督员”。这就是“坐姿智能提醒器”诞生的初衷。它不是什么高精尖的医疗设备而是一个极客/创客用常见的开源硬件和一点点代码为自己打造的“数字健康伙伴”。它的核心逻辑很简单感知 - 判断 - 提醒。通过传感器感知你的坐姿状态通过预设的逻辑判断你是否“坐歪了”或者“坐太久了”然后通过声、光、震动等方式温柔但坚定地提醒你“嘿该调整一下了”这篇文章就是把我从构思、选型、制作到调试优化的全过程毫无保留地分享给你。无论你是对硬件DIY感兴趣的初学者想给自己做一个实用小工具还是有一定经验的开发者想了解如何将传感器数据转化为有效的健康干预甚至是产品经理在思考如何设计一个更人性化的健康提醒产品我相信这里面的踩坑经验和实现细节都能给你带来实实在在的参考价值。我们不止是在做一个提醒器更是在探索如何用技术更好地关照我们自己。2. 核心需求拆解与方案选型为什么是它们在动手之前我们必须想清楚这个“提醒器”到底要解决哪些具体问题以及每个问题最适合的解决方案是什么。盲目堆砌传感器和功能只会做出一个昂贵又难用的“玩具”。2.1 需求一如何定义“错误坐姿”这是最核心的问题。坐姿不正确有很多种弯腰驼背、身体左倾右斜、脖子前伸俗称“乌龟颈”、跷二郎腿等等。我们不可能用一个设备识别所有情况必须抓主要矛盾。经过调研和自身体验我锁定了两个最普遍、危害也最大的问题躯干前倾/弯腰这是导致腰肌劳损和腰椎问题的元凶。颈部过度前伸这是颈椎病的直接推手。那么用什么来检测呢市面上常见的姿态传感器方案有几种摄像头AI识别精度高能识别多种姿态但涉及隐私功耗高且需要复杂的算法部署如OpenPose不适合做成一个常驻桌面的小型设备。多个惯性测量单元IMU在身体多个部位如背部、颈部贴传感器通过相对位置计算姿态。精度不错但需要穿戴体验不佳且多个传感器同步和标定麻烦。单点距离/角度传感器这是我认为最适合桌面提醒器的方案。它的思路不是识别全身姿态而是监测身体关键部位与某个参考点如桌面或椅背的相对关系。我最终选择了单点方案具体是超声波测距模块HC-SR04和MPU6050六轴姿态传感器的组合。为什么超声波模块价格极低几块钱原理简单发射超声波接收回波计算时间差得到距离。我可以把它固定在显示器上方对准使用者的胸口或头部。当使用者身体前倾胸口离传感器的距离就会变短一旦低于设定的“健康距离”阈值即可触发提醒。这完美解决了“躯干前倾”的检测问题。MPU6050它集成了三轴加速度计和三轴陀螺仪。我可以把它固定在使用者的衣领后方或者眼镜腿上。通过加速度计数据可以大致计算出传感器相对于水平面的倾角俯仰角。当使用者低头前伸这个俯仰角就会持续偏大。这解决了“颈部前伸”的检测问题。注意MPU6050测出的角度是传感器自身的姿态角而不是脖子的弯曲角度。但在实际中只要把传感器相对固定在使用者上背部或颈部后方其俯仰角的变化就能很好地映射颈部的前伸动作。这是一个非常实用且低成本的近似方案。2.2 需求二如何实现“久坐提醒”这个需求相对独立且简单。不需要传感器持续监测姿态只需要一个计时器。从使用者坐下开始可以通过压力传感器、超声波有稳定读数等判断每隔一段时间如45分钟或1小时就触发一次提醒。我选择用程序内部计时实现这样最简洁。也可以结合一个简单的薄膜压力传感器放在坐垫下用来更精确地判断“就坐”和“离座”状态实现计时器的自动重置。2.3 需求三提醒方式如何有效又不惹人烦提醒的终极目标是促进行为改变而不是制造噪音对抗。一个令人反感的提醒器最终命运就是被关掉电源。因此提醒需要阶梯化和人性化。我设计了三层提醒策略一级提醒轻度震动马达。当检测到轻微的姿态不良如刚前倾5秒或久坐时间达到预设值的80%时触发短促、轻微的震动。这种提醒私密、不干扰他人适合在办公室等安静环境。二级提醒中度彩色LED灯如WS2812B。当姿态不良持续一段时间如10秒或久坐时间已到时LED灯会闪烁温和的黄色或橙色光。视觉提醒比触觉更引人注意但依然相对安静。三级提醒重度蜂鸣器。当姿态严重不良如深度前倾超过20秒或完全忽略前两级提醒时触发短暂的蜂鸣声。这是最后的“杀手锏”应谨慎使用避免引起反感。2.4 主控与供电选型主控需要负责读取传感器数据、运行判断逻辑、控制提醒设备。对于这个项目Arduino Nano或ESP32是绝佳选择。Arduino Nano足够简单引脚和性能完全满足超声波、MPU6050、LED、马达、蜂鸣器的控制。成本最低学习资源最丰富。我最终选择了它因为本项目暂时不需要联网功能追求极致的稳定和简单。ESP32功能更强大自带Wi-Fi和蓝牙。如果你未来想扩展功能比如将坐姿数据同步到手机App、通过微信接收提醒、多个设备组网等ESP32是更好的起点。但它功耗相对高一点开发稍复杂。供电方面由于设备常驻桌面直接使用USB供电连接电脑或充电头是最稳妥的方案无需考虑电池续航问题。方案总结清单功能模块选用器件核心理由大约成本主控制器Arduino Nano简单、稳定、成本低、资源多15-25元躯干前倾检测HC-SR04 超声波模块非接触、原理简单、价格极低3-5元颈部前伸检测MPU6050 六轴传感器可测算倾角近似检测颈部姿态10-15元久坐计时程序内部计时无需额外硬件逻辑实现0元(可选)就坐检测薄膜压力传感器提高久坐计时准确性5-10元一级提醒触觉震动马达私密、安静1-2元二级提醒视觉WS2812B LED灯珠可编程彩色灯光效果丰富1-2元/颗三级提醒听觉有源蜂鸣器最终强提醒手段1-2元供电Micro USB接口稳定可靠无需充电(利用现有线材)3. 硬件搭建与电路连接把想法“焊”进现实选型确定后下一步就是动手搭建。这部分需要一些基础的焊接和电路连接知识但别担心跟着步骤走一点都不难。3.1 所需工具与材料清单除了上面提到的电子元件你还需要焊接工具电烙铁、焊锡丝、松香或免洗助焊剂。连接线杜邦线公对公、母对母、公对母若干用于非永久连接测试导线用于最终焊接。万用板洞洞板用于固定和焊接所有元件比面包板更稳固适合做成永久性作品。USB数据线Micro-B口为Arduino Nano供电和下载程序。外壳可以用3D打印最推荐、塑料盒改造甚至用乐高积木搭建目的是保护电路并美观。固定材料热熔胶枪、双面胶、螺丝用于固定传感器和主板。3.2 核心电路连接详解这是整个项目的“接线图”请务必对照你的Arduino Nano引脚图进行操作。接线前请确保所有设备断电不连USB。1. Arduino Nano 基础连接VIN/5V接USB供电的5V。如果你有外部5V电源也可以从这里接入。GND所有模块的GND地线都必须最终连接到这里共地是电路正常工作的基础。2. HC-SR04 超声波模块VCC- Arduino5VGND- ArduinoGNDTrig(触发) - Arduino数字引脚 D2Echo(回响) - Arduino数字引脚 D33. MPU6050 姿态传感器MPU6050通常通过I2C通信这是一个两条线的串行总线。VCC- Arduino5VGND- ArduinoGNDSCL(时钟线) - Arduino模拟引脚 A5(在Nano上A5也是I2C的SCL)SDA(数据线) - Arduino模拟引脚 A4(在Nano上A4也是I2C的SDA)4. WS2812B LED灯珠这是一个单线控制的智能LED注意数据流向。VCC- Arduino5VGND- ArduinoGNDDIN(数据输入) - Arduino数字引脚 D6(需要选择支持PWM的引脚)5. 震动马达马达需要一定的电流驱动不能直接接单片机引脚会烧毁必须通过一个三极管如S8050来开关控制。这是一个关键细节马达正极 - 接一个100欧姆左右的电阻限流 - 接三极管的集电极(C)。三极管的发射极(E) - ArduinoGND。三极管的基极(B) - 接一个1k欧姆的电阻限流 - Arduino数字引脚 D9。马达负极 - 接 Arduino5V。原理当D9输出高电平5V时电流流入三极管基极三极管导通马达两端形成电压差开始震动。电阻用于保护三极管和单片机引脚。6. 有源蜂鸣器有源蜂鸣器内部有振荡电路给电就响控制简单。正极() - Arduino数字引脚 D10(同样建议通过一个100-220欧姆电阻)负极(-) - ArduinoGND接线完成后的检查要点电源极性再三确认所有元件的VCC和GND没有接反。共地确保所有GND都连通了。信号线数据线、触发线等是否接到了正确的数字引脚。驱动电路马达和蜂鸣器的限流电阻是否已加上。4. 核心代码逻辑与传感器数据处理硬件是身体软件是灵魂。下面我们来编写让提醒器“活”起来的代码。我将分模块解释并提供完整的代码框架。4.1 开发环境与库准备首先在Arduino IDE中安装必要的库MPU6050库在“工具” - “管理库”中搜索“MPU6050”安装由Electronic Cats或Adafruit维护的版本。我们还需要Adafruit_Sensor库和Wire库I2C通信通常Arduino已内置。FastLED库用于高效驱动WS2812B LED搜索并安装FastLED。NewPing库这个库能更好地处理超声波传感器避免一些错误读数搜索安装NewPing。4.2 代码结构总览我们的程序将包含以下几个核心部分初始化设置引脚模式、初始化传感器、LED等。主循环读取超声波距离。读取MPU6050角度。判断坐姿状态。执行久坐计时与判断。根据状态控制提醒设备。阈值与参数所有判断的阈值如健康距离、不良角度、久坐时间都定义为变量方便调试。4.3 超声波距离读取与滤波超声波读数容易受到环境噪声干扰比如手突然挥过直接使用单次读数会频繁误触发。必须进行软件滤波。#include NewPing.h #define TRIG_PIN 2 #define ECHO_PIN 3 #define MAX_DISTANCE 200 // 最大测量距离200厘米 NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); // 滤波取最近5次读数的中值 unsigned int getFilteredDistance() { unsigned int distances[5]; for (int i 0; i 5; i) { delay(30); // 每次测量间隔稍短时间HC-SR04需要短暂恢复 distances[i] sonar.ping_cm(); // 获取距离厘米 } // 简单排序取中值 (这里用冒泡排序简化示例) for (int i 0; i 4; i) { for (int j 0; j 4 - i; j) { if (distances[j] distances[j 1]) { unsigned int temp distances[j]; distances[j] distances[j 1]; distances[j 1] temp; } } } return distances[2]; // 返回中值 }为什么用中值滤波对于超声波这种容易产生偶发极大或极小错误值的传感器中值滤波取中间值比平均值滤波更能抵抗“脉冲噪声”结果更稳定。4.4 MPU6050角度计算与校准MPU6050输出的是原始的加速度和角速度值我们需要将其转换成易于理解的角度。这里使用互补滤波算法它结合了加速度计长期稳定但动态响应慢和陀螺仪短期精确但会漂移的优点。#include Wire.h #include MPU6050.h MPU6050 mpu; float pitchAngle 0; // 俯仰角前后倾斜 float rollAngle 0; // 滚转角左右倾斜 unsigned long lastTime 0; float dt; // 时间差 void setupMPU6050() { Wire.begin(); mpu.initialize(); // 可选进行传感器校准减少零偏。这需要将设备水平静止放置一段时间。 // mpu.CalibrateGyro(); // mpu.CalibrateAccel(); } void updateAngle() { unsigned long now micros(); dt (now - lastTime) / 1000000.0; // 转换为秒 lastTime now; // 读取原始数据 int16_t ax, ay, az, gx, gy, gz; mpu.getMotion6(ax, ay, az, gx, gy, gz); // 1. 从加速度计计算角度弧度 float accelPitch atan2(-ax, sqrt(ay * ay az * az)) * 180 / PI; float accelRoll atan2(ay, sqrt(ax * ax az * az)) * 180 / PI; // 2. 从陀螺仪计算角度变化度/秒 - 度 // MPU6050的陀螺仪原始数据需要除以灵敏度系数对于默认量程±250°/s系数是131.0 float gyroPitchRate gx / 131.0; float gyroRollRate gy / 131.0; // 3. 互补滤波融合 float alpha 0.96; // 融合系数越大越信任陀螺仪 pitchAngle alpha * (pitchAngle gyroPitchRate * dt) (1 - alpha) * accelPitch; rollAngle alpha * (rollAngle gyroRollRate * dt) (1 - alpha) * accelRoll; }关键点解释atan2(y, x)函数用于计算向量(x, y)与x轴的夹角非常适合从加速度分量计算倾斜角。互补滤波系数alpha这是一个经验值通常在0.95-0.98之间。它决定了相信陀螺仪动态好和加速度计静态准的比例。需要根据实际效果微调。校准CalibrateGyro()和CalibrateAccel()函数可以计算传感器的零偏误差并存储。对于坐姿检测我们主要关心角度变化趋势如果设备固定不动时角度读数不为0就需要校准。实操心得把传感器平放在桌面上运行校准程序能显著提升初始角度的准确性。4.5 状态判断与提醒逻辑这是业务逻辑的核心。我们需要定义几个状态变量和阈值。// 阈值定义 (需要根据你的实际坐姿调整) #define HEALTHY_DISTANCE 50 // 健康距离厘米。胸口离传感器小于此值算前倾。 #define BAD_PITCH_ANGLE 20 // 不良俯仰角度。低头角度大于此值算颈部前伸。 #define SIT_DURATION_MIN 45 // 久坐提醒时间分钟。 // 状态变量 bool isLeaningForward false; bool isNeckForward false; unsigned long badPostureStartTime 0; unsigned long sitStartTime 0; bool isSitting true; // 假设初始为就坐状态可通过压力传感器改进 void checkPosture(unsigned int distance, float pitch) { unsigned long currentTime millis(); // 1. 检查躯干前倾 if (distance 0 distance HEALTHY_DISTANCE) { // 距离有效且小于健康值 if (!isLeaningForward) { isLeaningForward true; badPostureStartTime currentTime; // 记录不良姿态开始时间 } else { // 如果已经前倾检查持续时间 if (currentTime - badPostureStartTime 5000) { // 持续5秒 triggerAlert(LEVEL_MEDIUM, REASON_LEAN); // 触发中级提醒 } if (currentTime - badPostureStartTime 20000) { // 持续20秒 triggerAlert(LEVEL_HIGH, REASON_LEAN); // 触发高级提醒 } } } else { isLeaningForward false; // 距离恢复正常重置状态 } // 2. 检查颈部前伸 (pitch角低头为正) if (pitch BAD_PITCH_ANGLE) { if (!isNeckForward) { isNeckForward true; badPostureStartTime currentTime; } else { if (currentTime - badPostureStartTime 5000) { triggerAlert(LEVEL_MEDIUM, REASON_NECK); } if (currentTime - badPostureStartTime 20000) { triggerAlert(LEVEL_HIGH, REASON_NECK); } } } else { isNeckForward false; } // 3. 检查久坐 (简化版假设一直坐着) if (isSitting) { if (currentTime - sitStartTime SIT_DURATION_MIN * 60 * 1000L) { // 转换为毫秒 triggerAlert(LEVEL_MEDIUM, REASON_SIT_LONG); sitStartTime currentTime; // 重置计时器开始下一个周期 } } } void triggerAlert(int level, int reason) { // 根据提醒级别和原因控制不同的设备 switch(level) { case LEVEL_LOW: // 短震动 digitalWrite(MOTOR_PIN, HIGH); delay(200); digitalWrite(MOTOR_PIN, LOW); break; case LEVEL_MEDIUM: // LED闪烁黄光 for(int i0; i5; i) { setLEDColor(255, 150, 0); // 黄色 delay(300); setLEDColor(0, 0, 0); delay(300); } break; case LEVEL_HIGH: // LED闪烁红光 蜂鸣 for(int i0; i3; i) { setLEDColor(255, 0, 0); digitalWrite(BUZZER_PIN, HIGH); delay(500); setLEDColor(0, 0, 0); digitalWrite(BUZZER_PIN, LOW); delay(500); } break; } }逻辑精髓这里引入了时间维度的判断。不是一检测到不良姿态就“狂响”而是给了用户一个缓冲期比如5秒。这非常符合人性——你可能只是短暂地探身去拿个东西。只有当不良姿态持续一段时间才认为你真的需要被提醒了。这种设计能极大减少误报提升用户体验。5. 组装、调试与优化让提醒器真正“智能”起来代码写完、电路焊好只是完成了80%。剩下的20%——调试和优化才是决定这个项目是“玩具”还是“工具”的关键。5.1 机械结构与外壳设计传感器的安装位置至关重要直接决定了检测的准确性。超声波模块我把它装在一个用3D打印的小支架上支架用夹子固定在显示器顶部边缘传感器朝下对准我胸口的大致位置。你需要调整支架角度确保超声波锥形覆盖区域能覆盖你坐姿变化时胸部的活动范围。MPU6050模块我把它封装在一个小盒子里用一条柔软的魔术贴带子固定在衣领后面对于穿衬衫或者帽衫的帽子里。确保传感器背面紧贴身体且其X-Y平面大致与你的背部平行。重要提示连接MPU6050的导线要足够长且柔软避免拉扯影响佩戴或损坏焊点。主控板与提醒模块我把Arduino、LED、蜂鸣器、马达驱动电路都集成在一块洞洞板上然后塞进一个3D打印的底座里。这个底座就放在显示器旁边LED朝上蜂鸣器开孔对外。5.2 阈值校准因人而异的关键步骤代码里的HEALTHY_DISTANCE和BAD_PITCH_ANGLE不是魔法数字必须根据你自己的体型和座椅高度来校准。校准流程距离阈值坐在你标准的正确坐姿位置背部挺直离椅背一拳距离。用串口监视器打印出超声波读出的距离值。保持这个姿势几分钟观察读数的波动范围比如在48-52cm之间。那么HEALTHY_DISTANCE可以设定为45cm。这样当你前倾到胸口离传感器45cm以内时才会被判定为“前倾”。角度阈值同样保持正确坐姿头部平视屏幕。打印出pitchAngle的值。然后故意做出“乌龟颈”的姿势再观察角度值。你会发现正确坐姿时角度可能在-10°到10°之间取决于传感器佩戴的细微差别而明显前伸时可能超过25°。那么BAD_PITCH_ANGLE可以设定为20°。这个值需要你反复试验找到一个既能捕捉到不良姿势又不会在你正常活动头部如转头、轻微低头看键盘时误报的值。我的经验值供参考身高175cm标准办公椅HEALTHY_DISTANCE: 50 cmBAD_PITCH_ANGLE: 22 度SIT_DURATION_MIN: 50 分钟不良姿态持续触发提醒时间一级震动不设二级灯光8秒三级声光25秒。5.3 调试与问题排查即使一切连接正确第一次运行也可能不如预期。以下是常见问题及排查方法现象可能原因排查步骤超声波读数始终为0或超大1. 接线错误Trig/Echo接反2. 供电不足3. 物体不在测距范围内或表面不反射超声波1. 检查接线。2. 尝试单独给超声波模块供电。3. 用手在传感器前晃动看读数是否有变化。确保被测表面不是海绵、布料等吸音材料。MPU6050角度漂移严重1. 未校准2. 互补滤波系数不合适3. 传感器附近有强磁铁或电机干扰1. 运行校准程序。2. 调整alpha值尝试0.93, 0.96, 0.98。3. 远离干扰源。提醒不触发或乱触发1. 阈值设置不合理2. 传感器数据噪声大未滤波3. 状态判断逻辑有bug1. 通过串口监视器实时打印距离和角度观察你在不同姿势下的真实数据调整阈值。2. 加强滤波如增加中值滤波的窗口大小。3. 仔细检查checkPosture函数中的逻辑特别是时间判断部分。马达或蜂鸣器不工作1. 忘记接限流电阻导致引脚损坏2. 三极管接线错误3. 驱动电流不足1. 用万用表检查引脚输出电压。切记驱动马达/蜂鸣器必须用三极管或MOS管2. 确认三极管型号NPN/PNP及C/B/E极是否正确。3. 尝试用外部5V电源直接驱动马达检查是否是马达本身问题。一个高级调试技巧使用串口绘图仪Serial Plotter。Arduino IDE自带这个强大工具。你可以同时绘制出距离、角度、以及一个代表提醒触发的布尔值如isLeaningForward。这样就能非常直观地看到你的动作如何影响传感器数据以及触发逻辑是否准确。这是调整阈值和滤波参数的最快方法。5.4 优化与扩展思路基础版本稳定工作后你可以考虑以下优化让它更“聪明”自适应阈值让设备学习你的正确坐姿。长按一个按钮5秒设备记录下当前的距离和角度作为“基准值”后续的阈值在此基础上浮动。这样换个人用也不用重新校准。学习模式初期的一周设备只记录和提醒但不发出强烈警报。一周后它分析你的数据给出一个“平均不良姿势时长”报告并基于此动态调整提醒的敏感度。比如你经常短暂前倾它就把触发时间从5秒延长到7秒。数据记录与可视化如果使用ESP32可以将每天的不良姿势次数、总时长通过Wi-Fi上传到服务器如ThingsBoard、Blynk或自建服务生成每周报告让你更直观地了解自己的习惯变化。多级灵敏度增加一个物理旋钮或按钮可以在“专注模式”减少提醒、“标准模式”和“严格模式”更敏感之间切换。改善佩戴体验将MPU6050集成到一个更舒适的可穿戴设备中比如一个柔软的颈环或者直接改造一个现有的颈枕。6. 从项目到产品我的踩坑实录与终极建议这个项目我前后迭代了三个版本从面包板上的杂乱线材到洞洞板的原型再到3D打印外壳的“准产品”。过程中踩的坑比上面写的顺利部分多得多。第一大坑传感器的“脾气”最初我把超声波传感器放在桌面上对着胸口。结果发现当我打字时手臂的移动、桌面上水杯的位置都会严重干扰读数误报率极高。后来才悟到必须把传感器抬高从上往下探测让它的探测锥形区域主要覆盖躯干避开桌面杂物和手臂的活动区域。这是物理布局上最重要的经验。第二大坑MPU6050的“初始化”有一版程序每次上电后角度读数都差十几度。排查了半天发现是setup()函数里初始化Wire和MPU6050后没有留出足够的时间让传感器稳定。后来在初始化后加了delay(1000)问题解决。对于I2C设备上电后给一个短暂的稳定延时是很好的习惯。第三大坑提醒的“疲劳度”第一版里只要距离低于阈值蜂鸣器就响。结果就是我一天之内就把它拔了线。提醒必须是渐进的、非侵入性的、可恢复的。震动作为第一道防线效果出奇的好。它足够私密不会在开会时尴尬又能有效引起注意。LED灯光在光线较暗的环境下效果显著。蜂鸣器我最终把它设定为只有在持续严重不良姿态超过30秒且前两级提醒都被忽略后才会短促地响三声。这个逻辑让设备的“存在感”变得友好。给想复现的朋友的终极建议分步验证不要试图一次性把所有功能都接上。先让超声波单独工作打印距离值。再让MPU6050单独工作打印角度。然后单独测试LED、马达、蜂鸣器。最后再把逻辑整合起来。这能帮你快速定位问题。阈值是活的不要死磕我给出的阈值数字。你的桌子高度、椅子、身高都不同。把它当作一个需要你亲自“训练”的AI用串口监视器观察数据找到属于你的“黄金数值”。电源要干净当马达震动或蜂鸣器响起时会对电路产生一个瞬间的电流冲击可能导致Arduino复位或传感器读数异常。在Arduino的5V和GND引脚之间焊接一个100μF的电解电容和一个0.1μF的瓷片电容可以很好地平滑这种电源噪声。接受不完美这不是一个医疗级设备它只是一个基于简单规则的提醒工具。它的目的不是100%精确地识别每一种错误坐姿而是通过一种物理存在的方式提高你对自身姿态的“觉知”。只要它能让你在一天中多几次意识到自己驼背了并挺直腰板那这个项目就取得了巨大的成功。最后这个坐姿智能提醒器现在就在我的显示器上安静地工作着。它不会说话但每次那轻微的震动或灯光闪烁都像是一个善意的朋友在轻轻拍我的肩膀。制作它的过程远比使用它的结果更有趣——那是一种把对自身健康的关切通过双手转化为具体物件的满足感。希望你的制作过程也一样顺利更重要的是希望我们都能因此拥有更健康的脊柱。