一、制作基于Arduino的自平衡踏板車
制作時間:前后約3星期
制作難度:★★★★☆
GEEK指數:★★★☆☆
雙向電梯
1 自平衡踏板車1.0版本
1.1 先展示一些小細節
1.2 元件
1.3 工具
1.4 固定框和馬達
1.5 電路
1.6 代碼
2 改進版自平衡踏板車(2.0版本)
2.1 建造細節
2.2 元件
2.3 工具
2.4 固定框和馬達
2.5 電路
2.6 代碼
2.7 DIYer簽到處
1 自平衡踏板車1.0版本
前段時間,我看到有人DIY了一只平衡滑板,覺得自己也可以做一個類似的平衡平臺來測試一下技術。所以我專門去購買了兒童踏板車的一些后端部件(里面有馬達和驅動輪),還有XenonJohn建議的電子元件。
我們可以用和平衡滑板相同的方法在平衡組件上搭一塊站立臺板,但輪子要分得更開,臺板還要旋轉90度。
兒童踏板車的后端部件非常小,但速度夠快,易于測試。
另外,注意不要有太大的沖撞!比如我們就只少了腿上幾塊皮,還在墻上戳了個小洞洞。
1.1 先展示一些小細節
現在,我們成功買到了兒童踏板車一些后端部件(馬達和驅動輪)和XenonJohn推薦的的電子元件,還弄到了一些三夾板、平面金屬板和鋼管。
我們將所有東西焊在一起,做出一塊可供站立的區域,還有前方凸出的握把。馬達要用螺絲釘固定在兩側,電路則固定在前面。再把電池式手電筒拆成兩半,裝到一只馬達上面當做電池盒用,這樣電工們就得換個新的手電筒了。
我們又找了一塊舊的膠合板制作站立臺板,現在它看上去稍微有點踏板車的雛形了。
我顛來倒去幾次,終于搞對了馬達的極性。過程盡管艱難,但馬達第一次跑起來效果就很不錯。馬達的額定電壓是24V,我們用的電池只有18V,所以需要調整一下力矩和功率值,調整之后效果顯著,馬達跑得很好。
1.2 元件
這次DIY,你需要用到以下元件(網購較方便):
○ Arduino UNO——看看手邊有沒有,沒有可以網購
○ Sabertooth 2x52馬達控制器
○ 5自由度的加速度計
○ 2只從兒童踏板車上拆下來的后端部件,或者分別購買馬達和驅動輪
○ 電池——密封鉛酸電池物美價廉,動力鉆也可以買得很便宜。如果鋰電池是你的菜,鋰電池也不錯。
○ 用于加速度計的屏蔽多芯電纜,用于馬達的大功率電纜
○ 安全操作開關
○ 控制轉彎的撥動開關
○ 調整平衡位置的撥動開關
○ Arduino直流接口
○ 匹配Arduino的DIL管腳
○ 雙面膠
○ 螺絲釘
1.3 工具
除了正常工具之外,最好請有焊接機的人幫你焊接固定框。
需要用到的其他工具:
● 鉆子和鉆頭
● 烙鐵和焊錫
● 剪線鉗和剝皮鉗
● 熱縮材料和熱氣槍
1.4 固定框和馬達
為了制作固定框,我們在每一側都用了幾塊三夾板、兩片金屬盤,把踏板車的馬達部件固定住。
切割兩塊三夾板,寬度適合雙腳踩踏就行。
再在金屬板上鉆幾個洞,好匹配踏板車驅動輪部件上的螺栓孔,再把金屬盤焊接到三夾板搭建的臺板上面。
我們還在前端裝了一根立桿,在立桿上焊了T型把手,方便雙手握把。又在直立的把手和第二塊三夾板上之間加了一塊三角板加強固定。
現在可以把輪子擰上去了。
1.5 電路
你可以看到,這兒并沒有很多電子元件,只有Arduino、IMU(慣性測量單元)、馬達驅動和一堆開關。
開關和IMU的接線都必須是屏蔽線,除非IMU非常靠近Arduino。IMU應該盡量裝在臺板的中央或前面,比如我們就把IMU固定在了前端的盒子里。
從圖中你可以看到,我們其實把所有東西都固定在了那個盒子里,騎踏板車的時候只能操作切斷開關,左右駕駛和傾斜控制。
另外,電池被安裝在了馬達的頂部。
1.6 代碼
代碼和XenonJohns寫的基本上一樣,只是額外調整了功率值和力矩值,因為我們在用18V的電池跑24V的馬達。
在代碼的開始處,我們定義了2個負責調節功率和力矩的變量。
2 改進版自平衡踏板車(2.0版本)
在制作了第一版自平衡踏板車作為測試平臺之后,我們覺得它還挺酷的,所以決定再制作一版。
這次我們需要添加一些小特色:
1.2只14.4V的鋰電池 2.馬達和車輪組件的固定框 3.高度可調節的把手 4.性能優異的CNC(電腦數控)平臺 5.花紋鋼板
所以,這一版的制作材料基本和上一版的踏板車完全相同。
2.1 建造細節
首先,我們對第一個裝置中存在的爭論點進行了討論,在這個版本中達成了一致。
最大的問題是兒童踏板車的后端部件是廉價的壓盤,超重時會彎曲變形。所以我們用激光切割了一塊金屬盤來代替固定框固定馬達和輪子。固定框用25mm的鋼管制成,還進行了增強,好讓它支撐更多重量。
前把手做成了高度可調節的,這樣小矮個也可以騎了。
由于市面上沒有比較便宜的、用我們現在用的這種電池的手電筒,只好自己做了個電池盒。
然后加上了花紋鋼板,看起來更專業一點。
2.2 元件
除了電池之外,其他的元件都和上一版相同。
你需要用到:
● Arduino UNO——看看手邊有沒有,沒有可以網購
● Sabertooth 2x52馬達控制器
● 5自由度的加速度計
● 2個從兒童踏板車上拆下來的后端部件,或者分別購買馬達和輪子
● 電池——密封鉛酸電池物美價廉,動力鉆也可以買得很便宜。如果鋰電池是你的菜,鋰電池也不錯。
● 用于加速度計的屏蔽多芯電纜,用于馬達的大功率電纜
● 安全操作開關
● 控制轉彎的撥動開關
● 調整平衡位置的撥動開關
● Arduino直流接口
● 匹配Arduino的DIL管腳
● 雙面膠
● 螺絲釘
2.3 工具
除了正常工具之外,最好請有焊接機的人幫你焊接固定框。
需要用到的其他工具:
● 鉆子和鉆頭
● 烙鐵和焊錫
● 剪線鉗和剝皮鉗
● 熱縮材料和熱氣槍
2.4 固定框和馬達
固定框做得非常牢固。我們為“輪子+馬達”的組件使用了25mm的RHS方管和激光切割的金屬盤,所以它不會再像上一個固定框那樣扭曲了。
前把手做成可調節式,我們還在頂部加了漂亮的握把。
2.5 電路
就像你在電路圖中看到的那樣,這次的電路非常簡單,和我們制作的前一個版本完全一樣。
開關和IMU的接線都必須是屏蔽線,除非IMU非常靠近Arduino。IMU應該盡量裝在臺板的中央或前面,比如我們就把IMU固定在了前端的盒子里。
從圖中你可以看到,我們其實把所有東西都固定在了那個盒子里,騎踏板車的時候只能操作切斷開關,左右駕駛和傾斜控制。
另外,電池被安裝在了馬達的頂部。
2.6 代碼
二、制作基于Arduino的自動避障機器龜
制作時間:一天
制作難度:★★★☆☆
GEEK指數:★★★☆☆
在本教程中我將一步步地教你如何利用板載Arduino UNO微控制器制作自動避讓機器人烏龜Duino(TurtleDuino)。我用五金里買的材料,以及網上買的電子器件設計了這個烏龜Duino。
雙向電梯
1 準備材料
2 切割底座
3 烏龜的脖子
4 制作烏龜的腦袋
5 制作烏龜的腦袋,第2部分
6 布線
7 Arduino設計和莫霍克發型
8 DIYer簽到處
1 準備材料
購物清單:
Arduino UNO(Sparkfun.com)
2個大型連續轉動伺服電機(sparkfun ROB-09347)
1個中型180度轉動伺服電機(sparkfun ROB-10333)
面包板(sparkfun PRD-09567)
跳線(sparkfun PRD-11026)
SPST撥動開關(sparkfun COM-09276)
22號安裝線(sparkfun PRD-08023)
伺服電器擴展(sparkfun ROB-08738)
Arduino的9伏電池插口(sparkfun PRY-09518)
9伏電池倉(可選)
9伏電池
4節AA電池
分離長插頭(sparkfun PRT-10158)
舊的遙控汽車輪子
2個大型伺服電機支架
五金店采購:
1/2英寸(1.27厘米)45度PVC管(烏龜的脖子)(在電氣區)
1/2英寸(1.27厘米)PVC單孔導管扣帶,或者導管夾(用于支撐烏龜的脖子)(在區)
2英寸(5.08厘米)進線口帽(烏龜的甲殼)(在電氣區)
1英寸(2.54厘米)進線口帽(烏龜的腦袋)(在電氣區)
液態電工膠布(在電氣區)
熱熔膠槍套件(在工具區)
焊接套件(在工具區)
五金部分:
3/8英寸(0.95厘米)×6×24英寸(61厘米)手工板(用于制作烏龜的底座)
#6-32×1英寸(2.54厘米)機械螺釘(大約20顆)
#6平墊圈(小包裝)
#6×1/2英寸(1.27厘米)金屬板螺釘(用于將脖子的角架、前輪,和甲殼連接在底座上)
#4×1/2英寸(1.27厘米)金屬板螺釘(用于將伺服電機和arduino連接在底座上)(小包裝)
#6螺母(小包裝)、4個#6-32×2英寸(5.08厘米)長螺栓(用于將腦袋連接在脖子上,和將ping伺服電機連接在腦袋上)
90度角角板
2英寸(5.08厘米)油漆刷(用于繪制超酷的莫霍克發型)(在油漆區)
2 切割底座
在這一步中我們要切割底座、安裝后部的伺服電機、前輪和后輪,以及4節AA電池的電池倉。
將烏龜外殼的底部零件取下并拆開,然后將外殼放在一塊1/2英寸(1.27厘米)×6×4英尺(1.22米)白楊木上,用3英寸(7.62厘米)鉛筆(之所以是3英寸鉛筆,是因為空間比較狹窄)將甲殼的內徑勾勒出來。在甲殼前面留出大約2英寸(5.08厘米)的底座,然后將勾勒出來的部分切割下來。(參見圖片)
現在,讓我們用兩個伺服電機,或者你自己做的電機,用#4金屬板螺釘(一定要用適合連續轉動的螺釘)將后部伺服電機安裝在底座背部靠近外側邊緣的位置,這樣一來,露在外面的就只有伺服電機的轉軸了。
在底座的2個伺服電機之間鉆一個1/4英寸(0.635厘米)的通孔,這個孔是用來穿電機和4節AA電池的電池倉的正負極導線,將它們連接在面包板上。我用2個小型樂高零件將前輪安裝上去,并用#6×1/2英寸(1.27厘米)金屬板螺釘將它們擰在了底座上。我用熱熔膠將后輪固定在伺服電機長長的圓形機臂上,然后用螺釘將它們固定在伺服電機轉軸上。
最后擰上4節AA電池的電池倉的螺釘。[忘了將導線穿過1/4英寸(0.635厘米)的孔)]。
3 烏龜的脖子
現在我們要將脖子連接在底座上了。拿起1/2英寸(1.27厘米)45度PVC管,將較寬的一頭切掉。將PVC管角架用螺釘固定在底座前面的中間,讓角架大約距離前邊緣有兩英寸(5.08厘米)距離。
參見圖片,將管子的另一頭以某一角度切割,然后像圖片中那樣,在管子的上半部分末端鉆一個3/16英寸(0.48厘米)的孔(這些孔將被用于將90度角角板安裝在脖子上,來支撐烏龜的腦袋。這個孔必須對準了以后再鉆,從脖子的左側一直到右側。)
4 制作烏龜的腦袋
對我來說,制作腦袋是整個項目中最難的一步了。
所以請跟我一起來挑戰難關,我會盡可能讓你順利通過的。
拿起1英寸(2.54厘米)的進線口帽,將內部的零件都取出并拆掉。將ping傳感器的圓柱體面對面地放在腦袋上,然后勾勒出圓柱體的輪廓,這樣你就知道要在腦袋前面如何切割了。參見圖片。(我建議你使用dremel工具)
在你為ping傳感器切割好開口之后,將它放進腦袋里,從腦袋前面伸出1/8英寸(0.3厘米)的長度。在腦袋的前面兩側各鉆一個3/16英寸(0.48厘米)的孔,位置就在ping傳感器的安裝孔上方。接著,將ping傳感器通過兩個小的扣環安裝在腦袋上。參見圖片了解細節。
然后,將伺服電機放進腦袋里,從內側將腦袋頂部安裝孔的位置標記下來。用3/16鉆頭將兩個伺服電機安裝孔鉆好,然后用2個6-32×2英寸(5.08厘米)螺栓和2個6-32螺母將伺服電機安裝好。
5 制作烏龜的腦袋,第2部分
拿出90度角角板,用伺服電機附帶的兩顆螺釘和兩個套管將伺服電機的中型機臂安裝好。參見圖片了解細節。將機臂用螺釘安裝在伺服電機上。將ping傳感器和伺服電機的導線穿過烏龜的脖子,連接到面包板上。
但是,首先要將伺服電機的擴展件安裝在伺服電機和ping傳感器上,讓它們能夠接到面包板。現在,將角板安裝在機臂上,然后用一對6-32×2英寸(5.08厘米)螺栓和螺母將它安裝在烏龜的脖子上。
6 布線
首先將面包板背面的粘合劑剝掉,將它放在底座的后部,位于后部伺服電機的上方。測量并切割一條比arduino長1/8英寸(0.32厘米)的木板。這塊板將會用#4×1/2英寸(1.27厘米)的金屬板螺釘固定在烏龜腦袋支架的頂部。
將Arduino板用#4×1/2英寸(1.27厘米)金屬板螺釘固定在這塊板上。現在,就該排線了,用分離插頭的管腳將兩個后部伺服電機、ping伺服電機和ping傳感器和面包板接起來(從插頭管腳中去除4個3管腳的部分,連接伺服電機)。
用安裝線將后部電機的電源(4節AA電池的電池倉)負極(黑色)和正極(紅色)連接在面包板的軌道上,黑色連藍色軌道,紅色則連面包板的紅色軌道。
將左右伺服電機的紅色引線接在紅色軌道上,而黑色引線接在面包板的藍色軌道上。
左邊電機的白色引線接在Arduino的11號D管腳上
右邊電機的白色引線接在Arduino的10好D管腳上
Ping電機:棕色是負極(接地)
橙色是正極(電源)
黃色是信號線
將棕色引線接在面包板的藍色軌道上,橙色引線接在面包板的紅色軌道上。
黃線則接在Arduino的6號D管腳上。
Ping傳感器:將ping傳感器上標有GRN的管腳接在Arduino的GRN端。
將ping傳感器上標有5v的管腳接在Arduino的5v端。
最后將標有SIG的管腳接在Arduino的7號D管腳上。
安裝9伏電池和電池倉。
現在,拿出SPST撥動開關,在每頭焊接一條8英寸(20.32厘米)的引線。拿出9伏插口,將紅線剪掉一般,然后將開關的一條引線焊接在插口的一頭,開關的另一條引線焊接在插口的另一頭。
在甲殼后部較低的位置鉆一個1/4英尺(0.635厘米)的孔,安裝開關。
7 Arduino設計和莫霍克發型
莫霍克發型:拿出3英寸(7.62厘米)油漆刷和強力膠,將膠水大量涂抹在刷子末端1/4英寸(0.635厘米)的范圍內。兩邊都浸泡好膠水(記得戴手套)然后等待20分鐘讓它晾干。在干了以后,剪下1/2英寸(1.27厘米)的刷毛,拿去用PVC接合劑或者任何其他的塑料膠水將它粘在腦袋上。
將Arduino插入計算機中,下載下面的設計程序。好了,恭喜你已經完成了烏龜Duino的制作。
烏龜Duino自動避讓機器人 代碼部分
// 烏龜Duino自動避讓機器人By:RobDavinci
#include //include Servo library
const int RBackward = 180;
const int LForward = RBackward;
const int LBackward = RForward;
const int RNeutral = 90;
const int LNeutral = 90; //電機速度常數
const int pingPin = 7;
const int irPin = 0; //銳利的紅外傳感器管腳
const int dangerThresh = 10; //障礙物的閾值(單位厘米)
int leftDistance, rightDistance; //兩側距離
Servo panMotor;
Servo leftMotor;
Servo rightMotor; //聲明電機
long duration; //接收PING)))信號所需的時間
void setup()
{
rightMotor.attach(11);
leftMotor.attach(10);
panMotor.attach(6); //將電機安裝在適當管腳上
panMotor.write(90); //將PING)))焊盤設為中央
}
void loop()
{
int distanceFwd = ping();
if (distanceFwd》dangerThresh) //如果無障礙
{
leftMotor.write(LForward);
rightMotor.write(RForward); //前進
}
else //如果有障礙
{
leftMotor.write(LNeutral);
rightMotor.write(RNeutral);
panMotor.write(0);
delay(500);
rightDistance = ping(); //掃描右側
delay(500);
panMotor.write(180);
delay(700);
leftDistance = ping(); //掃描左側
delay(500);
panMotor.write(90); //回到中央
delay(100);
compareDistance();
}
}
void compareDistance()
{
if (leftDistance》rightDistance) //如果左側障礙較少
{
leftMotor.write(LBackward);
rightMotor.write(RForward); //向左轉
delay(2000);
}
else if (rightDistance》leftDistance) //如果右側障礙較少
{
leftMotor.write(LForward);
rightMotor.write(RBackward); //向右轉
delay(2000);
}
else //如果障礙同樣多
{
leftMotor.write(LForward);
rightMotor.write(RBackward); //轉180度
delay(2000);
}
}
long ping()
{
//發出PING)))信號脈沖
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
//獲取接收回聲所需的時間
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
//將持續時間轉換為距離
return duration / 29 / 2;
}
在DIY制作Arduino機器人過程中,小編希望這篇教程讓你能體驗到和我一樣的快樂。
-
開源硬件
+關注
關注
8文章
210瀏覽量
29867 -
Arduino
+關注
關注
188文章
6472瀏覽量
187363 -
智能硬件
+關注
關注
205文章
2348瀏覽量
107712
發布評論請先 登錄
相關推薦
評論