2014年9月14日 星期日

Arduino之玩出名堂 - 遙控車(一)


Arduino這幾年來很流行,它是塊微處理器開發版,讓非電子專精領域的人也可以簡單寫些程式來控制硬體,做出你想要的電子裝置,比如說遙控車、四軸飛行器、智慧家庭設備等。

網路上跟實體書本很多人在教如何使用Arduino,透過一些與電子元件結合的實驗,可以點亮LED,驅動馬達或伺服機,偵測溫濕度,超音波測距離,讓蜂鳴器唱歌,以及驅動高電壓設備等等。但是對於用Arduino做出什麼實際用途的文章並不多,很多玩Arduino的人上淘寶買智能小車等套件,不過說實在的,這些套件做出來的「智能車」其實蠻醜的,你可以用「智能小車」作關鍵字google一下圖片就知道了,這比起玩擬真遙控車的外型來說實在是不能比。

但是做一台車需要的不只是電路板,還有底盤、馬達、遙控器以及外殼等,這些東西都要是「套件」那就不容易了。所以我選了一台RASTAR公司出品的1/24比例的 GOLF GTI 遙控車當做基底來改裝,利用它已有的底盤、輪胎及外殼,想把Arduino電路板裝進去,自行更換馬達及伺服機等,配合手邊有的遙控器來做一台擬真版Arduino遙控車。

網路上改遙控車的人,大多是從遙控模型的角度來改裝,更換遙控接收器與那種6動8動遙控器配合,加上電子變速器(俗稱電變)控制加速,換馬達以及改造舵機(伺服器)做線性轉向,還有加LED車燈等等。這樣改完車子跑的快,並且操控性也好,換鋰電池的話又可以跑更久,但這些遙控器、接收器、電變等並不便宜,除非你已經在玩遙控車,否則投資這些設備可說所費不貲,絕對比這種玩具車本身貴上幾十倍,對沒有立志要玩遙控模型的我來說,還是選另一條改裝之路吧。




我的計畫是用下列材料:

  • Arduino Uno R3 開發版
  • DC Motor Shield 擴充版
  • IR receiver 紅外線接收器
  • Apple IR 遙控器
  • LED
配合原有馬達跟車殼等做一台紅外線遙控車(之後可能會升級為藍牙版)

首先從尋找一片適合的馬達擴充版開始,淘寶上的馬達擴充版看來看去散熱片都做的好大,我想要的馬達版希望有幾個特點,一能供電給Arduino版,這樣我就不用裝兩套電池,另外最好還能控制舵機,這樣就省的我要另外把接頭從Arduino上拉出來。結果找了半天,最後看上在良興賣的一片4 DC Motor擴充版,售價180元,比起淘寶是貴,但規格看起來比較好,只買一樣東西的話也比較方便。



買回來之後才它發現跟我想像的不一樣,上網找Data Sheet,發現出這些零件感測器的公司網頁其實非常簡陋,型號 MTARDL293D 的這片板子,它的網頁在這邊,除了性能規格簡介之外,裡面的資料下載內容,竟然是「只是有點像」的另一塊板子的簡體字說明文件,這塊板子我在露天跟淘寶上也看過,但pin腳跟位置等完全不一樣,連板子上用的IC除L293D之外也不一樣,在研究了幾天說明文件以及良興網頁上的示範程式碼,以及網路搜尋半天也沒有這塊板相關的文件內容,已經差不多準備放棄的時後,突然在Adafruit上看到長得一模一樣的板子!因為Adafruit會把電路設計公開在網路上(至於是不是開源硬體我就沒研究了),所以我買的這片原來是OEM版,根據Adafruit的說明,驅動這塊版是一定要使用它的 AFMotor.h 程式庫的,並無法單純使用 digitalWrite(pin, HIGH/LOW) 或 analogWrite(pin, pwm) 這樣去控制馬達,害我之前花了好一番功夫用逆向工程法想要推敲出控制每個馬達的pin腳組合。而Adafruit上的解說也十分詳盡,包括供電方式,哪些Pin腳被佔用等,以及程式庫的使用方法等,讓這塊板子能「絕處逢生」。所以買零件不只看價錢,還要看相關文件以及程式庫設計,否則買來之後搞不出來又求助無門,再便宜也只是塊廢鐵,這點台灣的廠商應該注意一下,我觀察過光華商場裡的店家Arduino感測器跟周邊等都跟差不多廠商進的,包裝都一模一樣,特色就是上面都沒告訴你怎麼用,只有個產品序號讓你去查網頁,說實在,這些網頁內容也寫的太簡陋了,結果要每個人都變成電子零件熟手(還不到高手啦),才能使用這些元件,那不就失去當初Arduino設計可以讓一般人有簡單電子學知識就可以製作自己的設備原意了嗎?

搞定了DC Motor Shield,接下來就是 IR 遙控及 LED 車燈。這片板子有點麻煩的是它佔用的pin腳過多,只剩下2與13沒有被使用,而pin 9與10是保留給Servo用的(在版上有做出3 pin的接腳,還蠻方便的),而A0~A5也沒用到,但版上 pin 腳並沒再做出插槽,如有需要得自行焊接改裝。一開始的想法是 IR 接 pin 10,LED燈接 pin9,但是實作中發現一件怪事,只要啟動了IR receiver,也就是

irrecv.enableIRIn();

這一行,馬達就不會動了!!上網查了半天,我用的是 Ken Shirriff 的 IR Remote程式庫,其中好像使用了timer2,這才知道原來Arduino UNO上只有3個timer,用來驅動pwm的震盪,而DC Motor Shield 用來驅動馬達正好也需用 pwm 來控制馬達速度,所以一定有什麼地方衝到了。所以又學一課「呼叫多個 Libarary 是有可能相衝突的」。還好的是使用Motor 3與4就可以避開,剛好我只使用兩個馬達來操控車子,所以至於Motor 1與2怎麼讓它可以動就先不管了。

關於車燈,去零件行買了3mm的白光LED,發現它的壓降比一般LED高,約在4.2V左右,也就是說一個pin腳的電壓無法同時點亮兩個白光 LED,只好多使用一個 pin13 來供電。至此基本程式已經完成:pin10 - IR Receiver, pin9 and pin13 - LEDs。至於為何使用Apple IR 遙控器來控制遙控車,一來手邊也沒什麼遙控器,二來用藍牙遙控通常要用Android開發程式來控制,但我手上又沒有Android手機,所以先用這Apple IR Remote用著先,下一版看改為藍牙用PS3無線手把操作試看看。

目前操控的設定:
  • Up - 前進
  • Down - 後退
  • Center - 停止
  • Left - 左轉一秒
  • Right - 右轉一秒
  • Menu - 點亮/關閉車燈
  • Play/Pause - 未使用


做到這邊,好像相關技術問題都解決了,在接線時才發覺「電源」其實也是一門很大的學問。一般我們做實驗時,多是用USB供電,而上面接的電子零件多半都靠Arduino板子來供電,但是遙控車需要用電池,並且驅動馬達需要更大的電力,使用一個9V電池供電看來並不行(應該是電流太小),而一般要供電到5V,需要4顆1.5V的電池,實際使用4顆AAA電池供電的結果,有時馬達會無法啟動,最穩的方式還是分別供電,9V電池扣供給Arduino板子,4顆AAA電池供給DC Motor Shield,但這樣光電池的體積跟重量就很大,就失去當初改裝1/24小車的意義了。

關於解決供電的問題,留待下一篇再敘述。

沒有留言:

張貼留言