如何構(gòu)建一個用于3D掃描的電動轉(zhuǎn)臺
在這個項(xiàng)目中,我將向您展示如何構(gòu)建一個用于3D掃描的電動轉(zhuǎn)臺。這個DIY項(xiàng)目由三個主要部分組成:頂板、中央齒輪驅(qū)動板和底座。頂板保持靜止,作為放置待掃描物體的平臺。
在設(shè)計(jì)的核心,中間板的特點(diǎn)是一個內(nèi)部齒輪機(jī)構(gòu),隱藏在視線之外,這是由一個步進(jìn)電機(jī)驅(qū)動。這個齒輪板旋轉(zhuǎn)360度,包括一個安裝點(diǎn),用于附加一個外部3d打印的手機(jī)支架。這使得智能手機(jī)可以在保持固定距離的情況下圍繞物體平滑旋轉(zhuǎn)。
底板提供結(jié)構(gòu)支撐,容納所有必要的部件。頂、底板固定在一起,中間齒輪盤獨(dú)立旋轉(zhuǎn)。為了確保運(yùn)動平穩(wěn),系統(tǒng)用四個滾珠軸承加固。
掃描時,我使用了一款基于ios的應(yīng)用程序,但用戶可以選擇任何適合自己需求的軟件。這個項(xiàng)目的主要目標(biāo)是演示逐步建立一個電動轉(zhuǎn)臺的3D掃描過程。我們開始吧!
這個項(xiàng)目由三個主要的3d打印部分組成。第一部分為底座,包括三個軸承槽、一個步進(jìn)電機(jī)座、三個側(cè)面安裝支腿槽和一個電源開關(guān)槽。
第二部分是齒輪盤。它在中心有一個軸承槽,是唯一負(fù)責(zé)旋轉(zhuǎn)的運(yùn)動部件。在它的一側(cè),有一個安裝點(diǎn),用于連接手機(jī)座。
第三部分為頂板,放置待掃描物體。這塊是直接從它的中心固定到底板,確保兩者保持完全靜止。
此外,該項(xiàng)目還包括一個連接到步進(jìn)電機(jī)的小齒輪,三個固定軸承的引腳和三個安裝腿。此外,手機(jī)還配有加長臂和固定板。
如果你沒有3D打印機(jī),你可以使用PCBWay的3D打印服務(wù)來獲得這些零件。STL文件是免費(fèi)的。
在硬件方面,需要四個608 ZZ軸承來確保更平穩(wěn)的旋轉(zhuǎn)。需要一些螺栓和螺母來固定步進(jìn)電機(jī)和手機(jī)支架。最后,將使用流行的28BYJ-48愛好步進(jìn)電機(jī)。
我們將在接下來的步驟中介紹電子元件?,F(xiàn)在,讓我們開始建立固定軸承的基礎(chǔ)。
?將引腳插入底座的引腳槽中,但不要完全插入。
?然后將軸承插入軸承殼,并將銷完全壓入槽中。
?然后將3英尺的碎片插入基座的腳槽中。它足夠緊,但如果你愿意,你可以用M3螺栓固定它。
?取齒輪部件,將一個軸承壓入齒輪部件中心的軸承槽內(nèi)。
?將齒輪部分放在基座部分的頂部。
?放置頂板,使頂板部分的母槽與底座中心的公槽相匹配。
?最后,插入手機(jī)支架臂和支架,用M5螺栓和螺母固定。
完成了所有3D部件的裝配。手動將中間層齒輪部分轉(zhuǎn)動幾圈,若轉(zhuǎn)動平穩(wěn),拆下頂板和齒輪部分,將步進(jìn)電機(jī)放入槽內(nèi),用M3螺栓固定。然后插入步進(jìn)電機(jī)齒輪。這是所有!現(xiàn)在讓我們進(jìn)入電子步驟。
在電子方面,該項(xiàng)目使用ESP8266開發(fā)板,允許在需要時無線控制轉(zhuǎn)臺。對于步進(jìn)電機(jī)驅(qū)動器,使用流行的ULN2003。需要一個面包板和幾根跳線來建立電路。
為了給系統(tǒng)供電,將使用一個9伏的適配器,以及一些電容器和一個電壓調(diào)節(jié)器,為開發(fā)板提供5伏的電壓。一個電路圖已經(jīng)分享,以幫助您建立面包板設(shè)置。但是,將面包板放置在底座內(nèi)可能會干擾旋轉(zhuǎn)齒輪,并且松動的電線可能導(dǎo)致斷開或短路。
出于這個原因,將使用自定義PCB代替。先前設(shè)計(jì)的PCB非常適合這個項(xiàng)目。PCB上的電源連接器已經(jīng)更新,最新的版本現(xiàn)在可以在PCBWay項(xiàng)目頁面上找到。
現(xiàn)在,收集必要的組件和焊接工具——讓我們開始焊接吧!
如果PCB的焊接過程完成,將步進(jìn)電機(jī)驅(qū)動芯片插入板中。確保正確對齊-芯片上的缺口應(yīng)該與PCB上的缺口匹配。
接下來,將PCB放在基板上并連接步進(jìn)電機(jī)?,F(xiàn)在,是時候設(shè)置電源連接了。一個2針的開關(guān)用于接通和關(guān)閉電路,但這是可選的——你也可以直接連接電源適配器。
由于該項(xiàng)目使用較舊的PCB版本,因此將使用桶頂連接。然而,更新的PCB版本包括一個2針端子塊,更容易布線。將電源線剪成合適的長度,連接到開關(guān)上,并焊接固定。為了防止短路,我使用了電工膠帶,但為了更安全的連接,建議使用熱縮管。
一旦電路設(shè)置好,我們就可以開始編程了。打開提供的源代碼,并根據(jù)您的電機(jī)連接更新引腳號碼。這是一個簡單的代碼,使步進(jìn)電機(jī)在一個方向上旋轉(zhuǎn)。將代碼上傳到電路板后,將其插入PCB板并上電。
在第一次測試中,馬達(dá)熄火并發(fā)出一些噪音。如果發(fā)生這種情況,請嘗試反轉(zhuǎn)電機(jī)連接。您可以更改代碼中的引腳序列或簡單地翻轉(zhuǎn)電機(jī)連接器。
現(xiàn)在它工作了!馬達(dá)運(yùn)轉(zhuǎn)平穩(wěn)。接下來,把齒輪板在中心。如果旋轉(zhuǎn)仍然是平穩(wěn)的,附加頂板以及。
正如你所看到的,轉(zhuǎn)盤現(xiàn)在功能齊全,旋轉(zhuǎn)起來毫不費(fèi)力。在下一步中,我們將探索應(yīng)用程序端。
在研究iPhone的3D掃描應(yīng)用程序時,我在YouTube頻道Through Iris上看到了一個很棒的視頻。這個視頻回顧了多個應(yīng)用程序,對于這個項(xiàng)目,我選擇了Polycam。由于這個項(xiàng)目的主要焦點(diǎn)是電動轉(zhuǎn)盤,我將只介紹應(yīng)用程序的基本使用。如果你也想使用Polycam,我建議你在YouTube上觀看Andrew Sink的一步一步的指南。
下載應(yīng)用程序后,您可以關(guān)閉訂閱頁面,繼續(xù)免費(fèi)測試。在掃描界面中,您將發(fā)現(xiàn)兩種捕獲模式。在手動模式下,每次拍攝你都需要按下快門按鈕,而在自動模式下,你只需要在掃描開始和結(jié)束時按下錄制按鈕。
現(xiàn)在,把你想要掃描的對象放在旋轉(zhuǎn)工作臺的正中央。然后,把你的手機(jī)安裝在支架上,按下錄制按鈕,然后啟動轉(zhuǎn)盤。該應(yīng)用程序?qū)⒆詣硬东@和保存圖像在定期間隔的桌子旋轉(zhuǎn)。如果需要,還可以降低電機(jī)步進(jìn)速度,這可以提高掃描質(zhì)量?;谠创a中當(dāng)前的步進(jìn)速度,一個完整的旋轉(zhuǎn)捕獲大約60個圖像。
掃描完成后,停止錄制并按應(yīng)用程序中的上傳和過程完成掃描。現(xiàn)在,你的3D網(wǎng)格已經(jīng)準(zhǔn)備好了!看看結(jié)果,我對它的效果感到驚訝,即使是快速的測試掃描。有了更精確的設(shè)置,我相信細(xì)節(jié)會更好。
代碼
// wait for a single step of stepper
int delaytime = 2;
// ports used to control the stepper motor
// if your motor rotate to the opposite direction,
// change the order as {4, 5, 6, 7};
int port[4] = {15, 13, 12, 14};
// sequence of stepper motor control
int seq[8][4] = {
{ LOW, HIGH, HIGH, LOW},
{ LOW, LOW, HIGH, LOW},
{ LOW, LOW, HIGH, HIGH},
{ LOW, LOW, LOW, HIGH},
{ HIGH, LOW, LOW, HIGH},
{ HIGH, LOW, LOW, LOW},
{ HIGH, HIGH, LOW, LOW},
{ LOW, HIGH, LOW, LOW}
};
void rotate(int step) {
static int phase = 0;
int i, j;
int delta = (step > 0) ? 1 : 7;
step = (step > 0) ? step : -step;
for(j = 0; j < step; j++) {
phase = (phase + delta) % 8;
for(i = 0; i < 4; i++) {
digitalWrite(port[i], seq[phase][i]);
}
delay(delaytime);
}
// power cut
for(i = 0; i < 4; i++) {
digitalWrite(port[i], LOW);
}
}
void setup() {
pinMode(port[0], OUTPUT);
pinMode(port[1], OUTPUT);
pinMode(port[2], OUTPUT);
pinMode(port[3], OUTPUT);
}
void loop() {
rotate(100);
}
本文編譯自hackster.io