作者:陳毅豪 張植銅 羅郡 馬鑫龍 王丹晶
單位:西安外事學(xué)院
指導(dǎo)老師:陳小虎 杜喜
一、產(chǎn)品說明
1.1 目的及意義
? ? ? 消毒是疫情防控工作中的重要一環(huán),傳統(tǒng)的消毒方式需要人工操作消毒設(shè)備,不僅工作量大,且一些消毒劑會對人體造成傷害,消毒機器人便成了代替人工的不二之選,因此開發(fā)一款能夠搭載多種消毒設(shè)備的消毒機器人控制系統(tǒng)對疫情防控具有重要意義。
1.2 研究背景
? ? ? 以當(dāng)下疫情大環(huán)境為背景,在智能化設(shè)計理念的指導(dǎo)下展開設(shè)計研究?,F(xiàn)有的消毒方式大多采用人工消毒,需要消毒人員做好防護后才能進入消毒區(qū)進行消毒,人工消毒的工作區(qū)域大,工作強度高,且在人流量大的區(qū)域需要每天進行多次消毒,增加了工作人員的感染風(fēng)險。旨在用于替換傳統(tǒng)的人工消毒模式,將消毒功能賦予智能化機器人,同時將人工消殺死角及環(huán)境監(jiān)測考慮在內(nèi),進行設(shè)計實踐。
1.3難題與解決方法
? ? ? 難題:自2019年末新冠肺炎疫情暴發(fā)以來便迅速席卷全球,新型冠狀病毒極強的傳染性使得全世界人民的生命和健康面臨著巨大的風(fēng)險,目前我國疫情防控工作已從應(yīng)急狀態(tài)轉(zhuǎn)為常態(tài)化管理,但全球新冠肺炎疫情防控形勢依然嚴(yán)峻復(fù)雜。境外輸入病例、無癥狀感染者、變異毒株都在挑戰(zhàn)我國的疫情防控工作,在傳染病預(yù)防階段,對可能受到病原微生物污染的場所和物品進行消毒是阻斷病毒傳播的重要技術(shù)手段。
? ? ? 解決方法:通過對車站等有效地阻斷公共場合的預(yù)防性消毒,能夠有效的阻斷疫情的傳播途徑,降低新冠病毒的接觸性傳播以及氣溶膠傳播所造成的感染。研究著眼于疫情背景下人流密集地的消毒工作,用智能消毒機器人來取代人工消毒作業(yè),確保人員的健康安全。提升人流密集地的消毒效率和殺菌率,使得各個環(huán)境的工作運行效率大大增加,更進一步的減小了疫情在人流密集地傳播的可能。
二、機械結(jié)構(gòu)設(shè)計
2.1 機械結(jié)構(gòu)設(shè)計及建模
? ? ? 通過實地考察來分析人流密集地消毒環(huán)境,并在傳統(tǒng)消毒機器人的基礎(chǔ)上進行場景的細分處理,通過測量地面與座椅、座椅與扶手的距離來進一步確定智能消毒機器人的工作狀態(tài),并根據(jù)人流密集地內(nèi)空間數(shù)據(jù),探究智能消毒機器人的行走模式。利用模塊化設(shè)計,整合功能與結(jié)構(gòu),并分析其安全性。
2.2 創(chuàng)新點
? ? ? 本小組所制作的消毒防疫機器人同時具備噴霧和紫外線消殺兩種功能,并且因室內(nèi)兼顧室外進行消毒殺菌,小組成員采用可拆卸組裝式底盤,室內(nèi)消毒殺菌采用輪式底盤,室外消毒殺菌則采用履帶式底盤。
三、總體設(shè)計
3.1 動力設(shè)計
? ? ? 通過對現(xiàn)有消毒形式進行調(diào)研分析,了解其在運作中存在的問題,結(jié)合現(xiàn)有消毒機器人工作狀態(tài)以及執(zhí)行特定化場景任務(wù)來進行優(yōu)化。采用模塊化設(shè)計法和限量性結(jié)構(gòu)變化法,進行大量廣泛的資料收集與實地調(diào)研,分析現(xiàn)有消毒機器人的優(yōu)劣勢,并從中分析未來發(fā)展趨勢。
3.2 機器人控制系統(tǒng)設(shè)計
? ? ? 機器人采用1個超聲波傳感器用于對前方障礙物進行識別感知,4個電機實現(xiàn)底盤的驅(qū)動,3個舵機用于消殺執(zhí)行機構(gòu)的驅(qū)動。超聲波傳感器連接STM32系統(tǒng)擴展板的傳感器區(qū)A0、A1引腳,4個電機分別連接擴展板的X、Y、Z和A接口,3個舵機連接到擴展板的3、4和7引腳??刂葡到y(tǒng)軟件采用Arduino進行C語言編程。
感知與控制軟件流程圖如下所示:
四、制作過程
1. 二維圖紙繪制


2. 三維繪圖成像
2. 現(xiàn)場組裝制作
4. 整體裝配與調(diào)試
五、應(yīng)用前景
隨著機器人技術(shù)的迅猛發(fā)展,醫(yī)用領(lǐng)域早已出現(xiàn)了機器人的身影,防疫消毒機器人雖有所發(fā)展,但發(fā)展緩慢,各公司研發(fā)動力不足。直到疫情暴發(fā)以來,為降低人工消毒的勞動強度及交叉感染風(fēng)險,解決前線醫(yī)護人員不足等問題,用消毒機器人替代人工,在醫(yī)院、戶外等場所從事消毒工作,使得醫(yī)院對消毒機器人的需求迅速增加,各國開始加大了對醫(yī)用服務(wù)型機器人的研發(fā)力度。文章來源:http://www.zghlxwxcb.cn/news/detail-781095.html
六、示例程序
#include<Servo.h>
#define SERVO_SPEED 40 ? ? ? ? ? ? ? ? ?//定義舵機轉(zhuǎn)動快慢的時間
#define SERVO_SPEED1 1
#define SERVO_SPEED_WalkForward_low 10 ? //設(shè)定前進的慢速動作
#define SERVO_SPEED_WalkForward_high ? 40 //設(shè)定前進的快速動作
#define SERVO_SPEED_WalkBack_low 10 ? ? ?//設(shè)定慢速的后退動作
#define SERVO_SPEED_WalkBack_high ? 5 ? ? //設(shè)定快速后退的動作
#define SERVO_SPEED_Right_low 6 ? ? ? ? ?//設(shè)定慢速右轉(zhuǎn)動作時間
#define SERVO_SPEED_Right_high ? 4 ? ? ? ?//設(shè)定快速右轉(zhuǎn)動作時間
Servo myServo[3]; ? ? ? ? ? ? ? //定義3個舵機
int f = 30; ? ? ? ? ? ? ? ? ? ? //定義舵機每個狀態(tài)間轉(zhuǎn)動的次數(shù),以此來確定每個舵機每次轉(zhuǎn)動的角度
int servo_port[3] = {3,4,7}; ? ? ? ? ? ? ? ? ? ? ?//定義舵機引腳
int servo_num = sizeof(servo_port) / sizeof(servo_port[0]); ? ? //定義舵機數(shù)量
float value_init[8] = {1650,1300,2400}; //定義舵機初始角度
int Judge=0;
int GetIntData=0;
const int xdirPin = 44; ? // 方向引腳
const int xstepPin = 45; // 步進引腳
const int ydirPin = 32; ? // 方向引腳
const int ystepPin = 33; // 步進引腳
const int zdirPin = 42; ? // 方向引腳
const int zstepPin = 43; // 步進引腳
const int adirPin = 30; ? // 方向引腳
const int astepPin = 31; // 步進引腳
const int STEPS_PER_REV =200;
#define ECHOPIN A0
#define TRIGPIN A1
void setup() {
//超聲波傳感器設(shè)置
?pinMode(TRIGPIN, OUTPUT);
?pinMode(ECHOPIN, INPUT);
//底盤設(shè)置
?pinMode(8,OUTPUT);
?pinMode(xstepPin,OUTPUT);
?pinMode(xdirPin,OUTPUT);
?pinMode(ystepPin,OUTPUT);
?pinMode(ydirPin,OUTPUT);
?pinMode(zstepPin,OUTPUT);
?pinMode(zdirPin,OUTPUT);
?pinMode(astepPin,OUTPUT);
?pinMode(adirPin,OUTPUT);
//執(zhí)行器舵機設(shè)置
?for(int i=0;i<servo_num;i++)
?{
? ? ? ServoGo(i,value_init[i]); ? //使能舵機并賦予初始角度
? ?}
}
void loop() {
?//超聲波測距
?//以下代碼為計算超聲波測距傳感器進行測距并計算,返回距離的單位為cm
?//Serial.begin(9600);
?digitalWrite(TRIGPIN,LOW); ?
?delayMicroseconds(2);
?digitalWrite(TRIGPIN,HIGH);
?delayMicroseconds(10);
?digitalWrite(TRIGPIN,LOW);
?float distance=pulseIn(ECHOPIN,HIGH);
?distance=distance/58;
?//Serial.println(distance);
?delay(200);
?if(distance>10) ? ? //10cm以內(nèi)無障礙
?{
?//底盤的運動控制
?digitalWrite(xdirPin,LOW);
?digitalWrite(ydirPin,HIGH);
?digitalWrite(zdirPin,LOW);
?digitalWrite(adirPin,HIGH);
?for(int x = 0; x < STEPS_PER_REV; x++)
?{
? ? ? digitalWrite(xstepPin,HIGH);
? ? ? digitalWrite(ystepPin,HIGH);
? ? ? digitalWrite(zstepPin,HIGH);
? ? ? digitalWrite(astepPin,HIGH);
? ? ? delayMicroseconds(400);
? ? ? digitalWrite(xstepPin,LOW);
? ? ? digitalWrite(ystepPin,LOW);
? ? ? digitalWrite(zstepPin,LOW); ?
? ? ? digitalWrite(astepPin,LOW);
? ? ? delayMicroseconds(400);
? ? ? }
?}
else
?{
? ?//停止,避障
? ?digitalWrite(xdirPin,LOW);
? ?digitalWrite(ydirPin,LOW);
? ?digitalWrite(zdirPin,LOW);
? ?digitalWrite(adirPin,LOW);
?}
?//舵機的運動控制
? ?servo_move(950,1300,1500, SERVO_SPEED_WalkForward_low);
? ?delay(5000);
? ?// ? ? ? ? ? ? ? 950, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1300, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1500, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SERVO_SPEED_WalkForward_low
? ?//表示D3引腳連接的舵機要轉(zhuǎn)到的角度 ? ? 表示D4引腳連接的舵機要轉(zhuǎn)到的角度 ? ? ? ?表示D7引腳連接的舵機要轉(zhuǎn)到的角度 ? ? ? ? ? ? ? ? ? ? ?表示舵機轉(zhuǎn)動時的速度
? ?servo_move(2400,1800,2500, SERVO_SPEED_WalkForward_low);
? ?delay(5000);
? ?// ? ? ? ? ? ? ? 2400, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1800, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2500, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SERVO_SPEED_WalkForward_low
? ?//表示D3引腳連接的舵機要轉(zhuǎn)到的角度 ? ? 表示D4引腳連接的舵機要轉(zhuǎn)到的角度 ? ? ? ?表示D7引腳連接的舵機要轉(zhuǎn)到的角度 ? ? ? ? ? ? ? ? ? ? ?表示舵機轉(zhuǎn)動時的速度 ?
}
?//自定義函數(shù)
?void ServoActionReset()
?{
? ? ?servo_move(1500,1000,2400, SERVO_SPEED); //初始化
?}
void ServoStart(int which)//使能舵機
{
?if(!myServo[which].attached()) myServo[which].attach(servo_port[which]);
?pinMode(servo_port[which], OUTPUT);
}
void ServoStop(int which)//釋放舵機
{
?myServo[which].detach();
?digitalWrite(servo_port[which],LOW);
}
void ServoGo(int which , int where)//打開并給舵機寫入相關(guān)角度
{
?if(where!=200)
?{
? ?if(where==201) ServoStop(which);
? ?else
? ?{
?ServoStart(which);
?myServo[which].write(where);
? ?}
?}
}
void servo_move(float value0, float value1, float value2, float t)
// ? alue0, value1, value2, value3這四個參數(shù)時要寫的舵機角度,float t這個參數(shù)是代表舵機運動的時間
{
?float value_arguments[] = {value0, value1, value2};
?float value_delta[servo_num];
?for(int i=0;i<servo_num;i++)
?{
? ?value_delta[i] = (value_arguments[i] - value_init[i]) / f; ? //f=30,舵機初始角度定義為(1650,1300,2400)
?}
?for(int i=0;i<f;i++)
?{
? ?for(int k=0;k<servo_num;k++)
? ?{
? ? ? value_init[k] = value_delta[k] == 0 ? value_arguments[k] : value_init[k] + value_delta[k];
? ?}
? ?for(int j=0;j<servo_num;j++)
? ?{
? ? ? ?ServoGo(j,value_init[j]);
? ?}
? ?delay(t);
?}
}
?更多詳情請見:【S037】自主消毒防疫機器人文章來源地址http://www.zghlxwxcb.cn/news/detail-781095.html
到了這里,關(guān)于機器人制作開源方案 | 自主消毒防疫機器人的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!