|
1.jpg (58.14 KB, 下載次數: 75)
下載附件
2019-9-9 11:14 上傳
2.jpg (47.17 KB, 下載次數: 85)
下載附件
2019-9-9 11:14 上傳
你好,
我的目標是建立一個藍牙控制的機器人,讓一個朋友在吉他/低音放大器前移動麥克風。這個機器人被音響工程師用來完美地將麥克風放在揚聲器前面的正確位置,以測試聲音,最終獲得最佳音質。
我知道我還需要設計和編寫一個帶有迷人用戶界面的應用程序,用于任何Android智能手機移動機器人。
該項目分為4個主要部分:
-電子硬件
-力學元素
-固件編程
-應用程序開發
這是一個非常多功能的項目,因為它可以自動和遠程移動其他東西,如一個微型投影儀,一盞燈或相機放在一個房間的天花板上。
我為這些照片道歉,因為我非常熱衷于制造機器人,所以沒有拍到令人滿意的照片。
請寫信給我,以便進一步解釋和評論。
玩得高興!!
披露:我很喜歡做這個項目,它對我很好,但我不負責任何損害,可能發生在你身上。用電工作的人可能會受傷。這個項目的所有硬件都在非常低的電壓(12伏)下工作,所以這是不可能發生的,但在電子元件中總是會過熱和燃燒。此外,在建造這樣一個機械移動機器人時,非常重要的是要非常小心,因為你的手可能會被困在移動部件中,最終可能會受傷。我推薦這個項目的人知道電子,機械和電氣工程至少在中級水平。
教程筆記:
第一步:電子“配料”
3.jpg (37.31 KB, 下載次數: 80)
下載附件
2019-9-9 11:18 上傳
4.jpg (101.59 KB, 下載次數: 82)
下載附件
2019-9-9 11:19 上傳
5.jpg (52.04 KB, 下載次數: 102)
下載附件
2019-9-9 11:19 上傳
6.jpg (20.54 KB, 下載次數: 79)
下載附件
2019-9-9 11:21 上傳
7.jpg (14.03 KB, 下載次數: 58)
下載附件
2019-9-9 11:21 上傳
8.jpg (4.81 KB, 下載次數: 87)
下載附件
2019-9-9 11:21 上傳
9.jpg (26.8 KB, 下載次數: 78)
下載附件
2019-9-9 11:21 上傳
10.jpg (40.92 KB, 下載次數: 94)
下載附件
2019-9-9 11:21 上傳
11.jpg (124.02 KB, 下載次數: 72)
下載附件
2019-9-9 11:21 上傳
硬件:
-1 Arduino Uno(最好是原版)
-1個HC-06藍牙模塊
-1個數控屏蔽
-3個電流為1A的A4988驅動器(或電流為2A的DRV8825)
-3 NEMA 17步進電機(具有良好的扭矩),例如本電機或本電機
-2個微動開關
-1個12V 60W的電源驅動程序例如
-1個EU連接器(示例)
-附加4極電纜
步驟2:機械零件
1.jpg (41.58 KB, 下載次數: 92)
下載附件
2019-9-9 11:24 上傳
F6EGHNXJZN5D4TG.LARGE.jpg (21 KB, 下載次數: 77)
下載附件
2019-9-9 12:03 上傳
FRUME71JZN5CL2T.LARGE.jpg (22.36 KB, 下載次數: 81)
下載附件
2019-9-9 12:03 上傳
該項目的大多數機械元件都可以很容易地在網上找到。然而,電機的塑料支架是由我的一個朋友用3d打印機投影和制造的,另一個朋友用他的cnc銑削了中央電機(z軸)的鋁支架。
您可以看到最終裝配(在步驟4中),使用您喜愛的三維設計cam軟件在鏈接處制作這些零件,并將文件發送到本地fablab。你可以在這里找到你當地的工廠實驗室。它們將幫助您制作3D打印和數控銑削零件。
機械材料:
-2件60cm鋁擠壓35mmx35mm直線導軌(可在線查找)
-8個方位(確保與圖片中的方位相同。適用于鋁制直線導軌)
-1個3D打印機皮帶
-2個滑輪(見圖)
-2個用于電機的3D打印機械支架,這些零件用螺釘固定在鋁導軌上
-用于中央電機(Z軸)的數控銑削鋁支架。設計它,讓你當地的工廠來做!
-任何電纜鏈或柔性電纜管,你可以在圖片中找到兩個例子
-安裝五金件的電箱
步驟3:電子組裝
1.jpg (57.42 KB, 下載次數: 83)
下載附件
2019-9-9 11:28 上傳
2.jpg (28.97 KB, 下載次數: 78)
下載附件
2019-9-9 11:28 上傳
3.jpg (38.02 KB, 下載次數: 105)
下載附件
2019-9-9 11:28 上傳
現在我們只需要把硬件連接起來。
1)將防護罩放在Arduino頂部
2)將HC-06藍牙模塊連接到防護罩頂部的插腳上。
小心!看圖片2,你可以看到:
HC-06的TX將轉到Arduino的RX
HC-06的RX將傳送到Arduino的TX
3)連接微動開關或限位開關。從下面的代碼中可以看出,微動開關的常開觸點必須連接在插腳9和GND之間,以限制X軸;插腳10和GND之間,以限制Y軸。您不需要外部上拉或下推電阻器,因為我們將使用內置Arduino的內部上拉電阻器。關于這個主題的更多信息可以在這里找到。
pinmode(9,input_pullup);
pinmode(10,輸入_pullup);
4)將步進電機連接到屏蔽上,但要注意,因為您可以看到步進電機表示為兩個感應器,請按照屏蔽銷的順序將感應器的右極連接到右銷。如果你搞砸了,不會發生什么嚴重的事情,但如果你搞砸了,要么馬達不動,要么會發出嘎嘎聲和震動!
對于我使用過的電機,電纜顏色如下:
A+黑色
A-綠色
B+紅色
B-藍色
我已經附上步進電機數據表,在那里你會發現所有的技術信息,因為你可以看到這些步進電機接受高達2A的電流每相。即使標稱電壓是2.2V,也不存在像我們這樣以12V的電壓驅動它們的問題。
小心!如果電機過熱,減小電流或插入降壓以降低電壓!
這個設置允許你使用電機的全部功率,你可以看到這些步進電機有一個很好的扭矩曲線。即使轉速(每分鐘轉數)增加,也會保持30ncm的扭矩。30ncm意味著在距離中心1cm處,它們可以旋轉約3kg的重量。這么小的馬達真讓人印象深刻!
5)驅動器頂部有一個小螺釘,用于限制流向電機的電流量。如果你使用的是A4988(紅色的),你可以保持電流的大小不變,通常是1A。或者在上面使用一個更大的散熱器,把它也增加到1.5A。
如果您使用DRV8825(紫色的),您可以在2A驅動電機。要測量電流,您需要一個串聯的數字萬用表或臺式電源。
有時如果可能發生馬達發出一點煩人的嗡嗡聲,你必須調節電流直到嗡嗡聲消失,這是由寄生頻率引起的。
6)如果您愿意,可以將電源的EU接頭放在盒子的預先制作的孔中,并進行一些焊接,以達到Arduino的車輛識別號針腳。12V線也意味著要連接到屏蔽上的藍色連接器,這是主線,它將給步進電機供電,并最終移動您的軸。
小心!如果你顛倒了電機屏蔽上的正負極,你會燒掉它,使其無法使用。務必用萬用表測量從電源到EU接頭,再到屏蔽電源接頭的導線極性。
7)把所有的電子設備放在盒子里,確保你在盒子里鉆孔,以便電纜能出來。我放了一些漂亮的銀PG7出來的盒子。
恭喜你搞定了這個亂七八糟的家伙!!
stepper motor datasheet.pdf
(140.25 KB, 下載次數: 8)
2019-9-9 11:31 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
Torque_Curve.pdf
(133.26 KB, 下載次數: 6)
2019-9-9 11:31 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
步驟4:機械裝配
1.jpg (52.61 KB, 下載次數: 90)
下載附件
2019-9-9 11:33 上傳
2.jpg (76.83 KB, 下載次數: 95)
下載附件
2019-9-9 11:33 上傳
3.jpg (14.26 KB, 下載次數: 70)
下載附件
2019-9-9 11:33 上傳
你可以自由地用你自己的創造力去嘗試,把軸承和支撐部件連接起來,這兩個軸由鋁型材制成。
同時激發你的創造力,設計支持步進電機。NEMA17是一個標準,看看數據表中的電機機械規格,確保你設計了一個很好的支架,并用正確的螺栓將其固定在上面。
您可以設計支架并將其三維打印,例如第一張圖片,也可以用鋁制作支架。你需要有人的幫助,有一個數控銑床這樣做。
你將需要相當精確和明智地使用你的卡尺來設計這些零件。
小提示:當你設計兩個連接在一起的部件時,我建議你在兩個部件之間留有0.2毫米或0.1毫米的公差。
從圖片中獲取主要想法,并使用您最喜歡的cam軟件進行自己的設計,一旦您將三維模型通過電子郵件發送到您當地的fablab,他們將非常樂意使其成為現實。
你可以在這里找到你當地的工廠實驗室。
步驟5:使用app inventor開發應用程序
1.jpg (47.17 KB, 下載次數: 95)
下載附件
2019-9-9 11:36 上傳
2.jpg (21.51 KB, 下載次數: 84)
下載附件
2019-9-9 11:36 上傳
3.jpg (32.59 KB, 下載次數: 88)
下載附件
2019-9-9 11:36 上傳
我用一個叫做app inventor的偉大的在線生成器設計了這個應用程序。
你可以在這個鏈接上找到這個應用程序。(你可以用你的谷歌賬號登錄)
或者您可以在下面下載.aia文件并將其導入到app inventor中。
我會解釋一下這個應用程序:
1)重要的初始位是通過藍牙將應用程序連接到機器人。
有一個帶有藍牙標志的列表選擇器。當用戶單擊它時,將顯示可用的藍牙列表,用戶可以從HC-06連接到藍牙客戶端,該客戶端實際上是藍牙網絡。
顯示一條消息,說明連接已發生,并顯示以下消息,告訴用戶打開電機以向系統供電。
2)我想評論的另一點是命令。
-應用程序將通過藍牙向Arduino發送不同的單個字符。
-我使用了簡單的大寫字母:例如,字母“d”是將x軸向后移動的命令。同時,此命令還會將應用程序上的小麥克風圖標(ImageSprite1)向后移動4像素。
-一些命令是:
A→Y軸前進,麥克風圖標4像素前進
O→家
“G”→將當前X和Y位置保存在插槽1中
“H”→從插槽1 X和Y位置加載,并將電機和麥克風圖標移到那里
3)用戶可以在250px x 250px畫布上拖動小麥克風圖標,無需使用箭頭即可移動電機。這是一個有趣的特性,它是由一個名為imagesprite1.dragged的長邏輯塊完成的。
-它獲取在畫布上拖動圖像的像素位置。
-當250 px的最大值對應于72°電機的62次運動以到達鋁直線導軌的末端時,進行線性比例。這個比例允許Arduino知道馬達必須向前/向后旋轉到圖標被拖動的相應位置的次數。
-例如,如果系統最初處于起始位置,則圖標位于x=0px和y=0px
-用戶拖動X=70px和Y=100px位置的圖標
-比例后,電機運動為x1=17和y1=24
-一個類似“.17,24*;”的命令字符串被發送到hc-06
-Arduino固件隨后將解析此字符串并相應地移動電機。這意味著X軸電機將向前旋轉17倍72°,Y軸電機將向前旋轉24倍72°。
小心!為了避免在拖動圖像時反彈,并確保在用戶實際釋放拖動圖標時執行正確的命令,我還必須插入塊imagesprite1.touchup
-在此塊中,發送一個簡單的“u”字符,以確保當Arduino找到“u”字符時,它將執行上一個最終命令字符串,但忽略上一個跳轉的字符串:
例如:“.12,19*;.14,22*;.17,24*;u”要執行的正確命令是“u”之前的命令,也就是說“.17,24*”,在有兩個彈跳接觸之前。我必須把這個插進去,以避免彈跳的接觸,這是混亂的一切。
我希望通過這個解釋,你能更清楚地看到應用程序中的邏輯塊。不過,你想學多久就學多久。你在下面找到.aia文件。或者只是安裝它并下載.apk文件。
Mic Roller.rar
(4.98 MB, 下載次數: 7)
2019-9-9 11:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
GraphicBluetoothstepmotor_copy.rar
(1.89 MB, 下載次數: 8)
2019-9-9 11:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
步驟6:Arduino固件
1.jpg (58.91 KB, 下載次數: 78)
下載附件
2019-9-9 11:45 上傳
下面是所有C編程愛好者的部分。請隨意下載Arduino代碼,您可能會注意到某些部分可能會被修改和簡化,但它仍然工作得很好。
此代碼中使用的最重要的庫是laurb9的步進驅動程序庫,您可以在github上的以下鏈接中找到它
https://github.com/laurb9/steperdriver網站
我們最初使用這個庫定義步進電機,然后旋轉它們。
另一個重要的庫是Arduino Uno的EEPROM庫,用于保存X、Y和Z軸的位置。
我已經盡力盡可能多地引用代碼,給出每一位的所有可能的解釋。不過,下面我也將進一步評論一些內容。
1)在void setup()部分中,代碼只執行一次。在Arduino代碼的以下部分中,檢查是否存在串行通信,直到用戶發送ON命令,才發生任何事情。用戶按下后,等待的下一個命令是:
O→主命令
“Z”→“關閉”命令
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)-你還記得在應用程序中我們曾經發送命令'd'來向后發送馬達嗎?-你還記得我們把Y限位開關連接到插腳10和GND?最初,我們檢查Y電機是否能夠實際后退:如果按下引腳10上的限位開關,Arduino將讀取GND,即使在應用程序上按下后退按鈕,也不會發生任何事情。如果不按下限位開關,我們只需用簡單的步進指令將電機旋轉72°。旋轉(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)這是一個難點,基本上我們在這里捕獲用戶拖動應用程序上的麥克風圖標時發送的字符串,然后我們解析這些數據。例如,也就是說,我們將子字符串轉換為整數:x=“17”變成xm=17y=“24”變為ym=24在這個過程中,我們將每個字符串加載到緩沖區數組中,最后使用atoi()命令獲取整數值。你還記得拖動麥克風徽標時應用程序中的彈跳問題嗎?好吧,電機不會移動,直到在序列上讀到字符“u”,然后電機才會根據最后的xm和ym值旋轉。
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, 下載次數: 5)
2019-9-9 11:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
步驟7:結束
4.jpg (58.14 KB, 下載次數: 77)
下載附件
2019-9-9 11:49 上傳
祝賀你!如果你到了這里,你可以好好拍一下自己的肩膀。如果你是一個音響工程師或音樂家,你可能也節省了一點錢,因為藍牙控制的麥克風放置機器人可能是相當昂貴的。我希望這個項目能激勵你做許多類似的其他或升級這個。謝謝你的支持! |
-
2.jpg
(21 KB, 下載次數: 173)
下載附件
2019-9-9 11:25 上傳
-
3.jpg
(22.36 KB, 下載次數: 189)
下載附件
2019-9-9 11:25 上傳
評分
-
查看全部評分
|