顯示具有 Arduino 標籤的文章。 顯示所有文章
顯示具有 Arduino 標籤的文章。 顯示所有文章

2015年2月17日 星期二

Arduino 翻書機

這如同上一篇一樣,都是我們家老闆讓我上班時間亂搞的小project. 
(我們家老闆真的很開明,這一點一定要廣告一下)

這裡面用了不少的馬達,不過控制與程式上其實都沒有什麼難度,所以我就只留影片與照片,不把那亂七八糟沒有整理的電路與程式碼秀出來了。

我們做完之後,最大的問題在於如何建立後續的中文OCR,因為目前聽說中文的OCR辨識度十分差。所以我們想把這個 funny project 放出來,看有沒有人願意跟我們合作OCR的部分。機構的部分我們都可以處理。為了圖書館接下來需要電子化保存舊書的需求。這是一個不賺錢,但可以保存人類知識的特別專案。
歡迎各路強者可以一起來開發Open Source的書本掃瞄機。

整體架構:電源供應 >> Arduino Mega 2560 >> Motor >>  翻頁、相機 

接得亂七八糟的線

2015年2月16日 星期一

Android 手機透過Bluetooth+Arduino 控制開關

用藍牙控制馬達這是已經十分常見的Arduino專題了:
(1) 首先在Android 上用 APP inventor 去發送藍牙的訊號,
(2) 然後 Arduino 接一個藍牙模組收到手機的訊號後,再命令使馬達動作。

嚴格來說這篇在技術上沒有什麼特殊焦點,
最主要展現的概念是,家用開關的自動化能不能直接疊上去?

當一般民眾不願意自己去拆帶有電流的開關時,
他能不能直接買一個「貼」上去?

當然這有點脫褲子放屁,要嘛就直接換一個手機可以控的開關就好。
例如有一個認識的朋友就在做這一類:
http://www.aengin.com/proinfo.php?id=4

但想到脫褲子放屁的不是只有我,你看看Lockitron
不是叫你換掉鎖,而是幫你再貼一個電子開關上去。
https://lockitron.com/ 

總之無線開關的需求是因為我窩在被窩裡不想起來關燈。
出遠門時天黑時,需要連上網打開家裡的電燈,或設定自動開燈的時間。

然後我也到kickstarter上看到類似相關的募資,用遙控器控制家用開關的

募資金額……0  (哀傷~~~)

所以我就放棄把機構改更好的動力了 (不然我是已經有新的機構的想法)。也不要建議我去做系統了,所有大的廠商都在做平台了 google nest、sentri、apple home skit、Samsung smarthome、小米…這是一個打群架的時代了,我們這種小人物能做的,只有小眾單品。

不過身為一位 Maker,做這樣的東西有時就只是為了趣味。我還是會把這樣的東西完成,自己做一個家裡的中控中心,開始用建置家裡的防火防盜Sensor與自動化系統。

---------------------------- 以下是做的過程與相關的筆記與參考資料---------------------------------
參考資料:
http://appinventor.mit.edu/explore/
http://blog.cavedu.com/programming-language/appinventor/appinventorandarduinowithbluetooth/
http://blog.cavedu.com/programming-language/appinventor/appinventorandarduinowithbluetooth2/

首先先上app inventor的網站註冊,在網路上直接寫程式,getting start的文章網路上很多,查一下就可以寫出來,我寫的內容如下:

2014年6月15日 星期日

木工作品(4):時光 NLight No.3



光如同時間一般地流動
流向重力的一方

當夜燈靜躺
光將消逝在寧靜之中





2014年5月11日 星期日

Arduino範例21:利用MPU6050取得空間姿態的row data


這次要練習的是GY-521的Sensor,其核心的晶片是MPU-6050。
MPU-6050是一個內包含三軸陀螺儀以及三軸加速計結合在一起的數位運動處理器(簡稱DMP),以 I²C 輸出6軸的旋轉矩陣的數位資料。若再包含三軸的電子羅盤可以處理複雜的9軸MotionFusion運算。

1、GY-521規格
核心晶片:MPU-6050模塊(三軸陀螺儀 + 三軸加速度)
供電電源:3-5v(內部低壓差穩壓)
通信方式:標準 I²C通信協議
晶片內置16bit AD轉換器,16位數據輸出
陀螺儀範圍:±250 500 1000 2000 °/s
加速度範圍:±2±4±8±16g


2、I²C函式庫
而MPU-6050的因為是靠 I²C溝通的,所以需要到I2Cdevlib去找相關的函式庫 library.

I2Cdevlib 是一個開放原始碼的專案,裡頭提供許多微處理裝置的函式庫供使用。要安裝該函式庫只需要到其 Github 頁面將原始碼下載下來,並將其中Arduino 資料夾內的內容通通放到 Arduino 工作目錄中的 libraries 資料夾中。做法如下:

    1. 到 I2Cdevlib 找到MPU6050的 library相關資料,點選Source的連結
    2. 連結到GitHub,點選右上角的Code的小方塊


   3. 進到下一個頁面之後,右下角有一個Download ZIP,就按下下載。
   4. 下載後的檔案,解壓縮,找到其中MPU-6050,丟到Arduino的library資料夾中。


Arduino範例20:利用BMP085擷取大氣壓力 (換算成海拔高度)


今天要練習使用的東西是BMP085的大氣壓力量測晶片。

1. 首先介紹Sensor
BMP085是一種超低能耗的壓力感測器,採用的8-pin 陶瓷無引線晶片承載(LCC)超薄封裝,可以通過I2C匯流排直接與各種微處理器相連,因此我們接線時,除了供應電源&GND,再接上SDA和SCL兩個Pin腳,就可以把其數位的訊號帶進Arduino的板子裡了。其規格如下:

壓力範圍:30 ~ 110 kPa (海拔 9000 至-500公尺
電源電壓:1.8V ~ 3.6V
解析度為:6 Pa (0.5米)
含溫度輸出,同時也已做溫度補償
I²C介面

2. 特別說明一下I²C
I²C (Inter-Integrated Circuit)是一種串列通訊匯流排,使用多主從架構,由飛利浦公司在1980年代為了讓主機板、嵌入式系統用以連接低速週邊裝置而發展。I²C使用兩條雙向開放集極 (Open Drain),一條為資料線(SDA),另一條為時脈線(SCL)。I²C允許多主多僕系統,所以電氣上,SCL 和 SDA二線要透過高接電阻接於正電源。

I²C具有以下優點:
(1) 不需額外的解碼電路。
(2) 資料傳送的協定可以用軟體規劃,具有高度的彈性。
(3) 具有 I²C 匯流排無論從系統中移去或加入,都不會影響其他裝置的功能。
(4) 匯流排是兩線式的匯流排,除錯、維修變得很容易。

但是它速度不快,只適合當 IC 間溝通的橋樑。通常用在一些簡單的系統或者晶片組 IC 間溝通(命令傳遞,不是資料傳遞)的場合看到她的影子。

3. 實際接線
所以說明一下SDA與SCL之後,我們就是把這兩條線接到BMP085對應的SDA與SCL上,記得不同種類的Arduino板子,其SDA與SCL的Pin腳位置是不一樣的。接法如下圖:

4. Code
這個Code有點複雜,我後來還是直接找別人寫好的過來看 Base from bildr.blog (下面有參考資料的來源),我把我看懂之後的註解寫上去,也增加自己的理解。

2014年5月10日 星期六

Arduino範例19:利用DHT11抓取溫度和濕度

前一陣子買了許多Sensor,趁最近有個空檔,把其中幾個Sensor接起來玩玩。
這一篇要練習的就是溫濕度計DHT 11。
先介紹Sensor
DHT-11 是一個結合濕度計和測溫元件量測週遭空氣環境,並與一個高性能8位元單晶片相連接,將所量測到的溫、濕度資料拆解成為數位訊號,再由 data pin腳將資料送出。使用上很簡單,但是抓取資料時必須要特別注意時間的掌控,而且每筆資料的抓取時間間隔要1~2秒鐘,不能太快。與 DHT-22 比較,DHT-11 較不精密與準確且溫濕度量測範圍不大,雖然如此,但對於學習與熟悉溫、濕度感測卻是綽綽有餘,傳輸的距離又可長達20m以上,而且比 DHT-22 較小且便宜許多,是十分方便的簡易測試元件。

其規格如下:
1、濕度測量範圍:20~90%RH;
2、濕度測量精度:±5%RH;
3、溫度測量範圍:0~50℃
4、溫度測量精度:±2℃
5、電源供應範圍: 3~5V
6、頻率不可超過:0.5Hz (每2秒一次)

接線的方法十分簡單,"+"接5V,"-"接GND,data pin接上要輸入的Pin腳。有人說因為數位訊號要接高data電位,所以把data pin外接4.7歐姆電阻至Vcc。不過我曾嘗試不接那4.7k 歐姆,試出來的效果看起來沒有太大的差別。


Code方面,先下載 library ,丟到Arduino的libraries裡面,然後再開Arduino IDE,去叫<dht.h>
通訊鮑率一般都使用9600 baud,然後把(DHT.humidity)和(DHT.temperature)用Serial.print出來。

  1. #include <dht.h>   
  2.   
  3. #define dht_dpin 2 //定義訊號要從Pin A0 進來  
  4.   
  5. dht DHT;   
  6.   
  7. void setup(){   
  8. Serial.begin(9600);   
  9. delay(300);             //Let system settle   
  10. Serial.println("Humidity and temperature\n\n");   
  11. delay(700);             //Wait rest of 1000ms recommended delay before   
  12.                         //accessing sensor   
  13. }
  14.   
  15. void loop(){   
  16. DHT.read11(dht_dpin);   //去library裡面找DHT.read11  
  17. Serial.print("Humidity = ");   
  18. Serial.print(DHT.humidity);   
  19. Serial.print("% ");   
  20. Serial.print("temperature = ");   
  21. Serial.print(DHT.temperature);   
  22. Serial.println("C ");   
  23. delay(1000);            //每1000ms更新一次   
  24. }  

最後可以看到的樣子就像下面這個樣子了,對照氣象局的 (溼度70%,溫度28度)
看來溼度差了一些些,不知是不是房間裡比較乾…


2014年2月22日 星期六

利用Matlab做逆向運動學以控制6軸Robotic Arm

相關閱讀
-------------------------------------------------------------------------------

台大機械碩士生 黃淵堯 蔡佳勳
關鍵字:Matlab, Arduino, RC Servo, Robotic Arm

夾取運動示範的影片:
----------------------------------------------------------------------------------------------------------
上個學期修習黃漢邦、林沛群老師的 "機器人簡介",剛好有一個專題作業,是把課程的知識應用在機械手臂的控制程式上。為此我們向大明助教商借已經組裝完的六軸機器手臂。機器手臂的構造,在之前的文章裡面有提過,這邊就不再贅述了。
以下直接進行我們控制部分規劃的介紹。

我們使用Matlab進行正逆向運動學計算,然後將各關節的角度輸出到Arduino,由Arduino來發送脈衝訊號來驅動RC伺服馬達來旋轉到特定角度。MATLAB的部分,我們使用兩個函式庫來進行運算,Arduino IO函式庫可負責Matlab和Arduino資料傳輸的工作 (使用方式可參考: http://goo.gl/TMp9Qx)。而Robotic Toolbox可以進行機器手臂運動學的計算以及軌跡的規劃 (使用方式可參考: http://goo.gl/eTyJKR)


2013年11月13日 星期三

利用LabVIEW做人機介面,再透過Arduino來控制機器手臂

相關閱讀

(1) Project:利用3D printer製作6軸機械手臂 (1)

(2) Project:利用3D printer製作6軸機械手臂 (2)

(3) Project:利用3D printer製作6軸機械手臂 (3) 最終回的測試

(4) 利用LabVIEW做人機介面,再透過Arduino來控制機器手臂

(5) 利用Matlab做逆向運動學以控制6軸Robotic Arm

-----------------------------------------------------------------------------------

7月的時候,曾經用3D印表機印出一隻塑膠的機器手臂,
那時是單純用Arduino+可變電阻來控制。

但這種方法不甚方便,有時想要從PC端控制,想要做演算,想要與其它裝置結合等等。
所以我一直想要用LabVIEW來控制機器手臂,這樣未來在LabVIEW上想做什麼就做什麼。

以下是我在LabVIEW裡拉的線,以及人機介面的部分:

2013年10月8日 星期二

Arduino與PC的通訊 (Serial.begin)

上一篇「在LabVIEW之中連結Arduino (二) by VISA」中用到Arduino的Serial語法。
所以我就找了一下Arduino序列通訊的語法整理在這一篇之中。

最主要的有四個指令:

Serial.begin ( ) - 開啟 Serial Port 並設定通訊速率 (baud rate)

Serial.print ( ) - 傳送資料到外部電腦
Serial.read ( ) - 接收來自外部電腦的資料
Serial.available ( ) - 取得 Serial Port 可讀取的資料位元組數目 (number of bytes),如果 Serial port 有資料進來,Serial.available ( ) 會回傳大於 0 的數值。

而我們主要的目標就是希望可以從Arduino傳資料到PC去,也可以從PC傳資料到Arduino來。
以下有三個範例來試試。

1. 將Arduino的值傳到 PC (Arduino >> PC)
如下圖接一個可變電阻來進行測試,
然後在Serial Moniter (紅色箭頭指的地方)查看在量測到的數值。
更進一步就可以參考「在LabVIEW之中連結Arduino (二) by VISA」
把這個資料傳到LabVIEW去處理。



Code
       void setup ( ) {
         Serial.begin(9600);
       }
       void loop() {
         int val = analogRead( 3 );      // 把Pin 2讀到的值寫入val的參數裡
         Serial.println(val);                  // 把參數 val 的值傳出去
       }


2013年10月6日 星期日

在LabVIEW之中連結Arduino (二) by VISA

有了第一篇「在LabVIEW之中連結Arduino」,我就更進一步想了解LabVIEW底下的程式怎麼寫的。一看原來是把Arduino當作VISA來撰寫程式,所以我就上網找看別人如何更直接用LabVIEW裡的VISA功能連結Arduino。參考的影片如下:
https://www.youtube.com/watch?v=giubFyJeZ-8

說明一下他的觀念:
(1) Arduino本來的運作就是出現在裝置管理員裡的 COM 通訊埠,用這通訊埠跟PC做溝通。
(2) 所以可以在語法裡靠著 Serial.begin 系列來達成與PC溝通的工作。
(3) 然後LabVIEW就是把這溝通的內容抓進來,用VISA的子功能來執行。
(4) VISA Read得到的就是字串的內容,再到LabVIEW裡自行轉換。

做法如下:
(1) 連結上Arduino,先接一個按鈕來測試。

Arduino範例18:用Arduino測試紅外線模組

上一篇「IR Sensor Module:用Arduino測試紅外線模組 (一)」是用半成品的TSOP-1738來接收紅外線。這一篇更懶惰,要直接買整個包裝好的模組,方便到一個不行。其中的比較器是LM393,整個性能更穩定。這個售價約100 NTD的模組,號稱可用中間電阻調整檢測距離 2~60cm,檢測角度為35°。


接線就更簡單了,也不用特別要求輸出38k Hz的光波,
固定供與5V~3.5V的電源就可以直接從Vout收到訊號。

2013年10月3日 星期四

Arduino範例17:用Arduino+LabVIEW 測試紅外線收發 (TSOP-1738)

這一陣子想嘗試一些露天拍賣賣的一些模組
包括紅外線、超音波、霍爾元件、溫度感測、陀螺儀等等
真的覺得這個時代太方便了,以前這些感測器都還要自己配適合的電路
現在都有人直接做好一個模組在販賣了,而且品質比自己兜的穩定多了,價格也十分便宜!

參考網站:
http://coopermaa2nd.blogspot.tw/2011/03/1.html
http://coopermaa2nd.blogspot.tw/2011/03/irremote.html

一開始我也先去光華買了:
(1) 38k Hz的紅外線接收器 TSOP-1738
(2) 紅外線二極體發射器,波長940nm

如下接圖:
 

2013年9月28日 星期六

Arduino範例16:讓超音波量測結果顯示在 LCD 銀幕上

P.S.感謝本次程式由林群鈞指導撰寫

繼「Arduino: 使用 16x2 的 LCD 銀幕」、「Arduino: 測試超音波模組(HC-SR04)
這次要結合這兩項東西,讓量測的結果顯示在LCD的銀幕上。
詳細的LCD 規格與 HC-SR04的規格請參考前面兩篇。

接線圖
LCD端的接法跟上一篇一樣,至於HC-SR04則把Pin腳移到Pin6與Pin7上。


2013年9月26日 星期四

Arduino範例15:使用 16x2 的 LCD 銀幕

實驗目的:本篇要應用Arduino 與 16x2 的 LCD 銀幕連接。

依照經驗,這種網路上買的不知名LCD銀幕至少都可以支援ASCII的文字。而除了顯示訊息外,IDE裡的 example 還有教我們還可以做訊息捲動 (往左和往右捲動)、顯示游標等。

接線圖
以下我整合Pin腳說明與接線圖,特別注意的是Pin 3要接一個可變電阻,來調背光強度,不然程式Loading進去之後,有可能看不到顯示的字。

另外將 LCD 的 RS, Enable, D4, D5, D6, D7 依序接到 12, 11, 5, 4, 3, 2 等腳位上,這是被子程式寫好的腳位,要改就要連 <LiquidCrystal.h>一起改,所以先不要動。


程式碼很簡單,因為<LiquidCrystal.h>都已經寫好了,我們只需要 lcd.write() 或 lcd.print() 就可以把字顯示在上面了。

2013年9月25日 星期三

Arduino範例14:測試超音波模組(HC-SR04)

這次要使用的超音波模組是HC-SR04,這是網拍上最常見的模組。
另外有人可能也會買到3 Pin的模組 (我查不到型號),那就是trig與echo同一個Pin。
回到HC-SR04來看,我找到它的型錄,了解一下它的用法:

Ultrasonic ranging module HC - SR04 provides 2cm - 400cm non-contact
measurement function, the ranging accuracy can reach to 3mm. The modules
includes ultrasonic transmitters, receiver and control circuit. The basic principle
of work:
  • Using IO trigger for at least 10us high level signal. 
  • The Module automatically sends eight 40 kHz and detect whether there is a pulse signal back.
  • IF the signal back, through high level , time of high output IO duration is the time from sending ultrasonic to returning.
  • Test distance = (high level time×velocity of sound (340M/S) / 2. 
  • When tested objects, the range of area is not less than 0.5 square meters and the plane requests as smooth as possible, otherwise ,it will affect the results of measuring.
  • Suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.

給trig pin一個10 us TTL pluse, 模組會發射8個40k Hz的聲波出去,然後量測訊號是否回來。如果有收到TTL的高電位訊號,那Echo會送出超音波來回的時間,使用者再自己計算音速換算距離。也就是「距離(cm) = 時間(us) / 2(來回) /29.1 (m/s轉換cm/us)」。其它要注意的是量測物體最好大於0.5公尺平方,而trigger時間最好大於60ms,以免trig與echo干擾。


註:什麼叫TTL pulse可參考以下網址
http://digital.ni.com/public.nsf/allkb/ACB4BD7550C4374C86256BFB0067A4BD

接線圖
接線的方法很簡單,就把 Trig 接上要送 10 us 的Pin腳。Echo 接到要收訊號的 Pin腳。



2013年9月24日 星期二

一些常用的Arduino語法筆記

看了Arduino的範例程式也好一陣子,但最近因為單純一行一行下來的command flow不夠用。
就上網找了一些語法的網站來看,如下:
1. 官方:http://arduino.cc/en/Reference/HomePage
2. 中文語法手冊:http://www.game7777.net/doku.php?id=arduino:arduinoreference

因為自己不太懂,所以給自己留一點筆記:

一般會先做(1) Pin腳的宣告,(2) void setup (),(3) void loop ()
然後跟資料定義有關的:int, unsigned int, log, const, #define
跟loop結構有關的:if...else架構,while迴圈,for迴圈

int
整數是基底資料型別,佔用2位元組。
整數的範圍為-32,76832,767 -2^15 ~2^15)-1
整數類型使用2的補數方式存儲負數。
最高位元通常為符號位元,表示數的正負。
其餘位被取反加1”(此處請參考補數相關資料,不再贅述)

unsigned int
unsigned int(無符號整型)與整型資料同樣大小,佔據2位元組。
它只能用於存儲正數而不能存儲負數,範圍 0~65,535 (2^16) - 1)

無符號整型和整型最重要的區別是它們的最高位元不同,既符號位元。
Arduino整型類型中,如果最高位是1,則此數被認為是負數,
剩下的15位為按2的補數計算所得值。

long
長整數型變數是擴展的數位存儲變數,它可以存儲32位元(4位元組)大小的變數,
-2,147,483,6482,147,483,647

const
const關鍵字代表常數。
它是一個變數限定詞,用於修改變數的性質,使其變為唯讀狀態。
這表示該變數就像任何相同類型的其他變數一樣使用,但不能改變其值。
如果嘗試為一個const變數賦值,編譯時將會報錯。
const關鍵字定義的常數,遵守 variable scoping 管轄的其他變數的規則。
這一點加上使用 #define 的易犯錯誤,使 const 關鍵字成為定義常量的一個的首選方法。

#define
#define它允許程式設計師在程式編譯之前給常數命名。
Arduino中,定義的常數不會佔用晶片上的任何程式記憶體空間。
在編譯時編譯器會用事先定義的值來取代這些常數。
然而這樣做會產生一些副作用, 例如,一個已被定義的常量名已經包含在了其他常數名或者變數名中。 在這種情況下,程式內的常數將被 #defined 定義的數值或字串所取代。
通常情況下,優先考慮使用 const 關鍵字替代 #define 來定義常數。

例子
#define ledPin 3
//在編譯時,編譯器將使用數值 3 取代任何用到 ledPin 的地方。

注意:
#define 聲明後不能有分號。
如果存在分號,編譯器會拋出語義不明的錯誤,甚至關閉程式。
#define ledPin 3; //這是一種錯誤寫法
同樣的,在 #define 聲明中包含等號也會產生語義不明的編譯錯誤從而導致關閉程式。
#define ledPin = 3 //這是一種錯誤寫法

if(條件判斷語句)和 ==!=<>(比較運算子)
if 語句與比較運算子一起用於檢測某個條件是否達成,如某輸入值是否在特定值之上等。

2013年9月23日 星期一

在LabVIEW之中連結Arduino

在單獨使用Arduino的板子一陣子之後,
想說來練習一下用LabVIEW來連接Arduino,把Arduino當作低階的DAQ卡來使用。
所以就上網找了一些參考資料:

題外話:
玩了一陣子之後,發覺網路上的神人實在是太多了
我這種機械底子的人跟本看不到這些寫程式神人的車尾燈……

言歸正傳,參考資料裡其實寫得很清楚了,該如何弄了:

第一,你本來就要有LabVIEW的程式(2009以上) + VISA模組 (這非預設的)
第二,你要有Arduino 的 IDE程式與板子
第三,安裝JKI VI Package Manager (VIPM),這是要給LabVIEW下載Arduino的模組
第四,用VIPM下載LabVIEW Interface for Arduino
第五,Arduino上需要另外安裝一個檔案才能與LabVIEW做序列溝通。
    在<您的LabIVEW安裝資料夾>\vi.lib\LabVIEW Interface for Arduino\Firmware\LVIFA_Base中,
    找LVIFA_Base.ino這個檔案,透過Arduino IDE load到你的Arduino板子上。
第六,最後打開LabVIIW看到下圖,就代表成功了。

不過在開始使用前,要先去裝置管理員或LabVIEW的Max裡看看設備是否都連上線了。
還有LVIFA_Base.ino是否已經load進去了。

首先先來寫一個範例,架構主要分成三個部分:
(1) Initial:定義port、Serial begin、Board type等等初使條件
(2) While Loop:原本程式中void setup ()與void loop ()都在這裡寫
(3) Close:結束loop時,還要再關掉通訊

心得:
1. 有這個東西真的很方便,就可以直接寫LabVIEW做Arduino的及時通訊
    而我也打算用LabVIEW對上次的製作的機械手臂做控制。
2. 基本這個套件的底層還是用VISA在寫的,把Arduino當作通訊序列的裝置在溝通。
    但這樣底層的溝通就容易發生未知的情況,尤其是Data Flow與Command Flow之間的轉換。
3. LabVIEW能夠支授的子程式不多,例如超音波Arduino就有現成有人寫好的Ultrosonic.h
    但LabVIEW只有少少的幾樣,如Servo motor、Stepper motor幾樣常用的。
    對於快速開發將會耗太多時間在自己寫子VI上。
           
以上供各位參考

2013年7月5日 星期五

Project:利用3D printer製作6軸機械手臂 (3) 最終回的測試

相關閱讀

(1) Project:利用3D printer製作6軸機械手臂 (1)

(2) Project:利用3D printer製作6軸機械手臂 (2)

(3) Project:利用3D printer製作6軸機械手臂 (3) 最終回的測試

(5) 利用Matlab做逆向運動學以控制6軸Robotic Arm

-----------------------------------------------------------------------------------------------------

在完成供電的問題之後,就把可變電阻接一接,進行最後的測試。
以下第一步影片就是6個軸個各運作的影片。

任務:移動橡皮擦到目的地。

2013年7月2日 星期二

Project:利用3D printer製作6軸機械手臂 (2)

相關閱讀

(1) Project:利用3D printer製作6軸機械手臂 (1)

(2) Project:利用3D printer製作6軸機械手臂 (2)

(3) Project:利用3D printer製作6軸機械手臂 (3) 最終回的測試

(5) 利用Matlab做逆向運動學以控制6軸Robotic Arm

--------------------------------------------------------------------------------------------------

上一篇先發布了ME BOM,與爆炸圖,現在則先看看第一個抓取動作的影片:

在整個的流程中,我先從機構開始畫起,依照原圖修改。
(1) 原圖使用了很多自攻螺絲,但它很容易多拆裝幾次就壞掉了,所以塑膠件我會習慣用螺絲螺母鎖固,以方便地來拆裝。
(2) 我只是要實驗性質,所以底座原本設計360度的旋轉,我改成180度就好。
(3) Gripper的齒輪,我也改了齒形,換成模數2.0,14齒的齒輪。
 

再來就開始建立BOM表與規劃列印順序,這比較像是生管,因為像底座這種需要長時間的列印的,盡量放在半夜印,這樣隔天早上醒來就可以拿了。還有配色的要求,總沒有人希望自己的作品醜醜的,所以會依照CAD裡已設計的顏色來排程。而在BOM表完成之前就要記得訂購馬達之類的電子電機元件,因為全力來印的話不到24小時就完成了,電子料要及時進來測試!

第三步就是整修毛邊與試組裝,因為每個3D的能力不太一樣,我之前買的並不是太高檔的,所以精度也有點差,所以每印完一個要試著與對手件組合一下,誤差太大的要修改。

再來伺服馬達來的時候,一定要先測試,因為MG995這種太常見的RC馬達品質參差不齊。我這次就遇到兩個有問題的馬達,最後還要再另外去別的地方買。(以後網購也不要從太遠的地方買來,壞掉要換十分不方便。) 然後讓Arduino開始去測試每一個的性能,看多少PWM的值會轉到多少角度,先取得馬達性能再做安裝。


在安裝的時候,就是看當初設計好不好的時候,有些地方設計得十分難裝,我也是從這其中獲得一些教訓。其實也是因為待在前公司比較沒有機會從頭到尾、從無到有自己設計一個產品。這隻手臂算是真的我自己設計的產品吧!

目前我己完成組裝的部分,算是硬體的部分就大致完成了。然後程式的部分就利用Arduino接可變電阻當作輸入訊號,來控制馬達的角度。不過這時候問題才來,馬達的好壞這時立即看到,沒有辦法穩定地轉動,抖動的問題是手臂的致命傷。
所以我才說馬達是手臂好壞的重點:穩定、精度!

接下來另一個重點是控制的介面,但搞一個介面程式不在我的計劃之中,所以雖然我覺得那也是很重要的東西,但就先放在一旁就好。

2013年7月1日 星期一

Project:利用3D printer製作6軸機械手臂 (1)

相關閱讀
(1) Project:利用3D printer製作6軸機械手臂 (1)

(2) Project:利用3D printer製作6軸機械手臂 (2)

(3) Project:利用3D printer製作6軸機械手臂 (3) 最終回的測試

(5) 利用Matlab做逆向運動學以控制6軸Robotic Arm

---------------------------------------------------------------------------------


將近半個月沒有PO文了,因為想在正式去找工作之前完成一個Project,為這段不食人間煙火的日子劃下一個句點!所以結合了3D印表機 + Arduino + RC Servo Motor,第一次嘗試6軸機械手臂的製作。這個機械手臂以馬德里Carlos III大學Antonio Castro Gómez的手臂為原型,重新進行設計與修改。包括更換馬達為最用的MG995、減少一顆底盤的馬達、把多餘的拆件合併,自攻螺絲換螺帽等等。接下來會會介紹製做的過程,拋磚引玉希望同時也有製作的人一起來討論。

主要分成兩個Topic:(1)機構設計 (2)馬達控制。本文先討論機構設計的部分。
機構設計的部分:我把整隻手分成五個部分:
(1) Base:包括底坐的Joint-1(對Z軸旋轉) 與 Joint-2(對Y軸旋轉),馬達皆是MG995。
(2) Humerus:連結Base與Elbow之間的連桿,沒有攜帶馬達。
(3) Elbow:包括Joint-3(馬達MG995)與Joint-4(馬達MG90S)
(4) Wrist:Joint-5 (MG90S)、Joint-6 (MG90S)
(5) Gripper:夾持的手指端 (MG90)

原圖的.STL請至http://www.thingiverse.com/thing:30163下載
而我修改過的圖暫時先不放上來,因為還在做一些Design for assembly & manufacturing.

我先Release ME BOM出來,有興趣的人可以自行參考開發自己的。
以下是爆炸圖:
(1) Base Explore