當樂高遇見Arduino:如何從外部控制樂高組件

樂高的Mindstorm 套件的發布,將可編程機器人帶到了一個新的高度。相比上代RCX產品,該套件配備了更加強勁的主機,增加了紅外測距、顏色光線識別等感應器,同時電機也改為伺服控制,可以實現較為精準的轉動控制。但官方的套件提供的設備種類有限(下圖),尤其是探測模塊,在一定程度上限制了創意的發揮。

官方NXT套件只提供了大型電機和中型電機兩種動力電機,探測器模塊也只有觸動、超聲波、顏色、紅外、溫度、電壓等幾種,受限於主機介面數量,至多只能同時控制4路舵機及4路檢測器。樂高提供的圖形化編程,雖可以快速實現程序設計,但程序基本以單流程為主,若涉及多探測器多舵機多條件的複雜編程也愛莫能助,需要藉助C++等語言來實現。

很顯然樂高的重點在於教育功能的實現而不在於功能模塊的數量,但樂高也保留了足夠的擴展性。樂高的介面採用NXT socket協議,並且支持I2C協議,為第三方硬體產品的適配提供了可能。國外MindSensors.com上有豐富的擴展模塊可選,但是價格昂貴,幾個探測器的價格就可以購買一套全新的Mindstorms套件了。

同時,相應的產品國內並無銷售,即便經過複雜繁瑣的海淘流程,費勁周折海淘回來的產品也無法直接使用EV3的圖形化編程完成程序設計,因為這些模塊並沒有對應的編程電池,仍需要藉助C++等語言代碼編程。既然我們需要這種第三方硬體及編程語言擴展的支持,我們應該盡量選擇一種在產品易於獲取、價格經濟、語言簡便且遷移性強的解決方案。

那如何解決玩家日益增長的功能需求同樂高產品擴展性及經濟性之間的矛盾呢?

同為開源的智能硬體產品Arduino的出現,著實讓我們眼前一亮。

Arduino核心是一款微處理器,支持數字信號與模擬信號的輸入輸出。強大的擴展性與標準化的I/O介面,讓Arduino幾乎無所不能。原生支持的數十種數字或模擬設備,讓其可玩性大大增加,而豐富的外接控制晶元,又將其擴展性發揮到極致。這些擴展晶元將需要複雜編程和操控的設備(如步進電機等)以類似與樂高產品模塊化的形式連接到Arduino主板上,程序的設計難度也因與控制晶元匹配的庫文件的引用而大幅簡化,這使得程序可讀性提高並能輕鬆實現不同探測器不同動力設備之間複雜的協同與約束。

上圖是豐富的各類感測器件。Arduino產品線彌補了樂高產品電子模塊的不足,並且成本低廉易於獲取。但Arduino再強大,也只是一塊控制板,雖可快速實現邏輯編程及設備控制,卻無法實現機械傳動及結構搭建,無法做出完整的產品,而這正是樂高的長處。

Arduino和lego一個強在電子邏輯,一個強在結構搭建,兩者優勢互補。

借用《Make:Lego and Arduino Projects》中的一句話:

Make amazing robots and gadgets with two of todays hottest DIY technologies。 With this easy-to-follow guide, you will learn how to build device with Lego Mindstorms NTX2.0 and the Arduino prototyping platform, Mindstorms alone lets you create incredible gadgets. Bring in Arduino for some jaw-dropping functionality and open a whole new world of possibilities.

是的,開啟一個充滿無限可能新世界。

那麼如何讓這兩款科技結合呢,目前有3種不同的方式:

  1. 純arduino控制,使用Arduino探測器及非樂高的電機、舵機或步進電機,僅使用樂高的結構與傳動功能;
  2. 由Arduino控制樂高探測器(或Arduino探測器)及舵機,相當於用Arduino板子替代樂高主機;

  3. 由樂高主機控制,通過I2C協議,控制Arduino,此時Arduino作為從機,成為樂高的外設探測器擴展板。

三種實現方式對比如下

方法1是目前最常見的實現方式;方法3需要在EV3和Arduino中分別編程,非常繁瑣,卻不失是一種思路。限於篇幅和主題,這兩種方法以後再與大家討論,今天主要講講方法2.

方法2可以實現樂高產品線內的閉環,機械結構與動力全由樂高產品實現,也避免出現方法1中樂高舵機閑置浪費的情況。編程也較方法3簡單,只需要在Arduino內編程即可,也提高了編程的效率。

選定了思路,接下來面臨的就是Arduino與Lego產品通訊的問題。Arduino介面為數模介面,Lego使用的是NXT socket6線介面,兩者可以通過L239D晶元通訊。所以最簡單的辦法是我們拼一個控制板出來。

這種方法簡便易行,但長久使用則有諸多不便,接線易鬆動,麵包板還需要額外供電,所以這並不是我們的最優選擇。

最優選擇是購買成型的擴展板。目前市面上成型的板子有兩種,一是EVShield,一種是Bricktronics。前者同樣需要海淘且價格昂貴($75.75);後者淘寶即可購得,使用的便是L239D晶元實現對Lego NXT設備的控制。

我們就以Bricktronics為例,做一個Arduino與EV3通信的實例。國內可以購得的Bricktronics板子大致分兩種,僅可控制舵機和可同時控制檢測器和舵機兩種:

圖中第一款產品佔用Arduino一側整排介面,可同時控制兩路舵機,空出的介面可用於外接各類探測器;第二款產品配合Arduino Mega使用,可同時控制6路舵機及4路探測器,但Mega板子的介面基本全被佔用,沒被佔用的也很難引出使用,適合純樂高產品線的編程。第三款產品為中間款的升級版,將Arduino Mega未用到的介面引出,用於外接Arduino的探測器或其他外設,同時增加了藍牙和Wifi的支持,是目前比較完美的板子了。

附一個基於Bricktronics的多探測器多舵機控制的實例,這個實例將會在《當樂高遇見Arduino》系列文章中逐步完善。

例子中用到了輪組。樂高的舵機能實現1度精準控制,但在實際應用中若要讓電機1度1度的低速旋轉,電機會有抖動並且到達位置角度時電機不容易鎖住(前後扭動樂高大舵機的紅色部分轉軸,你會發現電機內齒輪組之間有縫隙,齒輪之間不是嚴密咬合狀態)。所以想要較精準的實現旋轉控制,最簡單的辦法是通過輪組的方式,將電機旋轉量放大。將需要的小角度旋轉轉變為電機的較大角度轉動以消除抖動減小誤差。

未完待續

文章首發:微信公眾號「科技學堂」

科技學堂官網: http://www.sciclass.cn

科技學堂由中國科協支持,為科技教師、科技教育從業者提供互聯網學習資源。

推薦閱讀:

看這些大佬改裝的賽車遊戲控制器,總感覺有什麼限制了我的想像力
感謝你帶我來到這個花花世界——毛線創意手工
當咖啡師窮到沒錢買壓粉器了怎麼辦?

TAG:乐高LEGO | Arduino | DIY |