在這個項目中,我將向您展示如何使用3D打印部件制作一個簡單的4腿行走蜘蛛機器人。該設(shè)計主要由上下板、臂接插件、腿和伺服支架五個部分組成。機器人的4條腿由4個手臂部分和4個腿部分組成。機器人的運動總共使用了8個業(yè)余伺服電機,4個在手臂上,4個在腿上。
在電路方面,首選ESP32板,但該項目可以很容易地控制與Arduino板。ESP板的藍(lán)牙功能是無線通信的首選,并創(chuàng)建了一個簡單的應(yīng)用程序來控制。這款應(yīng)用程序允許你用簡單的命令控制機器人的動作,比如行走、轉(zhuǎn)彎和跳躍。
該項目易于組裝和使用,使其成為學(xué)生,教師或任何對機器人感興趣的人的絕佳選擇。我們開始吧!
步驟1:將手臂伺服器放在基座上
首先,在組裝伺服系統(tǒng)之前,要放在基座上的手臂伺服系統(tǒng)必須調(diào)整到90度起始位置。我已經(jīng)分享了初始位置的基本代碼。正如你所看到的,我已經(jīng)固定了3個伺服電機,讓我們一起安裝第四個和最后一個伺服電機。
根據(jù)伺服電機的類型,伺服底座上的支架可能會保持松弛,在這種情況下,可以借助一些熱熔膠使其固定。
本項目使用了8臺SG90微型伺服電機(或近似尺寸等效)。
?產(chǎn)品:SG90伺服
?扭矩:2.0kg/cm(4.8V), 2.2kg/cm(6V)
?速度:0.09s/60°(4.8V), 0.08s/60°(6V)
?旋轉(zhuǎn)角度:180°
?工作電壓:4.8 ~ 6V
?齒輪:塑料
?Dead band:7us
?重量:10.5克
?外形尺寸:22.8mm × 12.2mm × 28.5mm
步驟2:固定手臂和腿的連接器
在本節(jié)中,將由兩個獨立部分組成的“臂”和“腿”連接器用螺栓和螺母固定在一起。將固定連接器連接到伺服基座上。然后,與連接器成對角角,放置伺服喇叭,擰緊螺絲固定在伺服電機上。
最后,將伺服喇叭的末端固定到使用螺釘?shù)倪B接器上,沒有必要這樣做,但固定它可以防止松動。現(xiàn)在手臂是完整的,讓我們移動到腿組裝。
步驟3:組裝腿
在固定要在腿上使用的伺服電機之前,您需要將它們帶到60度的起始角度。然后放置支架和支腿部分,用合適的螺釘將支腿部分固定在伺服電機上。
將支腿插入連接器并連接伺服喇叭,使支腿處于直角位置。然后用螺絲固定伺服喇叭。
現(xiàn)在準(zhǔn)備其他三條腿,完成組裝?,F(xiàn)在手臂和腿的組裝已經(jīng)完成,我們可以繼續(xù)到電路的電源部分。
步驟4:電路的電源
一個7.4伏的電池將是足夠的電路,基礎(chǔ)部分是設(shè)計為一個3S鋰電池的大小,但電池在我的車間被損壞,我不得不使用11.1伏的電池。如果你打算使用7.4伏的電池,你可以跳過這一部分。
我把電池放在底座下面,用扎帶固定。由于電池更換,我在電源電路中加入了一個電壓降壓模塊。我借助模塊上的調(diào)節(jié)螺絲將電壓輸出設(shè)置為7伏,并連接電池輸入。
將模塊放在底座上后,讓我們繼續(xù)組裝電路板固定的上部底座。機器人的所有部件都組裝好了,讓我們來看看電路板!
步驟5:電路板
我設(shè)計了一個控制16個伺服電機的電路板,可以連接到ESP32板上。和往常一樣,我選擇pcb方式來打印高質(zhì)量的電路板。您可以訪問此鏈接訂購PCB,電路和Gerber文件:
優(yōu)先考慮易焊部件,具備基本的焊接知識即可?;蛘?,您可以使用PCBWay的組裝服務(wù)并訂購現(xiàn)成的焊接電路。將所需組件安裝在PCB上,并用烙鐵和焊絲將其焊接到位。您可以在上傳的圖像中看到組件的位置。
?4個100uf 25V~16V電源電容
?4x 470uf 25V~16V伺服電機電容器
?1個SB560二極管用于電源
?1個7805CV電源穩(wěn)壓器
?2 x 3 mm-led
?16x 220歐姆伺服電機電阻
?2個330歐姆電阻,用于led
?1個2pin 5mm螺絲端子,用于電源輸入
?2.54 ESP32板的母頭
?2.54伺服電機連接公頭
?做ESP32 Devkit V1開發(fā)板
步驟6:伺服電機的連接
我們把它放在機器人上,然后把伺服電機連接起來。以下是伺服電機連接的GPIO引腳:
機器人幾乎準(zhǔn)備好了,取出ESP32板并將其連接到您的計算機,然后打開共享源代碼。現(xiàn)在是時候編寫代碼了!
步驟7:源代碼
在Arduino IDE中打開代碼
?首先,需要在Arduino IDE中打開所提供的代碼。這將允許我們編輯和上傳代碼到ESP32板。
在“首選項”中添加ESP32單板的URL
?進(jìn)入File > Preferences,添加ESP32板管理器URL
?此步驟確保我們可以安裝必要的ESP32工具。
安裝ESP32單板包
?進(jìn)入Tools > Board > Board Manager,搜索“ESP32”,單擊“Install”。
?此過程將ESP32板支持添加到Arduino IDE中。
包括所需的庫
?代碼包括兩個庫:
?用于處理藍(lán)牙通信。
?ESP32Servo.h是一個專門設(shè)計用于控制帶有ESP32板的伺服電機的庫。
通過移動應(yīng)用程序發(fā)送的命令
該應(yīng)用程序通過藍(lán)牙發(fā)送指定的數(shù)字來激活生成的命令,如上下行走等。這些數(shù)字在應(yīng)用程序中定義,命令在代碼中被解釋以觸發(fā)不同的機器人動作。
定義伺服電機的GPIO引腳
在本節(jié)中,我們指定伺服電機連接的GPIO引腳。機器人的每條手臂和腿都由單獨的伺服電機控制。
設(shè)置移動限制和速度
機器人的動作被定義為手臂和腿的特定限制。這些動作的速度由speed變量控制。
藍(lán)牙連接和數(shù)據(jù)處理
在循環(huán)部分,代碼檢查是否從藍(lán)牙應(yīng)用程序接收到任何數(shù)據(jù)。如果數(shù)據(jù)可用,則讀取數(shù)據(jù)并將其存儲在data變量中?;谶@些數(shù)據(jù),觸發(fā)特定的機器人功能。
基于命令觸發(fā)機器人動作
當(dāng)接收到命令時,機器人會執(zhí)行諸如行走-旋轉(zhuǎn)或重置到穩(wěn)定位置之類的動作。這就是代碼的工作原理和要求,現(xiàn)在將代碼上傳到板子上,然后讓我們轉(zhuǎn)到應(yīng)用程序端。
步驟8:藍(lán)牙控制應(yīng)用程序
我們將使用MIT App Inventor,這是一個用于開發(fā)Android應(yīng)用程序的免費拖放工具。通過電子郵件登錄App Inventor后,上傳我創(chuàng)建的App的共享AIA文件。(這里不支持AIA擴展文件作為附件,所以我不得不將文件上傳到PCB頁面)這樣你就可以檢查模塊并構(gòu)建自己的Android安裝文件,沒有任何信任問題。然后你所需要做的就是在你的手機或平板電腦上安裝應(yīng)用程序!
現(xiàn)在我們來談?wù)勥@個app的界面,有一個按鈕列出藍(lán)牙設(shè)備,在它下面我添加了一個Text Label顯示連接狀態(tài)。最后,我添加了6個按鈕來觸發(fā)機器人的運動功能。在塊部分中,有幾個條件在一開始就啟動藍(lán)牙通信。然后為每個移動按鈕創(chuàng)建要發(fā)送的數(shù)據(jù)類型和數(shù)據(jù)函數(shù)。就是這么簡單,現(xiàn)在我們有了一個應(yīng)用程序!現(xiàn)在是控制機器人的時候了!
代碼
#include
Servo servo_footA;
Servo servo_armA;
Servo servo_footB;
Servo servo_armB;
Servo servo_footC;
Servo servo_armC;
Servo servo_footD;
Servo servo_armD;
// Connect servos to pins
int srv_footA = 13;
int srv_armA = 12;
int srv_footB = 15;
int srv_armB = 2;
int srv_footC = 26;
int srv_armC = 25;
int srv_footD = 17;
int srv_armD = 5;
void setup() {
servo_footA.attach(srv_footA);
servo_armA.attach(srv_armA);
servo_footB.attach(srv_footB);
servo_armB.attach(srv_armB);
servo_footC.attach(srv_footC);
servo_armC.attach(srv_armC);
servo_footD.attach(srv_footD);
servo_armD.attach(srv_armD);
// Set mounting positions
setInitialPositions();
}
void loop() {
}
void setInitialPositions() {
// Leg servos: 60
servo_footA.write(60);
servo_footB.write(60);
servo_footC.write(60);
servo_footD.write(60);
// Arm servos: 90
servo_armA.write(90);
servo_armB.write(90);
servo_armC.write(90);
servo_armD.write(90);
}
本文編譯自hackster.io