它由帶有柔性傳感器的手套控制的人造手組成。人工手通過控制手套無線再現手的動作。手和手套都適用于 Arduino。
第 1 步:所需材料
控制手套的材料:
?彈性手套;
? LilyPad Arduino板(有不同的版本,通常只有 4 個模擬輸入,所以請注意并購買圖片中的那個):它的工作原理與經典的 Arduino UNO 完全一樣,或者您甚至可以直接使用 Arduino Nano;
? XBee 模塊:用于無線電通信;
?屏蔽連接Xbee模塊;
? 5 個彎曲傳感器;
? 5 個電阻器:47 KΩ ;
?帶3x1.5 V電池的電池組(Lilypad 可以從2.7 到5.5 V 供電,所以4.5 V 就可以了);
? LilyPad FTDI 適配器:將 LilyPad 板連接到 PC 并使用 Arduino IDE 加載程序(非常可選,因為您也可以使用 Arduino UNO 板移除 ATmega 芯片,但每次都進行這種連接很棘手) 。
機械臂的材料:
?手掌為鋼結構,手指為木結構;
? Arduino UNO板;
? XBee 模塊;
? 5 個伺服電機5V 供電(我使用 TowerPro SG90);
? Arduino UNO 的伺服電機護罩:連接伺服電機我使用了FuturaElettronica的 Robot_Shield,它還有一個開關穩壓器為整個電路供電,但您可以使用任何用于控制伺服電機的護罩。鏈接:https://store.open-electronics.org/index.php?_rou.。. ;
?連接XBee模塊的屏蔽(我做了一個可怕的,但它很經濟,我需要做一個小因為Robot_Shield 的大小);
?釣魚線;
?(可選)釣魚墜子,用于固定釣魚線,也可以簡單地打一個結;
? 9 伏電池。
- 所需工具:
?角磨機(主要用于切割木材和鋼材);
?軸向磨床;
?焊機(帶電極);
?鉆孔;
?焊臺和焊錫;
? 電工剪刀;
?鉗子;
?熱縮管。
第2步:制作手套
為了制作控制手套,我建議首先選擇不同組件的正確位置,然后用適當長度的電線連接所有東西。
要使用 Arduino LilyPad 進行模擬讀取,您需要制作一個分壓器,因為柔性傳感器不像電位器那樣工作(它們只有 2 個觸點)。
所以按照方案,首先將 5 個電阻焊接在 LilyPad 板上,一側連接到 5 個不同的模擬引腳,另一側共同接地。然后焊接柔性傳感器,一側連接到 5 個不同的模擬引腳,另一側連接到正極。
然后連接 XBee Shield:兩根線用于電源,另外兩根用于信號。將 Tx 引腳焊接到 Rx,反之亦然。
現在你需要電池組和手套了。
注意:不要為 Arduino LilyPad 供電超過 5.5 V,也不要反過來供電
第 3 步:制作機械臂
這是最復雜的部分,因為您必須選擇合適的材料來制作手部,但如果您有可能 3D 打印手部,這也很容易(網上有許多不同的 3D 項目用于打印手部部件)。
我開始用軟木制作手指,為動作找到合適的結構,然后用樹枝制作。
因此,每根手指制作三個木制圓柱體,其中兩個比你的指骨的正常長度長 1 厘米,需要將一個部件放入另一個部件中。
然后用角磨機制作凹槽以使零件裝配在一起(參見圖片,您會更好地理解)。
你需要一些砂紙使碎片彎曲,以便它們可以旋轉。
用鉆頭為鉸鏈打孔,然后你必須為釣魚線打另外兩個孔,垂直方向,一個朝向手內側,一個向外。因此,當電線設置在手指的頂部時,向內拉時手指會閉合,向外拉時手指會打開。
但我后面發現手掌是有問題的,因為我最初是用木頭做的,而較薄的部分總是會斷裂。所以我決定用鋼制造它,這一次我沒有遇到任何問題。
剪下它并做一些類似于手指的突起,將它們固定在手掌上(參見圖片作為參考)。然后用鉆頭為釣魚線制作其他孔,拇指會很棘手,因為它不像其他手指那樣垂直。
動手后,您需要為五個伺服電機和 Arduino UNO 板做一個支撐。一定要選擇舵機的正確位置,這樣它們在旋轉時不會相互接觸。
最后一部分是將手指連接到伺服電機:將釣魚線固定在手指頂部并使其穿過孔;然后,當電線位于手的底部時,以最大旋轉 (180°) 轉動轉子(手動,不通電),使其處于垂直位置,然后將閉合手指的電線設置到最低轉子的孔,例如打結;再次將轉子旋轉 0°(它再次垂直,之前打的結在頂部),然后將另一根線(打開手指)設置到轉子的最低孔。按照此步驟中的最后一張圖片更好地理解。
因此,當電機處于 0°(垂直)時,手指打開,而當轉子處于 180°(再次垂直)時,手指關閉。
第 4 步:機械臂的電路
對于電路,您可以選擇使用帶有 XBee 護罩的 Arduino UNO 伺服電機護罩,或者使用 XBee 模塊和引腳制作定制護罩用于伺服電機,并通過其插孔端口為 Arduino UNO 供電。
我制作的 DIY XBee Shield 使用 12 KOhm 電阻和 22 KOhm 電阻,您可以在圖片中看到接線。
所以我使用了我之前已經購買的東西,但是你可以使用任何讓你控制伺服電機和 XBee 的東西。
伺服電機有 3 根電線:
黃色:信號(連接到數字引腳);
紅色:電源(+5 V);
棕色:接地(GND)。
我使用了最簡單的伺服電機,工作電壓為 5 V,旋轉角度為 180 度(這是完美的角度,我們不需要更多)。
電腦的USB接口無法提供足夠的電源來控制5個伺服電機,所以我建議使用12V電源測試一切,然后使用9V電池(堿性電池為佳)。
第 5 步:程序
記住:要加載程序,您必須刪除連接到 Arduino 的 TX 和 RX 引腳的所有東西(在本例中是 XBee 模塊),否則程序將無法加載。還要記住在 IDE(LilyPad 或 Arduino UNO)中設置正確類型的 Arduino。
兩個代碼的鏈接:
https://codebender.cc/sketch:59559
https://codebender.cc/sketch:55013
試試這個代碼來測試手套上的彈性傳感器:https ://codebender.cc/sketch:56264
這是為了測試 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);
}
-
傳感器
+關注
關注
2553文章
51390瀏覽量
756575 -
遙控
+關注
關注
11文章
285瀏覽量
57485 -
Arduino
+關注
關注
188文章
6477瀏覽量
187817 -
機械臂
+關注
關注
12文章
520瀏覽量
24723
發布評論請先 登錄
相關推薦
評論