2016年10月16日 星期日

Arduino 淘寶小車 - 焊接/使用CH341的Driver/功能測試

從Arduino的Starter Kit之後,在淘寶上買了一架Arduino的小車,大概兩天便有貨到手了。這個標榜從做中學的科教玩具,到貨時有一塊Arduino底板,轉接板的印刷電路板(PCB),和將會安裝上面的電子零件,以及組裝小車所需的零件等。大約200港幣,全套包括循跡、紅外線/超音波的避障、紅外線/藍牙的遙控。

焊接

因為那份轉接板是需要把零件遂件焊接的。為此先到鴨寮街買了一支3x元40W的焊機,試過後有時見太熱也會令底板變色,也怕燒壞底板。原來焊頭有不同的輸出功率和溫度,30W的大概已經夠用,高溫和貴點的可以換不同焊頭,可以作刻劃之用,不過也用不著。選購焊錫的過程中會經常見到松香的出現。錫作為焊料,松香作為助焊劑,對焊接有幫助,不過也不是必須吧。建議買一支低功率的焊機,包裝內就連少量焊料的那種。焊接時所有IC先不要安裝到插槽上。



連接電腦

中國的複製板上,USB轉TTL Serial介面 用的晶片不是原版FTDI的FT232晶片,而是用CH340/CH341的晶片,要先另行安裝driver,否則用usb接駁時是電腦是不懂跟它溝通,也就連上傳sketch也不能的。所以要先安裝相應驅動程序。為了這個驅動就花了很多時間在網上尋找解決方法,以下是把我嘗試過的綜合起來:

1. 從官網上下載並安裝CH341SER_MAC這個檔案:
http://www.wch.cn/downloads.php?name=pro&proid=5

2a. 從Yosemite起,Mac OS要求Driver一定要signed才能使用,要繞過這程序,到Terminal 執行: sudo nvram boot-args="kext-dev-mode=1"

2b. 從El Captain起 disable kext signing的方法又改變了。重新開機,Reboot時按Cmd + R 進入Recovery Mode,在Recovery mode的 Terminal輸入:csrutil enable --without kext

3. 回到電腦的Arduino,如果接上usb時仍然找不到WCH的port,到Terminal上輸入:
sudo ln -s /dev/cu.wch\ ch341\ USB\=\>RS232\ 410 /dev/cu.wch

完成後終於可以上傳程式了。


從最基本的狀態:不連接舵機/超音波/藍牙,嘗試前後左右轉彎的其本動作。這是才真正知道之前的焊接是否成功,所以其實應該早需要一個萬用電表的,那就可以純電路上測試是否連接好。開始測試時發覺一邊摩打沒有轉動,就仔細的把所有焊點檢查和修補一下,之後就是對程式上有關轉速的部份也要調整,不然輸出太低也就行進得太慢。

(見前進的function用了"run" 作名字,怕有關鍵字的衝突,一律取代為"forward"。雖說Sketch應該是C語言,run不會是32個保留字之一的。)

測試

之後才陸續測試它的循跡功能、避障功能,這兩個都是用紅外線的收發來實現的。【循跡】是要小車跟着地上一條任意畫的粗黑線行走,原理是車頭底盤下的左右兩組紅外線收發模組,一直向地面發出和接收所反射的紅外線。當小車開始偏離黑線(例如偏向左走),其中一邊(右邊)的收發模組就會經過粗黑線之上,因為黑色會吸收而較少反射光射,接收器收不到訊號,便知道走偏了,由程式指令要向反方向轉彎來修正。【避障】是一組車頭前方的紅外線收發器,當前方有障礙物時,接收器感應到發送器發出後反射回來的訊號,就由程式控制往後退和轉向。

超音模組的外貌好像一對眼睛。改用超音波收發模組的好處,是可以得知障礙物的距離。小車上附帶的是4 pins 的 HC-SR04,除了兩支電源和接地的引腳外,一支引腳處理訊號輸出,一支引腳處理訊號接收。透過發送和接收之間的時間差,可以計算超音波在空氣中走過的距離,也就能推算障礙物距離。

【舵機】的作用只是讓避障的超音波模組可以向左右方探測,之後才轉向。未成功試到這功能,就先跳去遙控的部份。

遙控有紅外線和藍牙兩種,暫時就是停了在紅外線遙控的這一步。在擴展板上焊了紅外線接收器,套件附有一個小型的紅外線遙控器。跟電視的遙控器的原理相同,只是每間廠商的遙控器在編碼上使用不同的紅外線通訊協定(Protocol),所以不能互通。還有按不同鍵去發出不同頻率的訊號,所以要知道遙控器的協定和編碼方式和每顆鍵代表的訊號,就可以編寫程式指定在接受到訊號後要小車怎樣走(這部份我是靠網上的Arduino IRremote教學補完相關的知識:link 1, link 2),這在附送的遙控器當然有提供這些資料,提供的Sketch中也己經寫好了。這款遙控用的是NEC的協議。38kHz的載波,一組訊號的時間是110ms,載實際8bit的指令(兩個16進制數字),訊號當中:9ms的開開關、4ms的空置、8bit的Address,和8bit的Address反碼、8bit的Command,和8bit的Command反碼、空置至下一組訊號; 在Address和Command當中的位元,1是2.25ms的訊號,0是1.125ms的訊號,如下:




這個小車的設計有個困難,是這個紅外線模式下小車的速度不能自行設定。還有本身的Sketch中設定是鬆開表鍵後小車會維持按鍵指令的狀態,感覺不好控制,大概是該放入一個brake function在鬆開按鍵的時候。不過在這個測試的過程中,突然一刻不受控了,然後見接駁著的電腦正在重新開機,車底下粘上了金屬線,之後再測試摩打時,摩打就不再轉動了T_T。 希望換了摩打後就可以繼續試驗,最期望的是之後用藍牙透過手機作控制呢~!!

沒有留言:

張貼留言