一種機(jī)械臂,可通過(guò)帶有傳感器的手套無(wú)線模擬您的手部運(yùn)動(dòng)。
它由帶有柔性傳感器的手套控制的人造手組成。人工手通過(guò)控制手套無(wú)線再現(xiàn)手的動(dòng)作。手和手套都適用于 Arduino。
第 1 步:所需材料
控制手套的材料:
?彈性手套;
? LilyPad Arduino板(有不同的版本,通常只有 4 個(gè)模擬輸入,所以請(qǐng)注意并購(gòu)買(mǎi)圖片中的那個(gè)):它的工作原理與經(jīng)典的 Arduino UNO 完全一樣,或者您甚至可以直接使用 Arduino Nano;
? XBee 模塊:用于無(wú)線電通信;
?屏蔽連接X(jué)bee模塊;
? 5 個(gè)彎曲傳感器;
? 5 個(gè)電阻器:47 KΩ ;
?帶3x1.5 V電池的電池組(Lilypad 可以從2.7 到5.5 V 供電,所以4.5 V 就可以了);
? LilyPad FTDI 適配器:將 LilyPad 板連接到 PC 并使用 Arduino IDE 加載程序(非常可選,因?yàn)槟部梢允褂?Arduino UNO 板移除 ATmega 芯片,但每次都進(jìn)行這種連接很棘手) 。
機(jī)械臂的材料:
?手掌為鋼結(jié)構(gòu),手指為木結(jié)構(gòu);
? Arduino UNO板;
? XBee 模塊;
? 5 個(gè)伺服電機(jī)5V 供電(我使用 TowerPro SG90);
? Arduino UNO 的伺服電機(jī)護(hù)罩:連接伺服電機(jī)我使用了FuturaElettronica的 Robot_Shield,它還有一個(gè)開(kāi)關(guān)穩(wěn)壓器為整個(gè)電路供電,但您可以使用任何用于控制伺服電機(jī)的護(hù)罩。鏈接:https://store.open-electronics.org/index.php?_rou.。. ;
?連接X(jué)Bee模塊的屏蔽(我做了一個(gè)可怕的,但它很經(jīng)濟(jì),我需要做一個(gè)小因?yàn)镽obot_Shield 的大小);
?釣魚(yú)線;
?(可選)釣魚(yú)墜子,用于固定釣魚(yú)線,也可以簡(jiǎn)單地打一個(gè)結(jié);
? 9 伏電池。
- 所需工具:
?角磨機(jī)(主要用于切割木材和鋼材);
?軸向磨床;
?焊機(jī)(帶電極);
?鉆孔;
?焊臺(tái)和焊錫;
? 電工剪刀;
?鉗子;
?熱縮管。
第2步:制作手套
為了制作控制手套,我建議首先選擇不同組件的正確位置,然后用適當(dāng)長(zhǎng)度的電線連接所有東西。
要使用 Arduino LilyPad 進(jìn)行模擬讀取,您需要制作一個(gè)分壓器,因?yàn)槿嵝詡鞲衅鞑幌?a target="_blank">電位器那樣工作(它們只有 2 個(gè)觸點(diǎn))。
所以按照方案,首先將 5 個(gè)電阻焊接在 LilyPad 板上,一側(cè)連接到 5 個(gè)不同的模擬引腳,另一側(cè)共同接地。然后焊接柔性傳感器,一側(cè)連接到 5 個(gè)不同的模擬引腳,另一側(cè)連接到正極。
然后連接 XBee Shield:兩根線用于電源,另外兩根用于信號(hào)。將 Tx 引腳焊接到 Rx,反之亦然。
現(xiàn)在你需要電池組和手套了。
注意:不要為 Arduino LilyPad 供電超過(guò) 5.5 V,也不要反過(guò)來(lái)供電
第 3 步:制作機(jī)械臂
這是最復(fù)雜的部分,因?yàn)槟仨氝x擇合適的材料來(lái)制作手部,但如果您有可能 3D 打印手部,這也很容易(網(wǎng)上有許多不同的 3D 項(xiàng)目用于打印手部部件)。
我開(kāi)始用軟木制作手指,為動(dòng)作找到合適的結(jié)構(gòu),然后用樹(shù)枝制作。
因此,每根手指制作三個(gè)木制圓柱體,其中兩個(gè)比你的指骨的正常長(zhǎng)度長(zhǎng) 1 厘米,需要將一個(gè)部件放入另一個(gè)部件中。
然后用角磨機(jī)制作凹槽以使零件裝配在一起(參見(jiàn)圖片,您會(huì)更好地理解)。
你需要一些砂紙使碎片彎曲,以便它們可以旋轉(zhuǎn)。
用鉆頭為鉸鏈打孔,然后你必須為釣魚(yú)線打另外兩個(gè)孔,垂直方向,一個(gè)朝向手內(nèi)側(cè),一個(gè)向外。因此,當(dāng)電線設(shè)置在手指的頂部時(shí),向內(nèi)拉時(shí)手指會(huì)閉合,向外拉時(shí)手指會(huì)打開(kāi)。
但我后面發(fā)現(xiàn)手掌是有問(wèn)題的,因?yàn)槲易畛跏怯媚绢^做的,而較薄的部分總是會(huì)斷裂。所以我決定用鋼制造它,這一次我沒(méi)有遇到任何問(wèn)題。
剪下它并做一些類似于手指的突起,將它們固定在手掌上(參見(jiàn)圖片作為參考)。然后用鉆頭為釣魚(yú)線制作其他孔,拇指會(huì)很棘手,因?yàn)樗幌衿渌种改菢哟怪薄?/p>
動(dòng)手后,您需要為五個(gè)伺服電機(jī)和 Arduino UNO 板做一個(gè)支撐。一定要選擇舵機(jī)的正確位置,這樣它們?cè)谛D(zhuǎn)時(shí)不會(huì)相互接觸。
最后一部分是將手指連接到伺服電機(jī):將釣魚(yú)線固定在手指頂部并使其穿過(guò)孔;然后,當(dāng)電線位于手的底部時(shí),以最大旋轉(zhuǎn) (180°) 轉(zhuǎn)動(dòng)轉(zhuǎn)子(手動(dòng),不通電),使其處于垂直位置,然后將閉合手指的電線設(shè)置到最低轉(zhuǎn)子的孔,例如打結(jié);再次將轉(zhuǎn)子旋轉(zhuǎn) 0°(它再次垂直,之前打的結(jié)在頂部),然后將另一根線(打開(kāi)手指)設(shè)置到轉(zhuǎn)子的最低孔。按照此步驟中的最后一張圖片更好地理解。
因此,當(dāng)電機(jī)處于 0°(垂直)時(shí),手指打開(kāi),而當(dāng)轉(zhuǎn)子處于 180°(再次垂直)時(shí),手指關(guān)閉。
第 4 步:機(jī)械臂的電路
對(duì)于電路,您可以選擇使用帶有 XBee 護(hù)罩的 Arduino UNO 伺服電機(jī)護(hù)罩,或者使用 XBee 模塊和引腳制作定制護(hù)罩用于伺服電機(jī),并通過(guò)其插孔端口為 Arduino UNO 供電。
我制作的 DIY XBee Shield 使用 12 KOhm 電阻和 22 KOhm 電阻,您可以在圖片中看到接線。
所以我使用了我之前已經(jīng)購(gòu)買(mǎi)的東西,但是你可以使用任何讓你控制伺服電機(jī)和 XBee 的東西。
伺服電機(jī)有 3 根電線:
黃色:信號(hào)(連接到數(shù)字引腳);
紅色:電源(+5 V);
棕色:接地(GND)。
我使用了最簡(jiǎn)單的伺服電機(jī),工作電壓為 5 V,旋轉(zhuǎn)角度為 180 度(這是完美的角度,我們不需要更多)。
電腦的USB接口無(wú)法提供足夠的電源來(lái)控制5個(gè)伺服電機(jī),所以我建議使用12V電源測(cè)試一切,然后使用9V電池(堿性電池為佳)。
第 5 步:程序
記住:要加載程序,您必須刪除連接到 Arduino 的 TX 和 RX 引腳的所有東西(在本例中是 XBee 模塊),否則程序?qū)o(wú)法加載。還要記住在 IDE(LilyPad 或 Arduino UNO)中設(shè)置正確類型的 Arduino。
兩個(gè)代碼的鏈接:
https://codebender.cc/sketch:59559
https://codebender.cc/sketch:55013
試試這個(gè)代碼來(lái)測(cè)試手套上的彈性傳感器:https ://codebender.cc/sketch:56264
這是為了測(cè)試 Lilypad 和 Arduino Uno 之間的連接:https ://codebender.cc/sketch:55014
/*
Flex Glove
Created by Santin Gabriele, 2014
I.T.S.T. "J. F. Kennedy", cl. 5^A EA
Thanks to Elias De Lamper for suggestions to improve this program!
*/
int ResThumb = A4; // Variables of the analog read form the flex sensors connected to the analog pins of Arduino LilyPad
int ResIndex = A3;
int ResMiddle = A2;
int ResAnnular = A1;
int ResPinky = A0;
int OpenedThumb =0; // Variables of the values when the hand is completely opened
int OpenedIndex =0; // This is needed for a continuous calibration
int OpenedMiddle =0;
int OpenedAnnular =0;
int OpenedPinky =0;
int ClosedThumb; // Variables of the values when the hand is completely closed
int ClosedIndex; // We can't set it to zero since that the minimum value reached
int ClosedMiddle; // in the analog read never reach zero. We'll assign the value of
int ClosedAnnular; // a first analog read, then the program in the loop will
int ClosedPinky; // automatically assing lower values
int thumb =0; // Variables of the values to send
int index =0;
int middle =0;
int annular =0;
int pinky =0;
void setup()
{
Serial.begin(9600); // Activating serial communication, XBee Series 1 are pre-programmed at 9600 baud/s
pinMode(ResThumb, INPUT); // The variables of the sensor are set as input
pinMode(ResIndex, INPUT);
pinMode(ResMiddle, INPUT);
pinMode(ResAnnular, INPUT);
pinMode(ResPinky, INPUT);
ClosedThumb = analogRead(ResThumb);
ClosedIndex = analogRead(ResIndex);
ClosedMiddle = analogRead(ResMiddle);
ClosedAnnular = analogRead(ResAnnular);
ClosedPinky = analogRead(ResPinky);
}
void loop()
{
thumb = analogRead(ResThumb);
index = analogRead(ResIndex);
middle = analogRead(ResMiddle);
annular = analogRead(ResAnnular);
pinky = analogRead(ResPinky);
if(thumb > OpenedThumb) // Calibration reading and setting the maximum values. This needs you to completely open your hand a few times
OpenedThumb = thumb;
if(index > OpenedIndex)
OpenedIndex = index;
if(middle > OpenedMiddle)
OpenedMiddle = middle;
if(annular > OpenedAnnular)
OpenedAnnular = annular;
if(pinky > OpenedPinky)
OpenedPinky = pinky;
if(thumb < ClosedThumb) ?// Calibration reading and setting the minimum values. This needs you to completely close your hand a few times
ClosedThumb = thumb;
if(index < ClosedIndex)
ClosedIndex = index;
if(middle < ClosedMiddle)
ClosedMiddle = middle;
if(annular < ClosedAnnular)
ClosedAnnular = annular;
if(pinky < ClosedPinky)
ClosedPinky = pinky;
thumb = map(thumb ,ClosedThumb ,OpenedThumb ,0,180); // The analog read has to be readapted in values between 0 and 180 to be used by the servomotors.
index = map(index ,ClosedIndex ,OpenedIndex ,0,180); // The minimum and maximum values from the calibrations are used to correctly set the analog reads.
middle = map(middle ,ClosedMiddle ,OpenedMiddle ,0,180);
annular = map(annular,ClosedAnnular,OpenedAnnular,0,180);
pinky = map(pinky ,ClosedPinky ,OpenedPinky ,0,180);
Serial.write("<"); ? ? ?// This character represent the beginning of the package of the five values
Serial.write(thumb); // The values are sent via the Tx pin (the digital pin 1)
Serial.write(index);
Serial.write(middle);
Serial.write(annular);
Serial.write(pinky);
delay(30);
}
-
傳感器
+關(guān)注
關(guān)注
2551文章
51207瀏覽量
754535 -
遙控
+關(guān)注
關(guān)注
11文章
285瀏覽量
57408 -
Arduino
+關(guān)注
關(guān)注
188文章
6471瀏覽量
187307 -
機(jī)械臂
+關(guān)注
關(guān)注
12文章
515瀏覽量
24626
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論