基于Arduino与应变片传感器的低成本轮椅称重系统设计与实现
2026/5/30 16:43:05 网站建设 项目流程

1. 项目概述与核心需求解析

对于长期使用轮椅的朋友来说,日常监测体重是一件既重要又麻烦的事。常规的体重秤需要站立,而专用的医用轮椅秤不仅价格昂贵,而且通常只能在医疗机构使用,无法满足家庭日常监测的需求。我最初萌生这个想法,就是为了帮助我的家人能更方便地在家跟踪体重变化,这对于管理健康状况、调整用药或营养方案都至关重要。这个项目的核心,就是利用Arduino开发板和应变片传感器,自己动手搭建一套低成本、高精度的轮椅称重系统,它属于辅助技术和简易医疗设备的范畴,技术门槛不高,但实用价值很大。

整个系统的设计思路很直观:我们需要一个足够坚固的承重平台(可以是一块木板),在平台的四个角下方安装应变片传感器。当轮椅连同使用者移动到平台上时,重量会使平台产生微小的形变,这个形变会被应变片感知并转换为微弱的电信号。随后,信号经过放大和模数转换,由Arduino进行处理和计算,最终将使用者的体重数值显示在LCD屏幕上。整个项目的物料成本可以控制在几百元以内,远低于商用产品,并且赋予了使用者完全的自主权和可维护性。接下来,我将从设计思路、硬件选型、软件实现到调试校准,完整地拆解这个项目的每一个环节,并分享我在搭建过程中积累的实操经验和避坑指南。

2. 系统整体设计与硬件选型解析

2.1 系统架构与工作原理

这套称重系统的架构遵循典型的传感器数据采集流程,可以分为感知层、信号调理层、控制处理层和显示层。

感知层的核心是四个电阻应变片。它们被粘贴在承重梁(或直接粘贴在定制铝梁的特定位置)上,组成一个全桥测量电路。当平台受力时,梁体发生弯曲形变,导致其上粘贴的应变片的电阻值发生微小变化。全桥电路的优点在于灵敏度高,并能有效抵消温度变化带来的误差。

信号调理层至关重要,因为应变片输出的信号是毫伏级别的差分信号,且夹杂着噪声。这里需要一个专用的仪表放大器(通常集成在HX711这类模数转换芯片中)。HX711不仅提供了高增益的放大电路,还集成了24位高精度ADC(模数转换器),能将放大后的模拟信号转换为Arduino可以读取的数字值。它的高分辨率和内置的可编程增益放大器(PGA)使其非常适合应变片称重应用。

控制处理层由Arduino Uno担任。它通过简单的数字接口(如SCK和DT)与HX711通信,读取ADC转换后的原始数据。Arduino的程序(固件)负责完成几个关键任务:初始化传感器、定时读取数据、对原始数据进行滤波(如滑动平均滤波)以稳定读数、将滤波后的ADC值通过预设的标定公式转换为重量值(单位:公斤或磅)。

显示层则是一块常见的16x2字符LCD屏幕,通过I2C接口与Arduino连接,以最简洁的方式实时显示测量出的体重。

2.2 核心硬件选型与采购清单

硬件选型的原则是在满足精度和稳定性的前提下,尽可能降低成本并便于采购。以下是经过验证的物料清单:

  1. 主控板:Arduino Uno R3

    • 选择理由:资源足够(14个数字I/O,6个模拟输入,32KB Flash),生态成熟,教程和库文件丰富,价格适中。对于本项目,其处理能力和I/O口完全够用。
    • 注意事项:务必购买正品或质量可靠的兼容板,劣质板子的电源和晶振不稳定会导致读数漂移。
  2. 称重传感器:电阻应变片式传感器(4个)

    • 类型:建议直接购买成品的“悬臂梁式称重传感器”,常见规格有5kg、10kg、20kg、50kg。对于轮椅称重,考虑到轮椅自重(约15-25kg)加上使用者体重,选择四个50kg的传感器并联工作,总称量范围可达200kg,留有充足余量。
    • 选择理由:成品传感器已将应变片密封在金属结构内,并做好了防水防尘,比自行粘贴应变片到金属梁上要稳定、可靠得多,且自带安装孔,方便固定。价格虽然比裸应变片贵,但省去了大量调试麻烦。
    • 关键参数:灵敏度通常为2.0mV/V。这意味着在额定负载下,每1V激励电压会产生2mV的输出信号。我们需要根据这个参数来配置HX711的增益。
  3. 模数转换器:HX711模块

    • 选择理由:专为电子秤设计,24位高精度,内置可编程增益放大器(PGA),支持128或64倍增益,能直接处理应变片电桥的微弱信号。模块化设计,使用简单。
    • 注意事项:市场上模块质量参差不齐,应选择带有稳压芯片和优质电容的版本,电源稳定性对精度影响极大。
  4. 显示模块:1602 LCD屏带I2C接口

    • 选择理由:I2C接口仅需两根信号线(SDA, SCL)即可驱动,极大节省了Arduino的I/O口,简化了接线。显示内容清晰,满足基本需求。
    • 替代方案:如果需要显示更丰富的信息(如历史趋势图),可考虑使用OLED屏,但成本稍高。
  5. 结构材料

    • 承重平台:一块足够大的高强度胶合板或多层板,厚度建议在18mm以上,尺寸需完全覆盖轮椅的四个轮子并留有边距。
    • 传感器安装支架:可以使用角铝或小块厚钢板,用于将称重传感器牢固地固定在平台底部和地面(或一个底框)之间。
    • 连接线:推荐使用带屏蔽层的四芯电缆(如旧的网线或专用的传感器线缆)连接传感器和HX711模块,以减少电磁干扰。
  6. 电源

    • 推荐使用9V/12V直流电源适配器为整个系统供电,通过Arduino的Vin引脚输入。这比使用9V电池更稳定、持久。HX711模块和传感器可由Arduino的5V引脚供电。

注意:关于传感器数量。理论上,使用单个传感器配合一个坚固的杠杆机构也能实现称重,但使用四个传感器(四角各一)是最优方案。它能自动平均分布重量,即使轮椅没有完全停在平台中心,也能获得准确的读数,同时系统的结构稳定性和安全性也更高。

3. 机械结构搭建与传感器安装

3.1 承重平台设计与加工

承重平台是整个系统的物理基础,其刚性和平整度直接影响测量精度。

  1. 确定尺寸:测量所用轮椅的轮距(左右轮距离)和轴距(前后轮距离)。平台的每边长度应至少比轮椅对应尺寸大20-30厘米,确保轮椅能轻松、完全地驶上平台,且留有安全余量。
  2. 材料选择与加固:使用18mm厚的多层板或实木拼接板。如果平台面积较大(比如大于1米x1米),为了防止中部过度弯曲,需要在底板下方增加“井”字形或“目”字形的加强筋。加强筋可以使用相同厚度的木条,用木工胶和螺丝固定。
  3. 表面处理:平台表面应平整。可以粘贴一层防滑橡胶垫或地毯,既能防止轮椅打滑,也能缓冲冲击,保护传感器。务必确保粘贴物平整,不会导致平台局部翘曲。

3.2 传感器安装与调平

这是最关键也最需要耐心的步骤。目标是让四个传感器均匀承受平台自重,且在空载时输出接近零。

  1. 制作安装底座:为每个传感器准备两个安装件。一个用于固定在平台底部(上安装座),一个用于固定在地面或一个刚性底框上(下安装座)。可以使用L型角铝加工而成。在上、下安装座与传感器接触的面,需要加工出与传感器受力点(通常是一个小圆球或平面)匹配的凹坑或平面,确保力能垂直传递。
  2. 定位与固定:将四个传感器大致放在平台底面的四个角附近。用水平仪确保平台大致水平后,标记传感器上安装座的位置。先固定上安装座到平台底面。然后,将传感器拧到上安装座上。
  3. 整体调平
    • 将平台(连同已安装的传感器)翻过来,让传感器的下端朝上。
    • 将整个系统放置在一个绝对水平的、坚固的地面上。
    • 在四个传感器下端临时垫上可调节高度的东西(如一小叠垫片或螺母)。
    • 使用高精度水平仪(或手机上的水平仪App)仔细调整四个角的垫片高度,直到平台在各个方向都达到水平。这个步骤至关重要,平台不水平会导致重量分配不均,引入误差。
  4. 最终固定:调平完成后,将下安装座固定到传感器上,然后再将下安装座固定到地面或底框上。固定时,要确保不破坏已经调好的水平状态。可以采用先点胶初步固定,确认无误后再上紧螺丝的方法。

实操心得:调平技巧。一个更高效的调平方法是:先不固定下安装座,而是用四个完全相同的、高度可微调的“千斤顶”(比如带螺纹的支撑杆)临时顶住四个传感器下方。通过旋转这些支撑杆来精确调平平台。调平后,用快干胶或夹具将下安装座与支撑杆(或地面)的位置临时固定,再移开平台进行最终打孔和螺丝固定。这样可以避免在狭窄空间下操作困难。

4. 电路连接与系统集成

4.1 接线图与原理详解

所有传感器的接线方式为“并联求和”。每个传感器本身是一个全桥电路,有红(E+)、黑(E-)、白(S+)、绿(S-)四根线(颜色可能因厂家而异,请以说明书为准)。

  1. 激励电压并联:将所有传感器的线(E+, 激励正极)拧在一起,接到HX711模块的E+VCC端子。将所有传感器的线(E-, 激励负极)拧在一起,接到HX711模块的E-GND端子。这样,所有传感器共享同一个稳定的激励电源。
  2. 信号输出并联:将所有传感器的线(S+, 信号正极)拧在一起,接到HX711模块的A+端子。将所有传感器的绿线(S-, 信号负极)拧在一起,接到HX711模块的A-端子。这种并联接法,相当于将四个电桥的输出电压叠加平均,系统会自动将总重量平均分配到四个传感器上读取。
  3. HX711与Arduino连接
    • VCC-> Arduino5V
    • GND-> ArduinoGND
    • DT(Data) -> Arduino 数字引脚D3
    • SCK(Clock) -> Arduino 数字引脚D2
  4. LCD屏与Arduino连接
    • GND-> ArduinoGND
    • VCC-> Arduino5V
    • SDA-> ArduinoA4(在Uno上,A4是I2C的SDA)
    • SCL-> ArduinoA5(在Uno上,A5是I2C的SCL)

重要提示:屏蔽与接地。如果使用带屏蔽层的电缆,应将屏蔽层在HX711模块一端单点接地(连接到Arduino的GND)。不要在传感器端接地,避免形成地环路引入干扰。所有接线点务必牢固,推荐使用焊接或螺丝端子压接,避免使用杜邦线插接,后者在震动下容易接触不良。

4.2 电源管理与抗干扰措施

系统对电源噪声非常敏感。建议采取以下措施:

  • 使用线性稳压电源(LDO)或质量好的开关电源适配器,避免使用动力电网上噪声大的电源。
  • 在Arduino的5V输出和GND之间,靠近HX711模块的位置,并联一个100μF的电解电容和一个0.1μF的陶瓷电容,用于滤除低频和高频噪声。
  • 将整个电路(Arduino, HX711)放置在一个金属盒中,并将金属盒接地,可以起到屏蔽作用。

5. 软件编程与数据处理

5.1 Arduino程序框架与库文件

编程环境使用Arduino IDE。需要安装两个库:

  1. HX711库:用于驱动称重传感器模块,例如Bogde/HX711库。
  2. LiquidCrystal_I2C库:用于驱动I2C接口的LCD屏。

程序的主要逻辑流程如下:

#include <HX711.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> // 引脚定义 #define LOADCELL_DOUT_PIN 3 #define LOADCELL_SCK_PIN 2 // 初始化对象 HX711 scale; LiquidCrystal_I2C lcd(0x27, 16, 2); // 地址可能是0x3F,需用I2C扫描程序确认 // 全局变量 float weight = 0.0; float calibration_factor = -7050.0; // !!!这个值需要通过标定得到!!! void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); lcd.print("Initializing..."); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); scale.set_scale(calibration_factor); // 设置标定系数 scale.tare(); // 复位去皮,将当前重量设为0 lcd.clear(); lcd.print("Ready!"); delay(1000); } void loop() { if (scale.is_ready()) { // 读取多次取平均,提高稳定性 weight = scale.get_units(10); // 读取10次取平均值,单位取决于set_units // 简单的数字滤波:滑动平均滤波 static float filtered_weight = 0; float alpha = 0.2; // 滤波系数,越小越平滑,反应越慢 filtered_weight = alpha * weight + (1 - alpha) * filtered_weight; // 显示结果 lcd.clear(); lcd.setCursor(0, 0); lcd.print("Weight:"); lcd.setCursor(0, 1); lcd.print(filtered_weight, 1); // 显示一位小数 lcd.print(" kg"); // 同时输出到串口监视器,方便调试 Serial.print("Raw: "); Serial.print(weight); Serial.print(" | Filtered: "); Serial.println(filtered_weight); } delay(500); // 每0.5秒更新一次 }

5.2 传感器标定与校准流程

标定的目的是找到代码中的calibration_factor,使得ADC读数能正确转换为重量值。你需要一个已知重量的标准砝码(如10kg或20kg的杠铃片)。

  1. 预热与去皮:系统通电预热10分钟,让电子元件温度稳定。确保平台上无任何物品,在串口监视器中发送命令或按下预设按钮调用scale.tare()函数,将当前读数归零。
  2. 放置标准重量:将已知重量(例如known_weight = 20.0kg)的砝码平稳地放在平台中心位置。
  3. 计算标定系数
    • 读取此时HX711输出的原始单位读数(scale.get_units()返回的值,此时系数为1)。假设读数为raw_reading
    • 计算标定系数:calibration_factor = raw_reading / known_weight
    • 在我的系统中,一个典型的系数大约是 -7050(负号表示传感器受压时读数减小,这与接线方式有关)。
  4. 验证与微调:将计算出的系数填入程序中的calibration_factor,重新上传程序。移走砝码,看显示是否归零。再放上砝码,看显示是否接近20.0kg。如果有偏差,可以微调系数:新系数 = 旧系数 * (已知重量 / 当前显示重量)。重复几次直到准确。
  5. 多点标定(可选,用于更高精度):除了零点(0kg)和一个重物点,可以在量程中间再取一个点(如10kg)进行标定。使用更复杂的线性拟合公式weight = a * reading + b来计算两个系数ab,可以补偿传感器的非线性误差。

注意事项:标定物的选择。标定物必须已知精确重量。不建议用人体作为标定物,因为人的体重会因姿势、呼吸等细微变化。最佳选择是经过计量的标准砝码。如果没有,可以使用未开封的、标注重量准确的袋装大米或桶装水,并用精度较高的家用电子秤进行交叉验证。

6. 系统测试、优化与常见问题排查

6.1 性能测试与误差分析

搭建完成后,需要进行全面测试:

  1. 重复性测试:将同一重物(如20kg砝码)多次搬上搬下平台,记录每次的稳定读数。计算这些读数的标准差,评估系统的重复性误差。好的系统标准差应小于量程的0.1%。
  2. 线性度测试:使用多个不同重量的砝码(如5kg, 10kg, 15kg, 20kg),记录读数。绘制“实际重量-显示重量”曲线,观察其线性度。理想情况下应是一条斜率为1的直线。
  3. 偏载测试:将重物分别放在平台的四个角附近和中心位置,观察读数是否一致。如果差异较大,说明机械调平或传感器灵敏度一致性有问题,需要重新调平或考虑在软件中对每个传感器进行单独标定(需要多路HX711)。
  4. 长期稳定性测试:空载状态下,记录系统8小时或更长时间的读数漂移情况。温度变化是导致漂移的主因。

6.2 常见问题与解决方案速查表

在实际搭建和调试中,你几乎一定会遇到以下问题。这里是我的排查实录:

问题现象可能原因排查步骤与解决方案
读数跳动剧烈,不稳定1. 电源噪声大。
2. 机械结构松动或未调平。
3. 接线接触不良,特别是传感器线缆。
4. 外界振动干扰。
1. 检查电源,改用电池或优质适配器测试。
2. 用手轻推平台,检查是否有晃动,重新紧固所有螺丝并调平。
3. 检查所有接线点,特别是并联的节点,最好焊接。
4. 将系统移至稳固、无振动的台面,在软件中增加滤波强度(如增加平均次数,降低滤波系数alpha)。
空载时读数不为零,且缓慢漂移1. 传感器或HX711模块温度漂移。
2. 平台上有残留应力或结构蠕变。
3. 未执行“去皮”(Tare)操作。
1. 系统预热15-30分钟后再进行去皮操作。考虑在HX711模块上贴散热片。
2. 确保平台在空载时处于完全自由状态,无任何物体触碰。
3. 在程序初始化或通过按键触发scale.tare()
放上重物后显示负值传感器接线顺序错误。交换HX711模块上A+和A-的接线,或者交换所有传感器的S+和S-线。
显示重量与实际重量成比例,但数值不对标定系数 (calibration_factor) 不正确。严格按照第5.2节的流程重新标定。确保标定物重量准确,且放置位置在平台中心。
LCD屏不显示或乱码1. I2C地址不对。
2. 接线错误。
3. 对比度调节不当。
1. 运行I2C扫描程序查找LCD的正确地址。
2. 检查SDA、SCL是否接反。
3. 找到LCD屏背面的电位器,用小螺丝刀调整直到显示清晰。
加载后读数增加非常小或不变1. 传感器量程过大,形变太小。
2. 传感器安装错误,未正确受力。
3. HX711增益设置过低。
1. 检查传感器额定负载是否远大于实际重量,更换合适量程的传感器。
2. 检查传感器是否上下装反,或安装座是否卡死导致力无法传递。
3. 在HX711库中,检查set_gain()函数是否被正确调用,通常增益设为128。

6.3 高级功能扩展思路

基础系统完成后,可以考虑以下升级:

  • 数据记录与上传:增加一个SD卡模块或Wi-Fi模块(如ESP8266),将每次称重的数据连同时间戳保存下来,或上传到云端服务器,方便长期追踪体重变化曲线。
  • 自动识别与去皮:增加一个超声波或红外测距传感器,当检测到轮椅驶上平台后,自动启动称重流程,稳定后记录数据,并在检测到离开后自动清零。
  • 多用户管理:配合RFID读卡器,为不同使用者分配标签,系统能自动识别用户并将体重数据关联到个人档案中。
  • 结构优化:使用铝合金型材制作更轻便、坚固且美观的框架,并设计可折叠结构,便于收纳。

这个项目从构思到实现,最深的体会是:精度来自于每一个细节的掌控。无论是机械上的水平调节、电气上的电源净化,还是软件中的滤波算法,任何一个环节的疏忽都会在最终读数上被放大。它不仅仅是一个电子制作,更是一个涉及机械、电子、编程的综合性工程实践。当你看到LCD屏上稳定地显示出准确重量时,那种为解决实际问题而亲手创造工具的满足感,是无可替代的。最后一个小建议,在正式投入使用前,不妨用已知重量的物品多测试几天,并与家人常用的健康数据对比验证,确保系统长期稳定可靠,这样才能真正成为值得信赖的辅助工具。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询