MIT熱門課程「如何製造(幾乎)任何東西(How to Make (Almost) Anything)」修課經驗分享

「如何製造(幾乎)任何東西 (How to Make (Almost) Anything,以下簡稱HTMAA)」是由自造者運動教父、麻省理工學院位元與原子中心(Center for Bits and Atoms,簡稱CBA)主任尼爾‧格申斐德(Neil Gershenfeld)於麻省理工媒體實驗室(MIT Media Labs)所開設的課程。每年位於全世界的FabLab或相關單位,都可遠端參與同樣由Neil授課的Fab Academy,進行內容相同但時程較長的線上課程,藉此連結起全世界的自造者(Maker)社群。臺灣的Fablab Taipei從2014年至今也都有加入Fab Academy的全球連線行列喔!

不在MIT又想要參與這門課的話,就參加FAB ACADEMY吧!

HTMAA過去是同為建築與規劃學院(School of Architecture and Planning,簡稱SA+P)的藝術、文化與科技(Art, Culture and Technology,簡稱ACT)項目的必修課程,今年改為(保障名額)選修。這門課實際上是以每週介紹一個與數位構築(Digital Fabrication)有關的主題來進行,並利用既有設備與工具來完成作業。每年HTMAA的課程設計與內容會隨著科技發展與議題趨勢而有所調整,來自不同背景的修課學生被分成不同區塊(Section),例如ACT跟Media Labs是屬於CBA Section,另外還有建築學院、其他MIT學生與哈佛學生的Section,總共約80位學生(欲加選人數超過400位),各自依照Neil所強調的學習曲線(Learning Curve)來發展個人計畫。

幾乎每堂課都會有的show and tell時間,Neil會讓學生把該週成果帶來分享,壓力山大。

這門課的作業繳交方式,是修課學生每週要把自己的學習歷程、作業等記錄在自己所撰寫的網頁上(換句話說不管本來會不會,學生都得掌握基礎的CSS與HTML語法),並用版本控制工具Git來更新。授課網站是Neil自己架設的資料大匯集,上面有許多參考資料與修課同學成果網頁。在MIT的課程每週會有一次的實作補充,但不一定跟該週的主題有關,有時會是無法涵蓋在學期中,但同學們感興趣或剛好有助教擅長的主題,例如工程模擬、動畫(像Unity跟Three.js)、織品、路徑規劃等。

樸實無華的課程網站

做為一個社會科學背景、音樂專業且脫離學校多年的藝術工作者,在此將概述我修習HTMAA這年(2019)的課程內容與實作照片,以供有興趣的創作者朋友參考。下面連結是我的課程紀錄頁面。

Week 1 課程介紹與電腦輔助設計(Computer-Aided Design

第一週正式課程,除了介紹課程大綱Fab Academy與每週一次實作課外,課程目標是讓學生了解「電腦輔助設計(縮寫為CAD)」的優勢與發展脈絡。Neil依序介紹了許多機器的發展歷史(課程網頁中有連結可點入),然後切入實務面列舉當代流行的CAD軟體工具如Fusion360、FreeCAD、SketchUp等,以及像Constrian等在操作軟體時會用到的設定。因為作業繳交是統一所有修課同學利用Git來更新自己的修課網站,Neil花了些時間描述了版本控制的重要性,並提供Git線上教學頁面讓同學自行研究。雖然沒有限制學生使用的軟體,但Neil通常會特別介紹與推薦開源(Opensource)工具,像是GIMP、Blender這類軟體。不過有鑒於開源工具通常會缺少詳盡的官方文件,麻瓜如我最後還是選擇學生可免費使用的Autodesk系列軟體。

第一週的回家作業,是把個人課程紀錄網站框架完成、用Git更新到各自組別的Repository,並下載與熟悉CAD軟體操作,用以描述自己的期末專案。

Week 2 專案管理與電腦控制切割(Project Management, Computer-Controlled Cutting

學生可免費使用的Autodesk Fusion360軟體
想坐凳子結果做出來太小,沒辦法真的坐在上面。

上週大家都下載並安裝了自行選擇的CAD軟體,這週開始就是利用雷射切割與Vinyl Cut等設備將數位設計實體化。MIT Media Labs內有專門的工作區域,學生需要受過安全訓練後才可獲得機器的使用權。這週作業除了基本的雷切、雷雕與不同材質測試,還包括要應用參數式設計來製作一個立體的、模組化的結構體。這算是我第一次操作這類機器(以往在臺灣都直接發給廠商),看到設計變成實體成品還是滿感動的。

許許多多的Vinyl Cut成品

因為大多數學生是第一次使用Git,所以各自更新網站的過程發生許多慘烈意外,例如Push上去的檔案過大、把其他人的資料刪掉、路徑不對…等等,可說是狀況不斷。Neil相當沮喪地花了些時間來講解他認為原本不需要特別在課堂上說明的內容,並安排了一次實作課專門介紹版本控制。

總算學會了基礎的雷射切割操作(的皮毛)

經過這週的實作,我才稍微能理解這門課的運作邏輯。每週上課主題都是很快速地帶過、讓學生實際操作有個印象,但如果要從無到有設計一個功能或成品,其實仍舊仰賴大量經驗與練習。例如我雖然能做出筆筒,但要完成更複雜的結構就會需要更了解參數式設計的邏輯與軟體功能。要不要繼續投入時間是個人選擇,但至少你會知道有這樣的工具跟選擇,即使未來要發包出去也會更知道該如何溝通與掌握進度。

練習Rastering的過程我第一次打開了Photoshop跟illustrator軟體來修圖…

Week 3 電子製造(Electronic Production

這週開始接觸電子電路設計與製作。當時我還沒有意識到其實這門課有一半的課程內容都跟電子電路與程式設計有關。這週實作內容包括操作Neil與CBA所開發的mods圖形介面(GUI)工具、製作電路板、焊接、燒錄程式等。

Neil很自豪但我覺得很難用的mods工具…以Websocket跟機器溝通

mods是一個建立於網頁上的多用途工具,可通過Websocket以udp來跟其他軟硬體溝通。這週我們主要是用其來處理PCB的圖像檔案來生成Milling Machine的Toolpath路徑,並設定與EndMill有關的參數。如果參數設定不好,在製作電路板時,很可能會發生銅箔被弄斷或是沒有清乾淨的狀況。

我們的milling machine是Roland的SRM-20
那時候還不知道應該透過放大鏡來觀看焊接過程,所以焊的很醜。

HTMAA主要使用的電路設計架構是AVR微控制器,學生需要使用Atmel的晶片例如ATtiny44, ATtiny45等IC來宣告GPIO腳位以完成各項任務。Neil禁止大家使用Arduino或樹莓派這類已套裝好、預先讀取各種Library的現成工具,他認為這些產品有太多無謂的資源浪費、成本效益較低。AVR Programming跟我過去使用Arduino等設備來達成簡單互動功能完全是兩個世界,下載了Datasheet也不知從何看起,只能雲裡霧中地照著其他同學的步驟跟著完成作業。

這是一個Neil所設計的小型AVR based燒錄器,通電會亮。

這週作業之一是要做一個迷你燒錄器(programmer),我們得先自行製作一個小電路板、焊接正確元件,成功撰寫程式燒錄進IC後,再用它來燒錄其他的小電路板使其成為另一個programmer。

在Terminal裡面進行燒錄
燒錄好之後透過ISP Header去燒錄另外一個小電路板

Week 4 3D掃描與列印(3D Scanning and Printing

因為使用學生太多,狀況很差的3D印表機們

回想起來是較為簡單的一週,基本上就是測試3D印表機的精度跟不同形狀對支撐的需求。因為修課學生眾多,大家也沒辦法有太多時間去測試PLA之外的材質。另外也測試了一些3D掃描工具,如下圖。

失敗的3D掃描

工作區域還有幾台FormLab的機器,可列印光固化材料。下圖是透過Form3列印出來的成品。

但光固化機器學生不能自己去使用,一定要知會教職員。

Week 5 電子設計(Electronics Design

每堂課Neil都會概括性地介紹與該週主題相關的軟體與硬體工具。設計電路基本上以KiCad跟Eagle軟體為大宗,但Neil自己是使用Python程式碼直接產生路徑。從這堂課開始,我們得學習使用各種軟硬體(如示波器)來設計、模擬電路,並要了解LED、電阻、電容、電晶體、振盪器等元件的功能,以及基本電子電路計算公式。

從來沒想過有一天自己要像個工程師一樣自己設計電路…
從Schematic View轉換到Board View每次都像是在解高難度數獨

在Eagle中要先在Schematic View中創建所有需要用到的元件(Part),然後依照所需功能串接起來,確定沒有問題後,再切換到Board View開始嘗試畫出PCB上的路徑。

練習使用不同Layer以及Eagle的Command

這週任務是要在電路板上新增一個按鈕,來完成Neil口中的Hello World Echo Board。理論上這個板子要跟電腦連接,並重複你所鍵入的字元。與電腦連接的方式是通過FTDI Cable轉接USB,ISP Header則是用來跟燒錄器(前幾週完成的那個Programmer)溝通用的。

如圖,PCB右側就是FTDI接腳。後來很認真去了解到底FTDI Cable在幹嘛…然後不斷測試。

在Eagle軟體裡面設計不同電子元件的連接路徑,有時會遇到卡死怎麼連都不對的情況,只好先把板子做出來再用跳線連接。但這樣的方式,有可能因為強度不夠,過一陣子PCB就會自行損毀,幾經失敗後,上網查閱歷年修課學生的紀錄網站,才發現其實可以利用底板銅箔層來當作GND,並修改Design Rule的條件來自動控制線路與接點的留白面積與路徑寬度等參數。

在昏暗的CBA地下室做了一個又一個又一個又一個的PCB…

即使成功把PCB照著設計做出來,也不代表這片PCB會如你預期地運作…最終我還是鼓起勇氣打開了AVR microcontroller的Datasheet,在了解TX跟RX腳位的概念以及所使用ATtiny晶片的GPIO定義後,重複製作了好幾個相同的PCB,再練習使用三用電錶來debug,最後突然有一個就可以成功燒錄並執行了!電路設計與製作的過程對我來說,常常像是在伸手不見五指的黑暗中盲目探索,雖然你也不知道自己抓到的是什麼,但逐漸習慣黑暗後就不會那麼無助了(儘管還是不確定自己到底在做什麼)。

Week 6 電腦控制機器(Computer-Controlled Machine

這一週就是如標題所示,主要是在操作CNC(Computer Numerical Control)機具。實務上並沒有很複雜,就是在實作與錯誤中學習操作機具,並親自體驗每個環節所造成的誤差。

上圖是在讓CNC的Z軸校準歸零。

課程提供了很多便宜的OBS板材。學生需要測試切割、雕刻、製作凹槽等基本功能。

測試各種參數、形狀、精度以及卡榫方式。

因為此類機器有危險性,所有教職員特別重視有沒有按照規定步驟來操作。這些步驟包括怎麼啟動機器、安裝鑽頭、啟動Spindle、開啟吸塵功能…等等。在操作過程中也會認識到管理這些大型機具所需的程序與注意事項,以及哪些功能是為了防止意外發生而存在。

麻瓜如我最後做了一個小置物桌。

這週有許多學生因為沒有按照流程來,導致大量EndMill被用斷,後來大型CNC就被禁止假日使用了。

Week 7 嵌入式程式設計(Embedded Programming

這週開始像我這樣沒有每週花大量時間預習與複習的學生就開始陷入困境。因為AVR programming基本是要寫C語言,Neil又不斷在課堂上強調不建議使用Arduino軟體當編譯器,因此一點點小功能就會需要摸索許久才能在AVR晶片有限的容量下被成功執行。

練習使用三用電錶

這週的作業是要獨立撰寫程式、燒錄進微控制器,然後讓你的PCB可以真正做點什麼事。原本想說要整合喇叭做一個noise generator,透過ATtiny晶片內建的Clock來產生波形,結果通電後發現設計失敗了,因為電容接法與電流計算有問題。

去跟助教詢問到底訊號是怎麼一回事

經過助教的一番指導,我理解到現在的我要獨立設計一個音訊裝置,兼容ADDA轉換、擴大、濾波與整流是非常困難的。後來我就決定簡單做一個具備按鈕的PCB先完成作業就好。

後來我還是使用了Max來輔助溝通Serial Port

上圖左邊是我原本熟悉的Max軟體介面、右邊是燒錄進AVR中的按鈕部分程式碼。下面影片可以看到我每次多按一下按鈕,Max畫面中的計數就會增加。這部分是由電路板上的IC來運算,雖然很簡單,但這個小PCB確實有在「做點什麼」了。

最後重新做了一個按鈕PCB

Week 8 翻模和鑄造(Molding and Casting

這週主要在翻模,並測試像樹脂、石膏、OOMOO、金屬等材料。

把OOMOO裡面的空氣抽乾(自製的抽氣機)
做一件事要用太多軟體了族繁不及備載。
用小台的CNC去mill蠟製方塊
一些失敗的嘗試

Week 9 輸入設備(Input Device

輸入設備就是像麥克風、Webcam、壓力、溫濕度、磁力、動態感測等。我們需要將輸入設備設計至電路中,並在電腦端透過GUI介面閱讀數值。Neil的預設工具是Python。

學會用放大鏡來幫助焊接了

Week 10 輸出設備(Output Device

輸出設備就是像喇叭、燈光、馬達等。我選擇了一個有趣的LED陣列電路設計Charlieplexing來練習如何精算有限的pin腳,用較少的I/O來控制較多的LED燈。以Charlieplexing的設計方法,n個引腳可以有n*(n-1)個組合,也就是說可用n個引腳驅動n*(n-1)個LED燈。過程中學習到了關於LED顯示頻率、邏輯判斷、正向電壓複雜性等問題。

各種失敗的嘗試
慢慢掌握了設計電路的流程…
到了第三個版本才燒錄成功。
沒有全部LED都亮起來是因為後面銅箔層有短路。

Week 11 網路與通訊(Networking and Communications

很推薦閱讀這篇Neil寫的文章

這週在討論「網絡(network)」。Neil認為網路的未來是會往兩極端發展,一方面是越來越寬裕的流量,另一方面是較慢、穩固、資料量小的設備對設備溝通。因此,本週我們的作業就是利用如IR、RS232、ESP32或ESP8266等模組來讓電路板可以進行無線通訊。

到此已經理解到無論如何一開始就是先看清楚元件的規格。

原本想使用ESP32,但因為該元件被其他學生拿光了,只剩下ESP8266。這週末剛好出門旅行,時間有限下最後只測試了ESP8266的基礎功能與範例程式,包括傳輸封包以及網頁溝通等。

這是完成後的ESP8266測試板。
從Terminal觀看ESP8266回傳的訊息。
左:ESP8266檔案傳輸測試。右:網頁傳輸測試。

除了ESP8266外,這週作業還包含了要讓學期中設計的PCB們,透過自行選擇的通訊協定來互相溝通。之前設計的板子通常都有ISP Header所以大多就是透過MOSI與MISO去互相傳輸,也有人會選擇用RS232或IR訊號。

因為學校的公用設備都要排隊,後來就買了一台數位的示波器(中國製)。
不過最後我還是失敗了,做新板子太花時間還得排隊,後來就只好先放棄。

Week 12 機械與機器設計(Mechanical, Machine Design

ACT風格的作品介紹影片。

這週是唯一的區塊分組協作。ACT跟Media Labs與Neil本身任教的CBA在一起。我們最後做了一個自動削蘋果機。

最早是想要做自動演奏鋼琴的機器,但因為Media Labs有人做過就放棄。
協助3D列印各種部件。結束後大家合照一張。
分組作品的專屬網站。
Media Labs風格的作品介紹影片。

Week 13 介面與應用程式設計(Interface and Application Programming

這週遇到感恩節假期,基本上就是把之前設計與製作出來的電路板,跟電腦或其他裝置串接,並為其設計一個可閱讀的介面。

Node.js與Max程式截圖

最後我整合了之前做的按鈕電路,每次按一下按鈕,用Max撰寫的程式就會上網搜尋一張狗狗圖片並下載下來。

Week 14 外卡-自由發揮(Wild Card

這週分成很多組別,例如Soft Robot、Advanced Programming、Inflatable、生物材料列印等。我選擇了Sheet Metal這組。

從設計到實際透過機器切割金屬板

我們使用的是薄鋼板,從鍛打、敲擊、彎折到金屬熔接,工具使用說明與注意事項走完一次後,學生就開始自行設計與製作一個包含Sheet Metal製品的物件。

加固側邊後再彎折成為桌腳。

Sheet Metal在這種製作方式下,其實精度很難太高,難免會有誤差。但設計良好的話其實能透過鎖孔與金屬熔接過程來補強,並利用金屬填土來填補差異。

CO2金屬熔接

在試著安裝輪子時,因為沒有估計到Sheet Metal本身的厚度導致四個鎖孔沒辦法都完美地鎖上。另外原本想預留桌面可以升降高度的功能,在滑動時過於陽春的設計與不夠精確的彎折,導致銜接處會常常卡住或不方便調整。這大概就是所謂的「從做中學」吧。

最後做了一個有輪子的工作桌。

補充心得

Neil在其著作中曾表示,比起工程專業的學生,由「技能」出發的模式,會更適合研究藝術或工藝的學生。傳統上,工程要設計具備完整功能的系統,會需要同時建立實體模型與邏輯功能,包括具輸入與輸出介面的嵌入式運算晶片。在工業級標準設定下,這些工作需要一整個團隊來設計與生產,沒有任何一位個人可以獨立完成。

刻板印象中,工程師不會同時擁有設計與製造的雙重技能來獨立完成專案,也沒有單獨的課程或老師可以涵蓋這麼多高度異質性的使用者與機具。在此,學習過程不是由知識的供給來引導,而是由知識的需求來驅動。一旦學生掌握了新技能,例如水刀切割或微控制器程式,他們會像是傳福音的傳教士,把技能展現給其他同學看。當他們為了個人專案需求而需要新技能時,會主動向自己的同儕學習,並在學會後教導更多人如何操作。

這個過程因為是有需求、再教學,可以稱作「及時(just in time)」教育模型,而非傳統教導學生一個固定內容的課程,先灌輸以後可能會派上用場的知識,那種傳統上被稱為「以防萬一(just in case)」的教育形式。

回顧修習這門課的過程,我覺得較可惜的是一開始不清楚AVR Programming的優勢與學習目標,只覺得好像是某種從零開始的Arduino,加上對C語言太過陌生,有點不知道該從何下手。其實如果前幾週時間先好好花在閱讀文件、釐清IC腳位功能跟練習C語言基礎程式邏輯(ATtiny處理訊號大多是二進制,跟寫Java Script或Max很不同),把盲目製作電路板跟重複焊接的時間省下來,其實課程後半段就會順利很多。換句話說,只要克服了電子電路與程式障礙這關,其他有關成品外觀、功能、使用者經驗等環節,在數位工具輔助下,通常都是迷人而有趣的過程。

過去我比較多作品跟專案都是軟體為主,使用Max來開發,再跟其他高階工具對接。修習這門課之後,結構與裝置設計對我來說就不再那麼難以想像,也比較好預估所需時間與成本。Neil說上完HTMAA這門課,囫圇吞棗這麼多不同主題的內容後,大概會需要一年時間來消化、決定是否繼續鑽研。希望一年後我也能帶著有別於過往的作品樣貌跟大家見面!

融聲創意 ZONE SOUND

art, music, technology

融聲創意 ZONE SOUND

探索音樂、科技與藝術的連結,藉由數位工具輔助,更有效率地創造、學習、發明,使天馬行空的想法成真。

紀柏豪 Chi Po-hao

Written by

融聲創意工作室負責人,關注藝術與科技的交會,作品多為互動與生成式系統,廣泛參與各類展演活動。個人網站 https://chipohao.com

融聲創意 ZONE SOUND

探索音樂、科技與藝術的連結,藉由數位工具輔助,更有效率地創造、學習、發明,使天馬行空的想法成真。