作者:周文亚、胡冲、王晓强、张娟
单位:北方民族大学
指导老师:马行、穆春阳
1. 场景调研
新型冠状病毒肺炎全球流行已近三年,其变异毒株不断增强的传播力同时其症状不断变轻,其中无症状(怎么确认是否被感染)导致人们产生放轻松“躺平”还是严控疑虑的心理交织。新型冠状病毒核酸检测结果是能够准确和迅速的识别感染个体,防止新型冠状病毒传播,落实四个早的重要措施。如今疫情反复、感染范围广、防控难度高,规范、高效地开展新型冠状病毒核酸检测是做好疫情防控的前提。医护检测人员数量有限、检测时间集中在几小时之内、而且大多数核酸检测点都是临时搭建,医护人员也是紧急召集调整,任何时间都会听从安排展开核酸检测。不仅如此小区居民排队造成近距离接触;采样时必须去掉口罩,有时还要求“啊”,采样间隔时间很短,造成局部采样空间病毒可能富集,对采样人员和被采人员都增加感染几率;工作人员和志愿者工作量大,手部消毒、取棉签、采样、掰断棉签、放进试管、旋上盖。这是核酸检测医务人员每天要重复无数遍的循环动作;应检尽检。穿防护服很辛苦,对温度的感知更低,疲惫容易使得医护人员采样时采样效率降低,被采样时就能感受到他们的疲惫。对于行走不便人员下楼采样存在困难。为降低工作人员以及未感染人员的感染病毒风险, 提高核酸检测质量通过无人采样核酸机器人的全自动化操作,从取棉签、到咽拭子采集、拧试管短短几十秒内,一次核酸采样即可完成。不惧高温、严寒,且精确度高,即使每天都在做重复性的工作,也不会感到劳累。相比人工采样,利用机器人核酸采样技术,可以保证每次采样全程动作精准、规范,实现减少了医务人员高风险暴露,缓解了医务人员短缺问题的同时,提高了工作效率,节约了医疗资源。
2. 设计思想
本作品设计的核酸检测辅助机器人是以探索者组件来进行搭建的,以Arduino作为平台的开发板进行控制设计的,模拟真实核酸检测场景作业。这个机器人设计的核心是自动做核酸采样和平台的自主移动,它可以自主移动到需要做核酸的检测点,然后在医护人员及志愿者的辅助下,独立自主的完成核酸采集工作,降低了核酸检测时候出现交叉感染,减少了医护人员的负担,减缓了医护人员短缺的现象,符合当今社会的发展,具有重要的深挖价值。
3. 机器人本体技术路线说明
本作品的表面设计图如下所示,由两个按键模块,两个消毒模块,试管瓶子和瓶盖的放置位置,一个六自由度用舵机搭建的采样机器臂,两个触须模块,两个超声波测距模块,然后使用开发板的串口与移动平台通讯。
作品的底部设计图如下所示,采用四个步进电机,四个麦克纳姆轮连接组成,然后利用两层连接柱架高地盘,使小车的通行能力大大提升。
4. 系统框图模块分析
本参赛作品主要分为核酸辅助检测和移动平台两大部分组成,总框图如下所示。核酸辅助检测部分为首先医护人员每次采样后通过消毒按键为自己手部和机械臂进行消毒,然后把棉签放入机器臂的末端后按下核酸检测按键来控制机械臂进行核酸采样,机械臂把采样后的棉签放入试管盒中,然后回到初始位置进行下一次采样。移动平台是为了增强机器人的活动性,方便性和智能性而设计,在机器人进行自主移动时,通过超声波测距模块和触须测高模块进行避障。
4.1 机器人消毒模块
本模块为了在核酸检测过程中对医护人员和核酸采样人员进行保护,避免交叉感染而设计,分为医护人员核酸采样手部消毒和每次采样后机器臂末端,采样区间消毒两部分消毒。通过一个按键作为触法源,一个自由度的机器臂为医护人员进行消毒,两个自由度的机器臂为采样后机器臂末端和采样区间进行消毒。其程序流程图如下所示:
4.2 机器人核酸采样模块
核酸采样模块首先医护人员把棉签放入六自由度的机器臂的末端夹持器里,然后按下采样按键,机械臂末端先夹持住棉签,然后移动到采样区域,再进行核酸采样,采样过后移动到存放采样棉签的试管瓶口的上端,夹持器放下棉签到试管里,最后移动到初始的位置进行下一次采样,程序流程图如下所示:
4.3 机器人超声波测距避障模块
在移动平台的前端左右两边均匀的安装两个超声波测距模块,若检测到超声波模块的距离会导致平台发生碰撞时,再检测两个超声波模块哪一个会发生碰撞,若检测到右边的会发生碰撞,则小车往左避障,若检测到左边的会发生碰撞,则小车往右避障。若两个超声波模块都检测到会发生碰撞,小车先执行左避障程序,若不能避障,再执行右边避障程序, 程序流程图如下所示:
4.4 机器人触须测高避障模块
在移动平台的前端左右两边均匀的安装两个触须测高模块,若检测到触须模块的高度会导致平台发生碰撞时,再检测两个触须模块哪一个会发生碰撞,若检测到右边的会发生碰撞,则小车往左避障,若检测到左边的会发生碰撞,则小车往右避障。若两个触须模块都检测到会发生碰撞,小车先执行左避障程序,若不能避障,再执行右边避障程序, 程序流程图如下所示:
5. 示例程序
消毒程序代码
int a=0,b=0,c=0;
#define ECHOPIN A0
#define TRIGPIN A1
#include <Servo.h>
Servo servo_pin_4;
Servo servo_pin_7;
Servo servo_pin_11;
void setup()
{
Serial.begin(9600);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
servo_pin_4.attach(4);
servo_pin_4.write( 160);
servo_pin_7.attach(7);
servo_pin_7.write( 50);
servo_pin_11.attach(11);
servo_pin_11.write(90);
delay(300);
}
void loop()
{
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
float distance = pulseIn(ECHOPIN, HIGH);
Serial.println(distance);
if(0<distance)
{
int a=160;b=50;c=90;
servo_pin_4.write(a);
servo_pin_7.write(b);
servo_pin_11.write(c);
for(a=160;a>=100;a-=1)
{servo_pin_4.write(a);delay(30);}
for(a=100;160<=a;a+=1)
{servo_pin_4.write(a);delay(30);}
for(b=50;b>=20;b-=1)
{servo_pin_7.write(b);delay(30);}
for(c=90;c>=20;c-=1)
{servo_pin_11.write(c); delay(30);}
for(b=20;50<=b;b+=1)
{servo_pin_7.write(b);delay(30);}
for(c=20;90<=c;c+=1)
{servo_pin_11.write(c); delay(30);}
delay(100);
}
}
机器臂核酸采样代码
int a=0,b=0,c=0,d=0,e=0;
#define ECHOPIN A0
#define TRIGPIN A1
#include <Servo.h>
Servo servo_pin_4;
Servo servo_pin_7;
Servo servo_pin_11;
Servo servo_pin_3;
Servo servo_pin_8;
void setup()
{
Serial.begin(9600);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
servo_pin_4.attach(4);
servo_pin_4.write( 120);
servo_pin_7.attach(7);
servo_pin_7.write( 90);
servo_pin_11.attach(11);
servo_pin_11.write(90);
servo_pin_3.attach(3);
servo_pin_3.write( 100);
servo_pin_8.attach(8);
servo_pin_8.write(90);
delay(300);
}
void loop()
{
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
float distance = pulseIn(ECHOPIN, HIGH);
Serial.println(distance);
if(0<distance)
{
int a=120;b=90;c=60;d=100;e=90;
servo_pin_4.write(a);
delay(200);
servo_pin_7.write(b);
delay(200);
servo_pin_11.write(c);
delay(200);
servo_pin_3.write(d);
delay(200);
servo_pin_8.write(e);
delay(200);
//1;夹面棉签
for(d=100;d<=120;d+=1)
{servo_pin_3.write(d);delay(30);}
//2;做核酸口预设位置
delay(200);
for(a=120;a>=35;a-=1)
{servo_pin_4.write(a);delay(30);}
//3:接近测试口
delay(200);
for(b=90;b>=80;b-=1)
{servo_pin_7.write(b);delay(30);}
//4;采集
delay(200);
for(a=35;a<=45;a+=1)
{servo_pin_4.write(a);delay(60);}
delay(200);
for(a=45;a>=35;a-=1)
{servo_pin_4.write(a);delay(60);}
//5;返回接近测试口
delay(200);
for(b=80;b<=100;b+=1)
{servo_pin_7.write(b);delay(30);}
//6;移动核酸管上口
delay(200);
for(a=35;a<=105;a+=1)
{servo_pin_4.write(a);delay(30);}
delay(200);
for(b=100;b>=60;b-=1)
{servo_pin_7.write(b);delay(30);}
delay(200);
for(c=60;c<=100;c+=1)
{servo_pin_11.write(c);delay(30);}
delay(1000);
//7:放下棉签
for(d=120;d>=100;d-=1)
{servo_pin_3.write(d);delay(30);}
delay(200);
for(b=60;b<=90;b+=1)
{servo_pin_7.write(b);delay(30);}
delay(200);
for(c=90;c>=60;c-=1)
{servo_pin_11.write(c);delay(30);}
//8:回到初始的点
delay(200);
for(a=105;a<=120;a+=1)
{servo_pin_4.write(a);delay(30);}
delay(100);
}
}
6. 作品创新点
① 避免了核酸采样医护人员和广大人民群众在新冠肺炎在核酸采样时遭受交叉感染。
② 减少了核酸采样医护人员的体力负担。
③ 此机器人对核酸检测工作人员的医护职业水平要求不高,操作不仅简单,而且很容易上手,缓解了核酸采样医护人员短缺的尴尬局面。
④ 采用自主移动平台增加了机器人活动性和便利性,可以在任何地方,任何场地进行核酸采样。
7. 作品难点及解决方案
难点一:机械臂怎样对人进行采样
解决方案:通过先接近,再接近,后采样的策略,本设计采用定点采样,做核酸人员通过一次性采样嘴再机器人采样口等待核酸采样,然后机械臂先接近采样口,再接近人的口腔,最后进行核酸采样。
难点二:移动平台的移动
解决方案:通过PID对四个轮子进行差速控制,进而控制移动平台的前后,左右转向移动。
难点三:两个控制板之间的通讯
解决方案:通过串口通讯来对两个控制板进行数据的传输。
更多详情请见:【S047】核酸检测辅助机器人