|
1.jpg (58.14 KB, 下載次數(shù): 75)
下載附件
2019-9-9 11:14 上傳
2.jpg (47.17 KB, 下載次數(shù): 85)
下載附件
2019-9-9 11:14 上傳
你好,
我的目標(biāo)是建立一個(gè)藍(lán)牙控制的機(jī)器人,讓一個(gè)朋友在吉他/低音放大器前移動(dòng)麥克風(fēng)。這個(gè)機(jī)器人被音響工程師用來(lái)完美地將麥克風(fēng)放在揚(yáng)聲器前面的正確位置,以測(cè)試聲音,最終獲得最佳音質(zhì)。
我知道我還需要設(shè)計(jì)和編寫(xiě)一個(gè)帶有迷人用戶(hù)界面的應(yīng)用程序,用于任何Android智能手機(jī)移動(dòng)機(jī)器人。
該項(xiàng)目分為4個(gè)主要部分:
-電子硬件
-力學(xué)元素
-固件編程
-應(yīng)用程序開(kāi)發(fā)
這是一個(gè)非常多功能的項(xiàng)目,因?yàn)樗梢宰詣?dòng)和遠(yuǎn)程移動(dòng)其他東西,如一個(gè)微型投影儀,一盞燈或相機(jī)放在一個(gè)房間的天花板上。
我為這些照片道歉,因?yàn)槲曳浅嶂杂谥圃鞕C(jī)器人,所以沒(méi)有拍到令人滿(mǎn)意的照片。
請(qǐng)寫(xiě)信給我,以便進(jìn)一步解釋和評(píng)論。
玩得高興!
披露:我很喜歡做這個(gè)項(xiàng)目,它對(duì)我很好,但我不負(fù)責(zé)任何損害,可能發(fā)生在你身上。用電工作的人可能會(huì)受傷。這個(gè)項(xiàng)目的所有硬件都在非常低的電壓(12伏)下工作,所以這是不可能發(fā)生的,但在電子元件中總是會(huì)過(guò)熱和燃燒。此外,在建造這樣一個(gè)機(jī)械移動(dòng)機(jī)器人時(shí),非常重要的是要非常小心,因?yàn)槟愕氖挚赡軙?huì)被困在移動(dòng)部件中,最終可能會(huì)受傷。我推薦這個(gè)項(xiàng)目的人知道電子,機(jī)械和電氣工程至少在中級(jí)水平。
教程筆記:
第一步:電子“配料”
3.jpg (37.31 KB, 下載次數(shù): 80)
下載附件
2019-9-9 11:18 上傳
4.jpg (101.59 KB, 下載次數(shù): 82)
下載附件
2019-9-9 11:19 上傳
5.jpg (52.04 KB, 下載次數(shù): 102)
下載附件
2019-9-9 11:19 上傳
6.jpg (20.54 KB, 下載次數(shù): 79)
下載附件
2019-9-9 11:21 上傳
7.jpg (14.03 KB, 下載次數(shù): 58)
下載附件
2019-9-9 11:21 上傳
8.jpg (4.81 KB, 下載次數(shù): 87)
下載附件
2019-9-9 11:21 上傳
9.jpg (26.8 KB, 下載次數(shù): 78)
下載附件
2019-9-9 11:21 上傳
10.jpg (40.92 KB, 下載次數(shù): 94)
下載附件
2019-9-9 11:21 上傳
11.jpg (124.02 KB, 下載次數(shù): 72)
下載附件
2019-9-9 11:21 上傳
硬件:
-1 Arduino Uno(最好是原版)
-1個(gè)HC-06藍(lán)牙模塊
-1個(gè)數(shù)控屏蔽
-3個(gè)電流為1A的A4988驅(qū)動(dòng)器(或電流為2A的DRV8825)
-3 NEMA 17步進(jìn)電機(jī)(具有良好的扭矩),例如本電機(jī)或本電機(jī)
-2個(gè)微動(dòng)開(kāi)關(guān)
-1個(gè)12V 60W的電源驅(qū)動(dòng)程序例如
-1個(gè)EU連接器(示例)
-附加4極電纜
步驟2:機(jī)械零件
1.jpg (41.58 KB, 下載次數(shù): 92)
下載附件
2019-9-9 11:24 上傳
F6EGHNXJZN5D4TG.LARGE.jpg (21 KB, 下載次數(shù): 77)
下載附件
2019-9-9 12:03 上傳
FRUME71JZN5CL2T.LARGE.jpg (22.36 KB, 下載次數(shù): 81)
下載附件
2019-9-9 12:03 上傳
該項(xiàng)目的大多數(shù)機(jī)械元件都可以很容易地在網(wǎng)上找到。然而,電機(jī)的塑料支架是由我的一個(gè)朋友用3d打印機(jī)投影和制造的,另一個(gè)朋友用他的cnc銑削了中央電機(jī)(z軸)的鋁支架。
您可以看到最終裝配(在步驟4中),使用您喜愛(ài)的三維設(shè)計(jì)cam軟件在鏈接處制作這些零件,并將文件發(fā)送到本地fablab。你可以在這里找到你當(dāng)?shù)氐墓S(chǎng)實(shí)驗(yàn)室。它們將幫助您制作3D打印和數(shù)控銑削零件。
機(jī)械材料:
-2件60cm鋁擠壓35mmx35mm直線(xiàn)導(dǎo)軌(可在線(xiàn)查找)
-8個(gè)方位(確保與圖片中的方位相同。適用于鋁制直線(xiàn)導(dǎo)軌)
-1個(gè)3D打印機(jī)皮帶
-2個(gè)滑輪(見(jiàn)圖)
-2個(gè)用于電機(jī)的3D打印機(jī)械支架,這些零件用螺釘固定在鋁導(dǎo)軌上
-用于中央電機(jī)(Z軸)的數(shù)控銑削鋁支架。設(shè)計(jì)它,讓你當(dāng)?shù)氐墓S(chǎng)來(lái)做!
-任何電纜鏈或柔性電纜管,你可以在圖片中找到兩個(gè)例子
-安裝五金件的電箱
步驟3:電子組裝
1.jpg (57.42 KB, 下載次數(shù): 83)
下載附件
2019-9-9 11:28 上傳
2.jpg (28.97 KB, 下載次數(shù): 78)
下載附件
2019-9-9 11:28 上傳
3.jpg (38.02 KB, 下載次數(shù): 105)
下載附件
2019-9-9 11:28 上傳
現(xiàn)在我們只需要把硬件連接起來(lái)。
1)將防護(hù)罩放在Arduino頂部
2)將HC-06藍(lán)牙模塊連接到防護(hù)罩頂部的插腳上。
小心!看圖片2,你可以看到:
HC-06的TX將轉(zhuǎn)到Arduino的RX
HC-06的RX將傳送到Arduino的TX
3)連接微動(dòng)開(kāi)關(guān)或限位開(kāi)關(guān)。從下面的代碼中可以看出,微動(dòng)開(kāi)關(guān)的常開(kāi)觸點(diǎn)必須連接在插腳9和GND之間,以限制X軸;插腳10和GND之間,以限制Y軸。您不需要外部上拉或下推電阻器,因?yàn)槲覀儗⑹褂脙?nèi)置Arduino的內(nèi)部上拉電阻器。關(guān)于這個(gè)主題的更多信息可以在這里找到。
pinmode(9,input_pullup);
pinmode(10,輸入_pullup);
4)將步進(jìn)電機(jī)連接到屏蔽上,但要注意,因?yàn)槟梢钥吹讲竭M(jìn)電機(jī)表示為兩個(gè)感應(yīng)器,請(qǐng)按照屏蔽銷(xiāo)的順序?qū)⒏袘?yīng)器的右極連接到右銷(xiāo)。如果你搞砸了,不會(huì)發(fā)生什么嚴(yán)重的事情,但如果你搞砸了,要么馬達(dá)不動(dòng),要么會(huì)發(fā)出嘎嘎聲和震動(dòng)!
對(duì)于我使用過(guò)的電機(jī),電纜顏色如下:
A+黑色
A-綠色
B+紅色
B-藍(lán)色
我已經(jīng)附上步進(jìn)電機(jī)數(shù)據(jù)表,在那里你會(huì)發(fā)現(xiàn)所有的技術(shù)信息,因?yàn)槟憧梢钥吹竭@些步進(jìn)電機(jī)接受高達(dá)2A的電流每相。即使標(biāo)稱(chēng)電壓是2.2V,也不存在像我們這樣以12V的電壓驅(qū)動(dòng)它們的問(wèn)題。
小心!如果電機(jī)過(guò)熱,減小電流或插入降壓以降低電壓!
這個(gè)設(shè)置允許你使用電機(jī)的全部功率,你可以看到這些步進(jìn)電機(jī)有一個(gè)很好的扭矩曲線(xiàn)。即使轉(zhuǎn)速(每分鐘轉(zhuǎn)數(shù))增加,也會(huì)保持30ncm的扭矩。30ncm意味著在距離中心1cm處,它們可以旋轉(zhuǎn)約3kg的重量。這么小的馬達(dá)真讓人印象深刻!
5)驅(qū)動(dòng)器頂部有一個(gè)小螺釘,用于限制流向電機(jī)的電流量。如果你使用的是A4988(紅色的),你可以保持電流的大小不變,通常是1A。或者在上面使用一個(gè)更大的散熱器,把它也增加到1.5A。
如果您使用DRV8825(紫色的),您可以在2A驅(qū)動(dòng)電機(jī)。要測(cè)量電流,您需要一個(gè)串聯(lián)的數(shù)字萬(wàn)用表或臺(tái)式電源。
有時(shí)如果可能發(fā)生馬達(dá)發(fā)出一點(diǎn)煩人的嗡嗡聲,你必須調(diào)節(jié)電流直到嗡嗡聲消失,這是由寄生頻率引起的。
6)如果您愿意,可以將電源的EU接頭放在盒子的預(yù)先制作的孔中,并進(jìn)行一些焊接,以達(dá)到Arduino的車(chē)輛識(shí)別號(hào)針腳。12V線(xiàn)也意味著要連接到屏蔽上的藍(lán)色連接器,這是主線(xiàn),它將給步進(jìn)電機(jī)供電,并最終移動(dòng)您的軸。
小心!如果你顛倒了電機(jī)屏蔽上的正負(fù)極,你會(huì)燒掉它,使其無(wú)法使用。務(wù)必用萬(wàn)用表測(cè)量從電源到EU接頭,再到屏蔽電源接頭的導(dǎo)線(xiàn)極性。
7)把所有的電子設(shè)備放在盒子里,確保你在盒子里鉆孔,以便電纜能出來(lái)。我放了一些漂亮的銀PG7出來(lái)的盒子。
恭喜你搞定了這個(gè)亂七八糟的家伙!
stepper motor datasheet.pdf
(140.25 KB, 下載次數(shù): 8)
2019-9-9 11:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
Torque_Curve.pdf
(133.26 KB, 下載次數(shù): 6)
2019-9-9 11:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
步驟4:機(jī)械裝配
1.jpg (52.61 KB, 下載次數(shù): 90)
下載附件
2019-9-9 11:33 上傳
2.jpg (76.83 KB, 下載次數(shù): 95)
下載附件
2019-9-9 11:33 上傳
3.jpg (14.26 KB, 下載次數(shù): 70)
下載附件
2019-9-9 11:33 上傳
你可以自由地用你自己的創(chuàng)造力去嘗試,把軸承和支撐部件連接起來(lái),這兩個(gè)軸由鋁型材制成。
同時(shí)激發(fā)你的創(chuàng)造力,設(shè)計(jì)支持步進(jìn)電機(jī)。NEMA17是一個(gè)標(biāo)準(zhǔn),看看數(shù)據(jù)表中的電機(jī)機(jī)械規(guī)格,確保你設(shè)計(jì)了一個(gè)很好的支架,并用正確的螺栓將其固定在上面。
您可以設(shè)計(jì)支架并將其三維打印,例如第一張圖片,也可以用鋁制作支架。你需要有人的幫助,有一個(gè)數(shù)控銑床這樣做。
你將需要相當(dāng)精確和明智地使用你的卡尺來(lái)設(shè)計(jì)這些零件。
小提示:當(dāng)你設(shè)計(jì)兩個(gè)連接在一起的部件時(shí),我建議你在兩個(gè)部件之間留有0.2毫米或0.1毫米的公差。
從圖片中獲取主要想法,并使用您最喜歡的cam軟件進(jìn)行自己的設(shè)計(jì),一旦您將三維模型通過(guò)電子郵件發(fā)送到您當(dāng)?shù)氐膄ablab,他們將非常樂(lè)意使其成為現(xiàn)實(shí)。
你可以在這里找到你當(dāng)?shù)氐墓S(chǎng)實(shí)驗(yàn)室。
步驟5:使用app inventor開(kāi)發(fā)應(yīng)用程序
1.jpg (47.17 KB, 下載次數(shù): 95)
下載附件
2019-9-9 11:36 上傳
2.jpg (21.51 KB, 下載次數(shù): 84)
下載附件
2019-9-9 11:36 上傳
3.jpg (32.59 KB, 下載次數(shù): 88)
下載附件
2019-9-9 11:36 上傳
我用一個(gè)叫做app inventor的偉大的在線(xiàn)生成器設(shè)計(jì)了這個(gè)應(yīng)用程序。
你可以在這個(gè)鏈接上找到這個(gè)應(yīng)用程序。(你可以用你的谷歌賬號(hào)登錄)
或者您可以在下面下載.aia文件并將其導(dǎo)入到app inventor中。
我會(huì)解釋一下這個(gè)應(yīng)用程序:
1)重要的初始位是通過(guò)藍(lán)牙將應(yīng)用程序連接到機(jī)器人。
有一個(gè)帶有藍(lán)牙標(biāo)志的列表選擇器。當(dāng)用戶(hù)單擊它時(shí),將顯示可用的藍(lán)牙列表,用戶(hù)可以從HC-06連接到藍(lán)牙客戶(hù)端,該客戶(hù)端實(shí)際上是藍(lán)牙網(wǎng)絡(luò)。
顯示一條消息,說(shuō)明連接已發(fā)生,并顯示以下消息,告訴用戶(hù)打開(kāi)電機(jī)以向系統(tǒng)供電。
2)我想評(píng)論的另一點(diǎn)是命令。
-應(yīng)用程序?qū)⑼ㄟ^(guò)藍(lán)牙向Arduino發(fā)送不同的單個(gè)字符。
-我使用了簡(jiǎn)單的大寫(xiě)字母:例如,字母“d”是將x軸向后移動(dòng)的命令。同時(shí),此命令還會(huì)將應(yīng)用程序上的小麥克風(fēng)圖標(biāo)(ImageSprite1)向后移動(dòng)4像素。
-一些命令是:
A→Y軸前進(jìn),麥克風(fēng)圖標(biāo)4像素前進(jìn)
O→家
“G”→將當(dāng)前X和Y位置保存在插槽1中
“H”→從插槽1 X和Y位置加載,并將電機(jī)和麥克風(fēng)圖標(biāo)移到那里
3)用戶(hù)可以在250px x 250px畫(huà)布上拖動(dòng)小麥克風(fēng)圖標(biāo),無(wú)需使用箭頭即可移動(dòng)電機(jī)。這是一個(gè)有趣的特性,它是由一個(gè)名為imagesprite1.dragged的長(zhǎng)邏輯塊完成的。
-它獲取在畫(huà)布上拖動(dòng)圖像的像素位置。
-當(dāng)250 px的最大值對(duì)應(yīng)于72°電機(jī)的62次運(yùn)動(dòng)以到達(dá)鋁直線(xiàn)導(dǎo)軌的末端時(shí),進(jìn)行線(xiàn)性比例。這個(gè)比例允許Arduino知道馬達(dá)必須向前/向后旋轉(zhuǎn)到圖標(biāo)被拖動(dòng)的相應(yīng)位置的次數(shù)。
-例如,如果系統(tǒng)最初處于起始位置,則圖標(biāo)位于x=0px和y=0px
-用戶(hù)拖動(dòng)X=70px和Y=100px位置的圖標(biāo)
-比例后,電機(jī)運(yùn)動(dòng)為x1=17和y1=24
-一個(gè)類(lèi)似“.17,24*;”的命令字符串被發(fā)送到hc-06
-Arduino固件隨后將解析此字符串并相應(yīng)地移動(dòng)電機(jī)。這意味著X軸電機(jī)將向前旋轉(zhuǎn)17倍72°,Y軸電機(jī)將向前旋轉(zhuǎn)24倍72°。
小心!為了避免在拖動(dòng)圖像時(shí)反彈,并確保在用戶(hù)實(shí)際釋放拖動(dòng)圖標(biāo)時(shí)執(zhí)行正確的命令,我還必須插入塊imagesprite1.touchup
-在此塊中,發(fā)送一個(gè)簡(jiǎn)單的“u”字符,以確保當(dāng)Arduino找到“u”字符時(shí),它將執(zhí)行上一個(gè)最終命令字符串,但忽略上一個(gè)跳轉(zhuǎn)的字符串:
例如:“.12,19*;.14,22*;.17,24*;u”要執(zhí)行的正確命令是“u”之前的命令,也就是說(shuō)“.17,24*”,在有兩個(gè)彈跳接觸之前。我必須把這個(gè)插進(jìn)去,以避免彈跳的接觸,這是混亂的一切。
我希望通過(guò)這個(gè)解釋?zhuān)隳芨宄乜吹綉?yīng)用程序中的邏輯塊。不過(guò),你想學(xué)多久就學(xué)多久。你在下面找到.aia文件;蛘咧皇前惭b它并下載.apk文件。
Mic Roller.rar
(4.98 MB, 下載次數(shù): 7)
2019-9-9 11:43 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
GraphicBluetoothstepmotor_copy.rar
(1.89 MB, 下載次數(shù): 8)
2019-9-9 11:43 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
步驟6:Arduino固件
1.jpg (58.91 KB, 下載次數(shù): 78)
下載附件
2019-9-9 11:45 上傳
下面是所有C編程愛(ài)好者的部分。請(qǐng)隨意下載Arduino代碼,您可能會(huì)注意到某些部分可能會(huì)被修改和簡(jiǎn)化,但它仍然工作得很好。
此代碼中使用的最重要的庫(kù)是laurb9的步進(jìn)驅(qū)動(dòng)程序庫(kù),您可以在github上的以下鏈接中找到它
https://github.com/laurb9/steperdriver網(wǎng)站
我們最初使用這個(gè)庫(kù)定義步進(jìn)電機(jī),然后旋轉(zhuǎn)它們。
另一個(gè)重要的庫(kù)是Arduino Uno的EEPROM庫(kù),用于保存X、Y和Z軸的位置。
我已經(jīng)盡力盡可能多地引用代碼,給出每一位的所有可能的解釋。不過(guò),下面我也將進(jìn)一步評(píng)論一些內(nèi)容。
1)在void setup()部分中,代碼只執(zhí)行一次。在Arduino代碼的以下部分中,檢查是否存在串行通信,直到用戶(hù)發(fā)送ON命令,才發(fā)生任何事情。用戶(hù)按下后,等待的下一個(gè)命令是:
O→主命令
“Z”→“關(guān)閉”命令
do //this cycle waits until someone click the ON button on the app{ if(Serial.available()>0) { state=Serial.read(); Serial.println(readString); //prints string to serial port out } }while(state!='V'); //system ON commanddigitalWrite(8, LOW); do //this cycle waits that the user push either Home Button or OFF button { if(Serial.available()>0) { state=Serial.read(); Serial.println(readString); //prints string to serial port out } } while((state!='O')&&(state!='Z'));
2)-你還記得在應(yīng)用程序中我們?cè)?jīng)發(fā)送命令'd'來(lái)向后發(fā)送馬達(dá)嗎?-你還記得我們把Y限位開(kāi)關(guān)連接到插腳10和GND?最初,我們檢查Y電機(jī)是否能夠?qū)嶋H后退:如果按下引腳10上的限位開(kāi)關(guān),Arduino將讀取GND,即使在應(yīng)用程序上按下后退按鈕,也不會(huì)發(fā)生任何事情。如果不按下限位開(kāi)關(guān),我們只需用簡(jiǎn)單的步進(jìn)指令將電機(jī)旋轉(zhuǎn)72°。旋轉(zhuǎn)(72)并減小1的y變量。if(limitYstate==HIGH) { if(c == 'B') //Y motor backward { stepperY.rotate(72); //the value is not negative because I mounted the motors upside-down in my assembly, sorry delay(5); Y--; Serial.println("Y value, "); Serial.println(Y); Serial.println("Y motor backward"); readString=""; } }3)這是一個(gè)難點(diǎn),基本上我們?cè)谶@里捕獲用戶(hù)拖動(dòng)應(yīng)用程序上的麥克風(fēng)圖標(biāo)時(shí)發(fā)送的字符串,然后我們解析這些數(shù)據(jù)。例如,也就是說(shuō),我們將子字符串轉(zhuǎn)換為整數(shù):x=“17”變成xm=17y=“24”變?yōu)閥m=24在這個(gè)過(guò)程中,我們將每個(gè)字符串加載到緩沖區(qū)數(shù)組中,最后使用atoi()命令獲取整數(shù)值。你還記得拖動(dòng)麥克風(fēng)徽標(biāo)時(shí)應(yīng)用程序中的彈跳問(wèn)題嗎?好吧,電機(jī)不會(huì)移動(dòng),直到在序列上讀到字符“u”,然后電機(jī)才會(huì)根據(jù)最后的xm和ym值旋轉(zhuǎn)。
if (c == ';') // character ; means that the user has dragged the microphone icon on the app { Serial.println(); Serial.print("captured String is : "); //we have captured the string with the X Y Z values, now we need to parse it and elaborate it, the following commands are for parsing Serial.println(readString); //prints string to serial port out, used for debugging ind1 = readString.indexOf('.'); //finds location of . ind2 = readString.indexOf(','); //finds location of , XString = readString.substring(ind1+1, ind2); //captures the string between charactes . and , ind3 = readString.indexOf('*'); //find location of * which delimits the end string YString = readString.substring(ind2+1, ind3); //captures the string between charactes , and * char buf1[XString.length()+1]; //create a characters array long as substring X XString.toCharArray(buf1, XString.length()+1); //load string X in the array buf1 char buf2[YString.length()+1]; //create a characters array long as substring Y YString.toCharArray(buf2, YString.length()+1); //load the string Y in array buf2 Xm = atoi(buf1); //convert the string in arra buf 1, which is a character with the value of X in an integer Ym = atoi(buf2); //convert the string in arra buf 2, which is a character with the value of Y in an integer readString=""; //clears variables for new input XString=""; YString=""; Serial.print("X = "); //we print everything on the serial monitor for debugging Serial.println(X); Serial.print("Y = "); Serial.println(Y); Serial.print("Xm = "); Serial.println(Xm); Serial.print("Ym = "); Serial.println(Ym); } if (c == 'U') //move the motors in the position of the X Y values read from the app movement { Serial.print("X = "); Serial.println(X); Serial.print("Y = "); Serial.println(Y); Serial.print("final Xm = "); Serial.println(Xm); Serial.print("final Ym = "); Serial.println(Ym); stepperX.rotate(-72*(Xm-X)); delay(5); stepperY.rotate(-72*(Ym-Y)); delay(5); X=Xm; Y=Ym; readString=""; }
finale4.rar
(3.12 KB, 下載次數(shù): 5)
2019-9-9 11:48 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
步驟7:結(jié)束
4.jpg (58.14 KB, 下載次數(shù): 77)
下載附件
2019-9-9 11:49 上傳
祝賀你!如果你到了這里,你可以好好拍一下自己的肩膀。如果你是一個(gè)音響工程師或音樂(lè)家,你可能也節(jié)省了一點(diǎn)錢(qián),因?yàn)樗{(lán)牙控制的麥克風(fēng)放置機(jī)器人可能是相當(dāng)昂貴的。我希望這個(gè)項(xiàng)目能激勵(lì)你做許多類(lèi)似的其他或升級(jí)這個(gè)。謝謝你的支持! |
-
2.jpg
(21 KB, 下載次數(shù): 173)
下載附件
2019-9-9 11:25 上傳
-
3.jpg
(22.36 KB, 下載次數(shù): 189)
下載附件
2019-9-9 11:25 上傳
評(píng)分
-
查看全部評(píng)分
|