机器人制作开源方案 | 可变式智能正姿椅

news2024/12/23 4:07:46

作者:吴菁菁 徐乐 张志强

单位:河海大学

指导老师:施敏虎 赵建华

一、作品简介

1. 作品介绍

       久坐本身及其导致的各种错误坐姿行为常常会引发一系列健康问题,不利于人体健康。

       椅子作为人在久坐状态下与人体接触时间最长的工具则成为了市场上矫正坐姿的首要产品。

       经过对市场上现有产品的对比研究发现,一个优秀的坐姿矫正椅应具备以下特点:

              1)通过新的提醒方式解决传统坐姿矫正椅警示效果不明显的问题;

              2) 打破常规,一椅多用,增加功能调节模式,提升座椅性价比和用户体验度;

              3)基于人机工程学设计追求座椅使用舒适度,同时结合青少年成长需求,合理延展座椅适用年龄段。

       据此,本作品进行了智能正姿椅的设计和研究,希望能为大家解决坐姿行为习惯养成的问题。

      本装置的设计目标是解决现有坐姿矫正产品功能单一、效果不明显、体验感不佳等问题。本作品由“变形金刚”得到灵感,打破思维定势,结合人机工程学原理,设计出了一款可以“变形”的智能椅,既能成为使用者坐姿矫正的好帮手,又能给使用者带来新鲜有趣的体验感。

      结构方面,该装置整体由四大部分构成:

             ① 椅面处一组联动式平行四边形机构;

             ② 椅背处一组联动式曲柄滑块机构;

             ③ 膝靠板处一组联动式平行四边形与曲柄滑块组合机构;

             ④ 椅面双侧齿轮传动剪叉式复合椅腿构成。

      机构①②③合称为对称式主轴联动机构,负责实现椅背倾角由90°至180°的变换以及膝靠板的收放功能;机构④通过齿轮传动实现两侧复合椅腿的角度开合,实现椅面升降与倾斜。

      控制方面,主要包括arduino开发板、电机、超声波传感器、蜂鸣器、压力传感器、触碰开关等。开发板是整个控制系统的中心,通过开发板对电机的控制,使得对称式主轴联动机构可以调整为不同的姿态,实现控制椅背以及膝靠板的角度变换。超声波传感器和压力传感器是监测模块的核心部分,蜂鸣器和电机是干预模块的响应部分。当两个超声波传感器检测到距离差大于设定值时,释放电信号,开发板根据程序及检测到的电信号,启动干预模块。同理,当压力传感器检测到持续压力时间超过设定值或两个压力传感器所测数值差大于设定值时,干预模块开启。触碰开关安装在座椅扶手两侧,当使用者按住开关时,开发板根据程序及检测到的电信号做出相应调整。

应用场景,可变式智能正姿椅旨在帮助“久坐族”和坐姿习惯不当的人群,如上班族,学生等,可用于办公室,自习室和居家环境等场景,有助于使用者养成健康行为习惯,避免脊柱健康问题等,同时可实现“一椅多用”。

      在制作过程中,小组成员用matlab对所需数据进行了分析,简化物理模型,用solidworks 进行了模型构建和关键零部件的静力分析,用 arduino 进行编程,控制电机、舵机等结构。本装置的物理模型由探索者套件搭建,并烧入程序进行调试,在调试中不断根据实际反馈结果优化结构设计。经过近两个月的制作与优化,团队制作出了物理样机,实现了预期功能。

设计流程图
可变式智能正姿椅实物图

2. 工作过程

2.1坐姿矫正过程

       该装置的矫正过程如下图所示,当产生错误坐姿时,监测系统发出电信号,单片机进行处理,并开启矫正过程,座椅两侧电机工作,带动齿轮传动及复合椅腿角度变换,从而使椅面高度改变,在一定程度上干扰使用者,达到提醒使用者矫正坐姿的目的。当监测系统检测到使用者重新坐好时,座椅椅面恢复正常。整个装置完成坐姿矫正功能。此外,当使用者按压触碰开关时产生持续电信号也可自主调整座椅高度。

椅面高度升降过程

2.2 模式变换过程

      该装置三种模式如下图所示,椅面为固定部分,舵机带动椅面处平行四连杆机构运动,从而带动与其前后两端固连的椅背和膝靠板机构运动,使椅背与膝靠板都能以椅面所在轴线旋转。同时,膝靠板处另设一舵机,控制曲柄滑块机构运动,实现膝靠板单独收放,该装置完成模式变化过程。

座椅三种模式展示

3. 创新点介绍

3.1功能创新

      ① 本装置采用基于压力传感器的人体坐姿识别测试方法对使用者的坐姿进行判断,该监测方法具有操作方便、稳定性高、准确率高、成本较低等优点。

      ② 本装置结合蜂鸣器警报以及椅面高度变化的强制干预功能,与传统提示相比,能够有效地实时干预使用者的错误坐姿,帮助使用者自觉养成健康的坐姿习惯。

      ③ 本装置提供了三种坐姿模式的选择,实现了一椅多用功能,同时可以自主调整座椅高度和椅背倾斜角度,满足不同使用者的需求。

3.2设计创新

      ① 采用剪叉式复合升降椅腿代替传统气压升降立柱。传统气压升降椅会由于零部件老化、产品质量欠佳以及使用习惯不正确发生爆炸,具有极大的安全隐患,在综合考量各种机构设计的优缺点后,本装置采用剪叉式复合椅腿完成座椅升降功能,经过实验和分析,该机构具有稳定性强、安全性能高等优点。  

      ② 采用对称式主轴联动机构实现椅背、膝靠板配合运动。为实现座椅三种模式的正常变换,本装置特地采用由平行四边形机构与曲柄滑块复合机构组成的对称式主轴机构,该设计具有运动平稳连续、操作方便等优点,能够较好地实现座椅仰躺式、膝靠式以及常规式三种模式的转变。

二、装置介绍

1. 机械结构总体规划设计

       本装置核心部分为对称式主轴联动机构,主要包括联动式平行四边形机构与曲柄滑块机构,该设计在一定程度上既确保了运动的流畅性,也保证了装置的稳定性;同时该装置摒弃传统的液压升降装置,创新椅腿结构化设计,采用齿轮传动搭载剪叉式复合椅腿的设计,通过变换复合椅腿开合角度实现座椅升降。

       具体研究步骤如下:

       ① 搜集资料分析各种机构优缺点,由装置具体功能确定各机构及其连接方式;

       ② 根据人机工程学及机构运动方程确定机构间角度变化范围;

       ③ 使用 Solidworks 软件,搭建装置模型,并进行运动仿真,确保各机构间运动互不干涉。

实物建模

1.1变换机构设计

      变换机构采用如下图所示的对称式主轴联动设计,可分为椅面、椅背和膝靠板三部分,包括椅面处平行四边形机构,椅背处曲柄滑块机构与膝靠板处平行四边形机构与曲柄滑块组合机构。若机构存在死点位置,则该处的驱动力对从动件有效回转力矩为零,会对连续传动产生阻碍,从而影响装置运动的流畅性。由于本装置采用的平行四边形机构属于双曲柄机构,无死点位置,故仅需考虑两处曲柄滑块处的死点位置。当曲柄连杆与滑块行程轨迹共线时形成死点位置,但通过规定角度范围,已有效避免机构到达死点位置。

对称式主轴联动结构实物图

1.2 矫正机构设计

      矫正机构主要由椅面两侧齿轮传动搭载剪叉式复合椅腿构成,如下图所示。该设计结合

      剪叉式升降机构和开合式机械爪模型,采用“X”形复合椅腿设计。“X”形椅腿由腿1、腿2组成,上端分别与齿轮轴相连,下端与滚轮相连,确保流畅度与稳定性。电机控制齿轮传动,带动“X”角度变换,从而控制椅面升降。通过椅面升降这一行为干预措施达到提醒使用者矫正坐姿目的。

剪叉式复合椅腿模型图

2. 监测模块设计

      本作品采用基于压力传感器的人体坐姿识别测试方法来监测使用者的不同坐姿状态,并以此判断错误坐姿。具体研究步骤如下:

      ① 将人与椅面接触部分简化为“两点一线”,即两个坐骨接触点和一条脊柱线段,如下图所示:

简化物理模型

② 根据简化物理模型,在椅面坐骨两点处分别安装压力传感器,在椅背处脊柱线段对应的上下两点分别安装超声波传感器,如下图所示:

传感器安装位置

③ 收集不同错误坐姿下对应的传感器数据,并用 matlab 对所得数据进行拟合分析;

④ 编写程序,设定传感器响应范围,确保在错误坐姿发生时,传感器能够发生电信号,并由单片机进行下一步工作,到此监测系统设计完成。

监测模块系统框图

3. 人机工程学设计

       为给使用者带来更好的舒适性体验,本设计结合人机工程学原理与使用群体特征,对座椅各方面尺寸指标进行了分析与研究。

      ① 座椅高度:研究表明,为避免大腿下有过高的压力,座位前沿到地面或脚踏的高度不应大于脚底到大腿膝盖的距离。对于青少年而言,椅面高度可调范围以38~45cm为宜,并且应设计为可调整式, 以适应不同用户的身体尺寸。

      ② 椅面宽度:椅面宽度以38~48cm为宜。对于有扶手的座椅, 应以扶手的内宽作为座宽的尺寸, 一般不应小于47cm。

      ③ 椅面倾角一般情况下,座面倾角越大,下肢肌肉受力就越小,疲劳度也越小。但学习用椅的倾角不能太大, 一般4~5°为宜。

      ④ 座椅靠背:靠背设计的主要目的是为脊柱提供稳定的支承, 放松背肌, 使椎间盘接近正常受力状态。就人体脊柱形状而言, 为使脊柱接近于自然的S形生理曲度,靠背角度115°左右为最佳。

座椅尺寸参考表

4. 静力学分析

      在solidworks进行建模,并使用其中的simulation模块对模型部分部件进行强度校核。本节中校核的零部件考虑到质量和强度的问题,均采用合金钢材料。弹性模量为2.1e+11N/m^2,质量密度为7700kg/m^3,中泊松比为0.28。具体操作步骤为:

      ① 在 solidworks 内建立模型,打开solidworks中的simulation模块;

      ② 对模型进行网格划分;

      ③ 对模型添加约束;

      ④ 对模型添加应力;

      ⑤ 进行仿真,得出应力分布云图。

椅面应力分布云图
椅腿杆应力分布云图
齿轮应力分布云图

      椅面、椅腿、齿轮的应力分布云图如上所示,当根据人体较大体重添加至2000N时,通过云图可以看出这三部分均无应力破坏现象,符合工作条件。由此可知,根据人体质量当添加较大重力时,其应力变化均在承受载荷所允许的范围内,因此该作品设计满足正常的使用需求。

三、程序代码

1. 示例程序

#include <Servo.h>

Servo myservo1;   // create servo object to control a servo

Servo myservo2;

Servo myservo3;

Servo myservo4;

// a maximum of eight servo objects can be created

const int TrigPin1=A1;       //设置发射脚位

const int EchoPin1=A0;      //设置接收脚位

const int TrigPin2=A5;       //设置发射脚位

const int EchoPin2=A4;      //设置接收脚位

float cm1;                 //浮点型数据类型(加小数点,提高精准度)

float cm2;

int i;

int key=0;

int flag=1;

int tang=1;

int pos = 0;    // variable to store the servo position


void setup()

{

  Serial.begin(9600);

  pinMode(TrigPin1,OUTPUT);

  pinMode(EchoPin1,INPUT);

  pinMode(TrigPin2,OUTPUT);

  pinMode(EchoPin2,INPUT);

  pinMode(A2,INPUT);

  pinMode(A3,INPUT);

  pinMode(7,INPUT);

  pinMode(3,INPUT);

//   pinMode(8,INPUT);

  myservo1.attach(4);   // attaches the servo on pin 9 to the servo object

  myservo2.attach(12);  

  myservo3.attach(8);

  myservo4.attach(11);

}



void loop()

{

  while(digitalRead(7)==LOW)

  {

    while(digitalRead(A2)==LOW)

    {                         // in steps of 1 degree

      myservo1.write(pos);   

      myservo2.write(50-pos);      // tell servo to go to position in variable 'pos'

      delay(75);                       // waits 15ms for the servo to reach the position

      pos+=1;  

      if(pos==50)

      {

        pos-=1;

      }

    }

    while(digitalRead(A3)==LOW)

    {  

      myservo1.write(pos);

      myservo2.write(50-pos);       // tell servo to go to position in variable 'pos'

      delay(75);                       // waits 15ms for the servo to reach the position

      pos-=1;  

      if(pos==0)

      {

        pos+=1;

      }

    }

  }

  while(digitalRead(7)==HIGH)

  {

    if(digitalRead(A2)==LOW)//guishi  

    {

      if(flag==1)

      {

        for(i=50;i<200;i++)

        {

          myservo3.write(i);

          delay(100);

        }

      }

      else

      {

        for(i=200;i>50;i--)

        {

          myservo3.write(i);

          delay(100);

        }

      }

      flag*=-1;

      delay(500);

    }

    if(digitalRead(A3)==LOW)

    {

      if(tang==-1)

      {

        for(i=0;i<200;i++)

        {

          myservo4.write(i);

        }

      }

      else

      {

        for(i=200;i>0;i--)

        {

          myservo4.write(i);

          delay(100);

        }

      }

      tang*=-1;

      delay(500);

    }

    digitalWrite(TrigPin1,LOW);        //用低高低电平发送脉冲给Trigpin引脚

    delayMicroseconds(2);             //微秒级延时

    digitalWrite(TrigPin1,HIGH);

    delayMicroseconds(10);

    digitalWrite(TrigPin1,LOW);

    cm1=pulseIn(EchoPin1,HIGH)/58.0;    //读取脉冲宽度,换算成厘米


    digitalWrite(TrigPin2,LOW);

    delayMicroseconds(2);

    digitalWrite(TrigPin2,HIGH);

    delayMicroseconds(10);

    digitalWrite(TrigPin2,LOW);

    cm2=pulseIn(EchoPin2,HIGH)/58.0;

    //Serial.print(cm2-cm1);                 //显示距离

    //Serial.print("cm");               //显示单位

    //Serial.println();                 //回车

    Serial.print(key);

    Serial.println();

    if( cm1<30 && cm2<30 )

    {

      if(cm2-cm1<-5||cm2-cm1>5)key+=1;

      else key-=1;

      if(key>5)

      {

        for(i=pos ; i < 50; i += 1)   // goes from 0 degrees to 180 degrees

        {                                  // in steps of 1 degree

          myservo1.write(i);              // tell servo to go to position in variable 'pos'

          myservo2.write(50-i);

          delay(15);                       // waits 15ms for the servo to reach the position

        }

        for(i = 50; i>=1; i-=1)     // goes from 180 degrees to 0 degrees

        {                               

          myservo1.write(i);

          myservo2.write(50-i);           // tell servo to go to position in variable 'pos'

          delay(15);                       // waits 15ms for the servo to reach the position

        }

        for(i=0 ; i <= pos; i += 1)   // goes from 0 degrees to 180 degrees

        {                                  // in steps of 1 degree

          myservo1.write(i);

          myservo2.write(50-i);           // tell servo to go to position in variable 'pos'

          delay(15);                       // waits 15ms for the servo to reach the position

        }  

        key-=1;

      }

      else if(key<=0)

      {

        key+=1;

      }

      delay(1000);

    }

  }

}

程序源代码及模型3D文件资料详见 可变式智能正姿椅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/801113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity实用插件篇】| A* Pathfinding Project - A*寻路插件 的使用教程

前言【Unity实用插件篇】| A*寻路插件学习使用一、A*算法 简述二、A* Pathfinding Project 介绍2.1 A* Pathfinding Project 功能2.2 相关链接2.3 标准版和Pro版区别2.4 A* Pathfinding Project Free与Navigation的对比三、快速搭建一个自己的场景测试寻路3.1 寻路场景搭建3.2 …

大型系统的任务调度模块实现思路

产品需求&#xff1a;需要一个任务调度模块&#xff0c;用户可以通过页面去新建任务&#xff0c;任务主要就是定时发送邮件&#xff0c;或者每周几去发送邮件&#xff0c;用户可以自定义发送的规则&#xff0c;且用户可以暂停任务、删除任务&#xff0c;也能知道任务的执行情况…

查找-多路查找详解篇

多路查找树 多路查找树&#xff08;Multway Search Tree&#xff09;是一种高级的树形数据结构&#xff0c;它 允许每个节点有多个子节点&#xff08;通常大于等于2&#xff09;。多路查找树的每个节点 可以存储多个关键字和对应的值。分类 2-3树&#xff08;2-3 Tree&#x…

红队打靶,红日系列,红日靶场5

文章目录 靶场详情外网渗透端口扫描漏洞发现与利用获取shell 内网渗透提权内网信息收集 横向移动上线msf路由转发与代理通道Psexec 攻击 靶场详情 此次靶场虚拟机共用两个&#xff0c;一个外网一个内网&#xff0c;用来练习红队相关内容和方向&#xff0c;主要包括常规信息收集…

Eurographics 2023最新综述:图形学中的神经-符号模型

随着 CVPR 2023 Best Paper 的公布&#xff0c;其中一篇名为 VISPROG 的工作引起了广泛关注。这项工作利用自然语言指令解决复杂且组合性的视觉任务&#xff0c;重新将神经-符号方法带回了人们的视野&#xff0c;并证明了计算机视觉社区对这种方法的认可。实际上&#xff0c;VI…

Unity自定义后处理——用偏导数求图片颜色边缘

大家好&#xff0c;我是阿赵。   继续介绍屏幕后处理效果的做法。这次介绍一下用偏导数求图形边缘的技术。 一、原理介绍 先来看例子吧。   这个例子看起来好像是要给模型描边。之前其实也介绍过很多描边的方法&#xff0c;比如沿着法线方向放大模型&#xff0c;或者用Ndo…

数据结构和算法——排序算法的比较和排序综测测验

目录 排序算法的比较 排序综合测验 快又稳定 元素错位 有序排序 排序结果 排序算法的比较 排序方法平均时间复杂度最坏情况下时间复杂度额外空间复杂度稳定性简单选择排序不稳定冒泡排序稳定直接插入排序稳定希尔排序不稳定堆排序不稳定快速排序不稳定归并排序稳定基数排…

SCT2632——65V输出3A非同步整流DCDC转换器

SCT2632是一款3A降压转换器&#xff0c;具有宽输入电压&#xff0c;从4.2V到60V&#xff0c;集成了220mΩ高压侧MOSFET。SCT2632采用峰值电流模式控制&#xff0c;支持脉冲跳过调制&#xff08;PSM&#xff09;&#xff0c;以帮助转换器在轻负载或待机状态下实现高效率条件。SC…

矿用人员定位系统在矿山事故预防中的效果评估

矿业行业的高风险和复杂环境使得采矿安全成为一项重要的挑战。为了保障矿工的安全并减少事故风险&#xff0c;矿用人员定位系统成为了关键技术之一。 在这篇文章中&#xff0c;华安联大便和大家各位朋友一起探讨矿用人员定位系统的重要性、工作原理、作用&#xff0c;并通过真…

Packet Tracer - 配置和验证 NTP

Packet Tracer - 配置和验证 NTP 地址分配表 设备 接口 IP 地址 子网掩码 N1 NIC 209.165.200.225 255.255.255.0 R1 G0/0 209.165.200.226 255.255.255.0 R2 G0/0 209.165.200.227 255.255.255.0 目标 在本练习中&#xff0c;您将在 R1 和 R2 中配置 NTP 以…

苍穹外卖day07——缓存菜品套餐+购物车功能实现

缓存菜品——需求设计与分析 问题说明 用户访问量过大带来的一个直接效果就是响应速度慢&#xff0c;使用体验下降。 实现思路 使用redis缓存菜品数据&#xff0c;减少数据库查询操作。 页面展示上基本就是同一个分类在同一页&#xff0c;所以key-value结构可以使用不同的分…

【SQL应知应会】表分区(二)• Oracle版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分区表 • Oracle版 前言一、分区表1.什么是表分区…

富文本编辑器wangEditor初探

1、前言 现有的Quill比较简单&#xff0c;无法满足业务需求&#xff08;例如SEO的图片属性编辑需求&#xff09; Quill已经有比较长的时间没有更新了&#xff0c;虽然很灵活&#xff0c;但是官方demo都没有一个。 业务前期也没有这块的需求&#xff0c;也没有考虑到这块的扩展…

如何提高代码效率——时间复杂度与空间复杂度——【C语言】

当我们面对一个问题时&#xff0c;会有许多种解题思路。我们现在的计算机技术已经达到非常先进的地步&#xff0c;所以当我们用不同的方法对待问题时&#xff0c;时间差异不会很明显&#xff0c;内存差异我们一般在平常小问题时感受不到&#xff0c;所以我们不会去纠结程序的优…

基于ssm+mysql+html道路养护管理系统

基于ssmmysqlhtml道路养护管理系统 一、系统介绍二、功能展示1.道路信息管理2.损害类型信息管理3.损害类型信息管理4.评定等级信息管理5.日常巡查信息管理6.定期检查信息管理 四、获取源码 一、系统介绍 系统主要功能&#xff1a;道路信息管理、损害类型信息管理、评定等级信息…

VSCode SSH远程连接与删除

1.ubuntu设置 安装SSH服务并获取远程访问的IP地址 在Ubuntu系统中&#xff0c;“CtrlAltT”打开终端工具&#xff0c;执行如下命令安装SSH服务。 sudo apt-get install openssh-server如果安装失败则先安装依赖项。 2.VS Code 设置 2.1安装与设置Remote SSH 打开Windows系…

今天,我被二维码卷到了...

# 关注并星标腾讯云开发者# 每周4 | 鹅厂一线程序员&#xff0c;为你“试毒”新技术# 第1期 | 腾讯王锐&#xff1a;测评二维码艺术画生成体验 都说AI绘画来势汹汹&#xff0c;但论创意&#xff0c;还是人类玩得花&#x1f92b;。下面这几张乍一看平平无奇、却在网上疯传的AI生…

rcu链表综合实践

基础知识 rcu-read copy update的缩写。和读写锁起到相同的效果。据说牛逼一点。对于我们普通程序员&#xff0c;要先学会使用&#xff0c;再探究其内部原理。 链表的数据结构&#xff1a; struct list_head {struct list_head *next, *prev; };还有一种&#xff1a;struct h…

自建纯内网iot平台服务,软硬件服务器全栈实践

基于以下几个考虑&#xff0c;自制硬件设备&#xff0c;mqtt内网服务器。 1.米家app不稳定&#xff0c;逻辑在云端或xiaomi中枢网关只支持少部分在本地计算。 2.监控homeassistant官方服务有大量数据交互。可能与hass安装小米账户有关。 3.硬件&#xff1a;原理图&#xff0c;l…

apifox 调用camunda engine-rest接口报错“type“: “NotFoundException“

官方文档在这&#xff1a; https://docs.camunda.org/rest/camunda-bpm-platform/7.19/ 现象 engine-rest本是可以直接请求的&#xff0c;我把openapi导入到apifox之中了&#xff0c;我测试一下接口没有能请求成功的&#xff0c;基本都报以下的错。 报错如下 {"type&qu…