您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>發(fā)光二極管>

滑動(dòng)塊凹槽 - 超酷DIY之創(chuàng)意線性時(shí)鐘

2012年03月21日 10:00 本站整理 作者:秩名 用戶評(píng)論(0

● 松緊帶上的結(jié)要能卡到你開(kāi)的滑動(dòng)塊凹槽上。如果怕不結(jié)實(shí)可以再用膠水粘一下,但是我發(fā)現(xiàn)只要把結(jié)塞進(jìn)槽里,它就不容易跑出來(lái)了。

  

/uploads/allimg/120321/100H9A05-33.png

?

  ● 電路部分主要由一塊Arduino板和一塊Adafruit Motorshield板組成。通常電機(jī)和Arduino板不宜使用同一個(gè)電源供電,但是在這個(gè)DIY中電機(jī)的功率很小,只需要很小的電壓就能驅(qū)動(dòng)。所以我就插了根跳線,讓arduino板的電源同時(shí)給Motorshield供電。

  ● 接下來(lái)又做了幾根4針腳的延長(zhǎng)線,因?yàn)槲业牟竭M(jìn)電機(jī)恰好有幾個(gè)那樣的接口,只是接口上的線稍細(xì)了些。

  ● 我對(duì)步進(jìn)電機(jī)了解也不太深,只能大致給童鞋們說(shuō)一說(shuō)基本原理:步進(jìn)電機(jī)中都有兩個(gè)線圈,對(duì)兩個(gè)線圈輸入一定頻率和極性的脈沖信號(hào),就能驅(qū)動(dòng)轉(zhuǎn)子向指定方向旋轉(zhuǎn)。在我所用的步進(jìn)電機(jī)上,這兩個(gè)線圈是相互獨(dú)立的,所以電機(jī)上引出了四根線。關(guān)于這種型號(hào)步進(jìn)電機(jī)的詳細(xì)介紹可以查閱 下面 這篇文章。

  

/uploads/allimg/120321/100H91452-34.png

?

  ● 兩根線連接到一個(gè)線圈上,另外兩根連到另一個(gè)線圈。借助萬(wàn)用表確定怎樣正確連線。然后一個(gè)線圈的兩根線連到Motorshield板的1、2輸出端上,另一線圈連到4 、5輸出端。這里要注意線的極性,不要接反。

  ● 測(cè)試程序時(shí)無(wú)需等待,可以直接把程序中millisPerSecond的值改為200,它的轉(zhuǎn)速就會(huì)變成原來(lái)的5倍。你也可以改變步長(zhǎng),步長(zhǎng)變化會(huì)改變每個(gè)周期電機(jī)移動(dòng)的步數(shù)。

  程序中有三個(gè)內(nèi)部時(shí)間定義,由三個(gè)整型變量組成:currentSeconds, currentMinutes 和 currentHours。這三個(gè)時(shí)間在程序開(kāi)始前預(yù)置,并隨著程序運(yùn)行自動(dòng)累加。

  程序的主循環(huán)語(yǔ)句記錄開(kāi)始時(shí)間,然后連續(xù)檢測(cè)時(shí)間是否超過(guò)1000毫秒。如果超過(guò)的話,內(nèi)部時(shí)鐘時(shí)間加1(doTick()),然后觸發(fā)子程序使時(shí)鐘上的指針移動(dòng)(renderTime())。

  doTick()子程序負(fù)責(zé)累加時(shí)間,由秒到分鐘,由分鐘到小時(shí),并且在必要時(shí)重置時(shí)間。

  renderTime()子程序的作用是把累加的時(shí)間轉(zhuǎn)換成時(shí)鐘面板上的時(shí)分秒的位置,更準(zhǔn)確的說(shuō)就是步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的步數(shù)。這個(gè)程序能判斷指針當(dāng)前位置,(啟動(dòng)時(shí)設(shè)定在00:00的位置,也就是時(shí)鐘最左邊的位置),通過(guò)指針當(dāng)前位置和初始位置的比較來(lái)決定步進(jìn)電機(jī)的運(yùn)動(dòng)方向。

  使用Arduino的內(nèi)部計(jì)時(shí)器有時(shí)會(huì)不太可靠。這個(gè)問(wèn)題有很多解決方法, Arduino主頁(yè) 中也介紹了一些讓計(jì)時(shí)更準(zhǔn)確的方法,也可以使用時(shí)間函數(shù)庫(kù)??紤]到這僅僅是一臺(tái)測(cè)試機(jī),我采用了一種比較簡(jiǎn)略的解決方案(這貌似是我想偷懶時(shí)的一貫借口哦)。

  因?yàn)槲沂褂玫氖茿dafruit公司的Motorshield板,所以便用AFMotor函數(shù)庫(kù)來(lái)驅(qū)動(dòng)電機(jī)。如果你通過(guò)其他電路驅(qū)動(dòng)步進(jìn)電機(jī),也可以選用Arduino步進(jìn)電機(jī)函數(shù)庫(kù)中的其他一些子程序來(lái)加快編程。如果你下載了我的程序,記得文件必須保存為.pde后綴,文件名可以自己修改。

  你所選的步進(jìn)電機(jī)不一定和我用的相同,為了使程序適用于不同的電機(jī)要進(jìn)行修改,主要有以下幾處:

  1、改變電機(jī)聲明變量的參數(shù)

  AF_Stepper hourHand(20, 1); // hours

  AF_Stepper minuteHand(20, 2); // minutes

  第一行,改變數(shù)值20可以設(shè)定電機(jī)旋轉(zhuǎn)一圈移動(dòng)的步數(shù)。一般可設(shè)置為200(就是每步1.8度)。如果你沒(méi)有所用電機(jī)的參數(shù)資料,那就只能通過(guò)實(shí)驗(yàn)來(lái)檢測(cè)了,我相信你肯定能夠設(shè)法得到這個(gè)數(shù)據(jù)。

  2、改變stepsPerClock的參數(shù)

  int stepsPerClock = 592;

  這一步可能比較復(fù)雜,因?yàn)檫@個(gè)數(shù)據(jù)取決于線性時(shí)鐘的長(zhǎng)度,電機(jī)每轉(zhuǎn)一圈的步數(shù)以及繞線輪的直徑,需要利用公式計(jì)算出來(lái)。我只計(jì)算了電機(jī)移動(dòng)100步時(shí)滑動(dòng)塊的移動(dòng)距離,通過(guò)它就能方便的算出滑動(dòng)塊移動(dòng)整個(gè)時(shí)鐘長(zhǎng)度時(shí),電機(jī)需要移動(dòng)多少步。這里注意應(yīng)在時(shí)鐘兩端留出余量,防止滑動(dòng)塊從時(shí)鐘兩端滑落。

  3、調(diào)整當(dāng)前時(shí)間:

  這個(gè)版本的程序中設(shè)置初始時(shí)間不太方便,下一版本中會(huì)進(jìn)行修改,使我們能用Arduino板上的按鈕來(lái)改變時(shí)間。

  int currentSeconds = 0;

  int currentMinutes = 55;

  int currentHours = 11;

  如果按照上面的值設(shè)定,時(shí)鐘啟動(dòng)時(shí)指針會(huì)指向11點(diǎn)55分。有不少改進(jìn)方法使設(shè)置初始時(shí)間更加智能,但是在原型中這個(gè)程序已經(jīng)夠用了。

  我通常設(shè)置的初始時(shí)間比當(dāng)前時(shí)刻晚一分鐘,這樣就留出了往arduino板上燒寫(xiě)程序的時(shí)間,刷新完程序等到恰好一分鐘時(shí)再按下復(fù)位按鈕。時(shí)鐘剛啟動(dòng)時(shí),分針可能會(huì)有些錯(cuò)位,偏離整分鐘的位置,不用擔(dān)心,用手調(diào)整到準(zhǔn)確位置就可以了。

  4、調(diào)整時(shí)間速度

  通過(guò)下面這一行代碼可以改變計(jì)時(shí)的速度。在測(cè)試時(shí)我把計(jì)時(shí)速度調(diào)整為實(shí)際的5倍。

  int const millisPerSecond = 200;

  上面這段代碼設(shè)定每秒鐘為200毫秒,而實(shí)際應(yīng)該是1000毫秒,因此若想調(diào)回實(shí)際時(shí)間時(shí),只要把200再改為1000即可。

  

/uploads/allimg/120321/100H9BX-35.png

?

  ● 我最開(kāi)始設(shè)想的時(shí)鐘使用彈簧作驅(qū)動(dòng),用石英機(jī)芯作時(shí)鐘信號(hào)源,再通過(guò)電磁鐵和齒輪傳動(dòng)鏈來(lái)帶動(dòng)表針移動(dòng)。

  ● 線性時(shí)鐘的原型完工后,我開(kāi)始考慮如何改進(jìn)。它想走進(jìn)千家萬(wàn)戶的話就必須要能適應(yīng)多種環(huán)境,所以我就想制作一個(gè)更實(shí)用的改進(jìn)版來(lái)對(duì)部件進(jìn)行測(cè)試。

  

/uploads/allimg/120321/100H92917-36.png

?

  ● 在改進(jìn)版本中,我將一段兩米長(zhǎng)的鋁制滑軌鋸成兩段,代替原來(lái)的pvc滑軌。我原本以為鋁制的滑軌更牢固,因此時(shí)鐘就能做的更長(zhǎng)??墒窃跍y(cè)試中,情況并非如此,鋁制滑軌帶來(lái)的改進(jìn)并不明顯。原因是鋁制滑軌并非在所有部分都那么光滑,尤其端部十分粗糙,因?yàn)橛捕雀?,想打磨光滑也很困難。如果最后還要對(duì)時(shí)鐘進(jìn)行包裝的話,那金屬滑軌就更沒(méi)有什么明顯的好處了。

  

/uploads/allimg/120321/100H911N-37.png

?

  ● 從卷簾上找一條珠鏈----因?yàn)闀r(shí)鐘長(zhǎng)一米,所以要把它連成一米長(zhǎng)的圓環(huán)---也就是說(shuō),所找的珠鏈至少要有兩米才行,這樣才可能連成這個(gè)鏈環(huán)。

  

/uploads/allimg/120321/100H93329-38.png

?

  ● 可是有個(gè)問(wèn)題,卷簾上只有一個(gè)珠鏈輪,所以我測(cè)繪了它,并和兩個(gè)支架和一些安裝在導(dǎo)軌上的滑動(dòng)塊一同進(jìn)行3D打印。

  ● 我在http://www.shapeways.com 上把設(shè)計(jì)圖3D打印成實(shí)體零件,下面就是這些零件的STL文件,我相信它們會(huì)對(duì)你有幫助的。

  

/uploads/allimg/120321/100H960b-39.png

?

  ● 剛開(kāi)始我還用輕木做了兩個(gè)滑輪。它們雖然可以工作,但是邊緣做不圓滑,所以就放棄了。

  

/uploads/allimg/120321/100H95225-40.png

?

  ● 這些設(shè)計(jì)似乎看上去很棒,樣子很漂亮,表面也十分光滑。但正如我猜的那樣,它們有個(gè)缺陷,那就是太重,那兩個(gè)小電機(jī)根本奈何不了它們。如果電機(jī)的轉(zhuǎn)矩能再大一點(diǎn)兒那就是絕配,所以雖然這想法十分簡(jiǎn)潔,現(xiàn)在我也只能放棄。

  

/uploads/allimg/120321/100H962L-41.png

?

  

非常好我支持^.^

(15) 60%

不好我反對(duì)

(10) 40%

( 發(fā)表人:diyfans )

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?