在上一篇文章中,我們構建了一個伺服控制的無線照明切換。今天,我們打算更上一層樓,嘗試創建一個水平相機支架或雲台。如果您還沒有準備好,請隨時查閱我們的第一個相機雲台項目:第1部分 和 第2部分。
預計完成時間:60分鐘
所需零件:
水平相機支架,通常稱為“穩定器”或“雲台”,過去僅用於高預算生產環境。由於無人機業界的繁榮和新興消費技術,現在利用配備雲台的無人機拍攝高品質的視訊已經非常普遍——用無人機或智慧手機都可以。市面上易於操作的相關消費產品有很多種。其中一些產品採用無刷馬達進行主觀視角拍攝(噪音、速度等)。
我一直想親手製作一個這樣的裝置。上次,我挑戰自己,構建了一個這種裝置,具體內容請參見這篇文章,但是結果卻並不理想……
該裝置有其自身的魅力……但是如果無法作為穩定器使用,那麼也毫無用處。我回顧了之前的專案,發現許多需要改進的地方。最大的問題就是我選擇的伺服馬達。之前的馬達功率不夠。其扭矩不足以操作智慧手機。
出於這個原因,在繼續其他工作之前我想先關注一下裝置規格選型。
首先,我們來看一下伺服馬達。雖然之前使用的伺服馬達SG90價格便宜且易於使用,但是顯然其扭矩不夠。因此,這次我們使用MG996R伺服馬達,其扭矩幾乎是之前馬達的5倍,可能動作會略微延遲/減慢。
另外,其他零件基本就是Arduino和加速度計,所以設定幾乎與上次相同。由於新伺服馬達較大,我用合適器為其供電。電路接線也是相同的。
對於支架的零件,您可以使用上次的木材和金屬配件。但這一次,我想利用3D列印來製作各個零件。這次我準備的三腳架帶有螺絲孔,即使伺服馬達較大,也可以保持穩定。我設計的小三腳架具有方向性,而且可以單手操作。
這是我3D列印的零件。組裝後的樣子如下所示:
請注意,如果使用ABS樹脂進行3D列印,那麼材料固化時會發生收縮。我列印零件時發現了這個問題。我注意到零件產生輕微變形,組裝時螺釘很難擰入。經過多次試驗和錯誤後,我決定分別列印安裝在伺服馬達上的零件。您可以在這裡下載適用於該支架的3D模型:https://github.com/DevicePlus/ServoGimbal
三腳架組裝如下所示:
至於外殼,這取決於您的相機類型等因素。此外,您還可以根據您的手機類型改進/更改零件的整體設計。
對於程式,我們有必要進行校準。首先將加速度感測器傾斜180度,並根據輸出值調整伺服馬達的傾斜度。所以我們稍微改進了第17個程式並進行了校準。讓我們用比較容易理解的方式輸出數位。
首先需要將加速度計傾斜180度,並根據輸出值調整伺服馬達的傾斜度來校準加速度計。讓我們稍微修改一下第1部分中的程式,以易於理解的方式輸出校準值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
int _maxX = 0; int _minX = 1000; int _maxY = 0; int _minY = 1000; int _maxZ = 0; int _minZ = 1000; //****************************************** //Program for acquiring accelerometer values //****************************************** void setup() { // initialize the serial monitor Serial.begin(9600) ; } void loop() { long x , y , z ; x = y = z = 0 ; x = analogRead(1) ; // X axis y = analogRead(2) ; // Y axis z = analogRead(3) ; // Z axis if(_maxX < x){ _maxX = x; } if(_minX > x){ _minX = x; } if(_maxY < y){ _maxY = y; } if(_minY > y){ _minY = y; } if(_maxZ < z){ _maxZ = z; } if(_minZ > z){ _minZ = z; } int centerX = (_maxX-_minX)/2+_minX; int centerY = (_maxY-_minY)/2+_minY; int centerZ = (_maxZ-_minZ)/2+_minZ; float rotateX = ((float)_maxX-(float)_minX)/180; float rotateY = ((float)_maxY-(float)_minY)/180; float rotateZ = ((float)_maxZ-(float)_minZ)/180; Serial.print("X:") ; Serial.print(_minX) ; Serial.print(" ") ; Serial.print(centerX) ; Serial.print(" ") ; Serial.print(_maxX) ; Serial.print(" ") ; Serial.print(rotateX) ; Serial.print(" Y:") ; Serial.print(_minY) ; Serial.print(" ") ; Serial.print(centerY) ; Serial.print(" ") ; Serial.print(_maxY) ; Serial.print(" ") ; Serial.print(rotateY) ; Serial.print(" Z:") ; Serial.print(_minZ) ; Serial.print(" ") ; Serial.print(centerZ) ; Serial.print(" ") ; Serial.print(_maxZ) ; Serial.print(" ") ; Serial.println(rotateZ) ; delay(50) ; } |
運行此程式後,啟動串口監視器,然後將感測器分別在X和Y方向-90度到90度之間傾斜,並確認輸出值。將輸出值的最小值和最大值除以180度,獲得的數值為加速度計傾斜值/度,這樣可以與伺服馬達的操作同步。
串口監視器上的數值在啟動伺服馬達的程式中有所反應。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
//******************************************** //Program 2 for acquiring accelerometer values //******************************************** #include <Servo.h> Servo myservoX; Servo myservoY; void setup() { // initialize the serial monitor Serial.begin(9600) ; myservoX.attach( 5 ); myservoY.attach( 6 ); } void loop() { int i ; long x , y; // read each data 100 times and average x = y = 0 ; for (i=0 ; i < 100 ; i++) { x = x + analogRead(1) ; // read x axis y = y + analogRead(2) ; // read y axis } x = x / 100 ; y = y / 100 ; int rotateX = (x-493)/1.30; //obtain anble myservoX.write( 90-rotateX ); Serial.print("X:") ; Serial.print(x) ; Serial.print(" ") ; Serial.print(rotateX) ; int rotateY = (y-488)/1.23; myservoY.write( 90-rotateY ); Serial.print(" Y:") ; Serial.print(y) ; // Y axis Serial.print(" ") ; Serial.println(rotateY) ; // Y axis delay(10) ; } |
這次我們有了足夠的功率,但是支架的運動仍然很有趣……
在上面的視訊中,用手握住裝置時,加速度計可以捕獲最輕微的搖動。即使感測器軸對齊,也會出現到一些不同角度的意外運動。解決這個問題對於平滑旋轉和未來改進來說至關重要。
運動(或搖動)與相機(或智慧型手機)的重量成比例。如果物體小而輕,行動就相對輕微;但是如果放置像智慧手機那樣較重的物體,搖晃就會很嚴重。還應該改進該程式以提高性能並提高可靠性。
我們的最終目標是創建一個像下面的產品一樣穩定的雲台:
似乎很多人都嘗試用無人機這樣做。有些無人機可以保持穩定的姿態,所以該裝置可能更適合無人機。
今天,我們重新製作了第1部分 和 第2部分構建的水平相機雲台。我們對雲台的機械設計進行了一些改進,但是隨著專案的進一步推進,我們發現了更多的挑戰。我們仍然無法順利控制雲台。現在,該裝置只能說仍處於測試階段,但是我們不會善罷甘休。我們一定會在不久的將來重新解決這個問題,並使其成為一個功能正常的裝置。