寒假快結束的時候,手工社社長趙磊打來電話。
林默正在院子裡整理他的竹纖維樣板,手機響了,他擦擦手上的灰,接起來。
“林默,有個事跟你說。”趙磊的聲音聽起來有點興奮,“市裡要舉辦科技節,每個學校都要選送作品參展。我跟周老師商量了,想讓你代表咱們學校做一個作品。”
林默愣了一下:“什麼時候?”
“三月底,還有一個多月。主題是‘創新科技’,什麼都可以,最好能體現咱們手工社的水平。”趙磊頓了頓,“學校很重視,要是能拿獎,對以後評優、推薦都有幫助。”
林默想了想:“做什麼都行?”
“都行。你有什麼想法?”
林默腦子裡已經開始轉了。一個多月,時間不算寬裕,但夠用。做什麼呢?他想起之前在手工社做的那套機械傳動裝置,純機械的,雖然精巧,但不夠“科技”。科技節,得有點電子、智慧的東西。
“做個智慧小車吧。”他說。
趙磊來了興緻:“智慧小車?什麼樣的?”
林默說:“能自動避障,能循跡行駛,能用手機遙控。車身用輕量化材料,控製係統用微控製器。”
趙磊聽得一愣一愣的:“你都會?”
林默笑了:“試試看。”
“行!需要什麼材料,社團出錢。”趙磊爽快地說,“你列個清單,我去買。”
掛了電話,林默坐在桌前,開始構思。
智慧小車,說起來簡單,做起來不簡單。要能自動避障——遇到障礙物能自己轉彎或停下;要能循跡行駛——跟著地麵上的黑線走;要能用手機遙控——通過藍芽連線,在手機上控製方向。三個功能,三個係統,既要獨立工作,又要協調配合。
他先在筆記本上畫了一個草圖。小車四個輪子,每個輪子用一個直流電機驅動,這樣就能實現原地轉向。底盤用竹纖維複合材料——正好檢驗一下寒假的研究成果。上層安裝控製係統和電池。車頭裝兩個超聲波感測器,用來探測前方障礙物。車底裝幾個紅外感測器,用來檢測黑線。再加一個藍芽模組,用來接收手機訊號。
畫完草圖,他開啟電腦,用3D建模軟體開始設計。
底盤設計成矩形,長兩百毫米,寬一百五十毫米,厚五毫米。四個角預留電機安裝孔。中間挖幾個孔減重,但不影響強度。上層用支柱撐起來,放Arduino控製板、電機驅動板、電池。車頭做一個支架,固定超聲波感測器。車底挖幾個槽,固定紅外感測器。
畫完之後,他匯出STL檔案,準備用3D印表機列印。竹纖維複合板材他打算用手工切割,3D印表機打一些複雜形狀的零件。
第二天,趙磊把材料送來了。Arduino Uno控製板、L298N電機驅動板、HC-SR04超聲波感測器、TCRT5000紅外感測器、HC-05藍芽模組、四個直流電機、四個輪子、一塊7.4V鋰電池、若乾杜邦線和螺絲。滿滿一袋子。
“這些東西花了一千多,社團經費報銷。”趙磊把袋子放下,“夠不夠?”
林默看了看:“夠了。”
趙磊又掏出兩百塊錢:“這是買其他材料的,不夠再跟我說。”
林默沒接:“先欠著,不夠再找你。”
接下來就是製作。
第一步,加工車身。他把竹纖維複合板按照設計圖的尺寸切割。複合板比普通木板硬很多,普通的線鋸鋸不動,得用微型電鋸。林默戴上護目鏡,小心翼翼地沿著畫好的線切割。切完之後,邊緣有點毛糙,用銼刀修整,再用砂紙打磨光滑。
底盤切好了,四個電機安裝孔也鑽好了。他把電機裝上去,用螺絲固定,輪子套在電機軸上,擰緊。四個輪子,全部裝好,放在桌上一推,輪子轉動靈活,沒有卡頓。
第二步,安裝電子元件。他把Arduino板固定在底盤上層,用銅柱墊高,防止短路。電機驅動板插在Arduino上麵,用排針連線。超聲波感測器裝在車頭的支架上,用螺絲固定。紅外感測器裝在車底,每個感測器離地麵一厘米左右,能檢測到黑線。藍芽模組插在Arduino的串列埠引腳上。
接線路是最麻煩的。電機驅動板要連線四個電機,還要連線Arduino的電源和控製引腳。超聲波感測器要接VCC、GND、Trig、Echo四個引腳。紅外感測器每個都要接VCC、GND、OUT三個引腳。藍芽模組要接VCC、GND、TX、RX。所有線都要用杜邦線連線,一不小心就接錯了。
林默一邊接線一邊對照電路圖,每接一根就在圖上畫個勾。接了整整一下午,手都酸了。接完之後,他檢查了三遍,確認沒有接錯。
第三步,程式設計。
這是他的強項。他開啟Arduino IDE,開始寫程式碼。
先寫電機控製部分。四個電機要能獨立控製正反轉和速度,才能實現前進、後退、左轉、右轉、原地旋轉。他寫了一個Motor類,封裝了電機的控製函式。
然後寫超聲波測距部分。Trig引腳發一個脈衝,Echo引腳接收回波,根據時間差計算距離。他寫了一個函式,返回距離值,單位厘米。
接著寫紅外循跡部分。三個紅外感測器並排安裝,檢測黑線。如果左邊感測器檢測到黑線,說明車子偏右了,要向左轉;如果右邊感測器檢測到黑線,說明車子偏左了,要向右轉;如果中間的感測器檢測到黑線,說明車子線上中間,直行。
再寫藍芽遙控部分。藍芽模組通過串列埠接收手機傳送的指令,比如‘F’表示前進,‘B’表示後退,‘L’表示左轉,‘R’表示右轉,‘S’表示停止。手機端要寫一個App,但他不會寫手機App,就用現成的藍芽串列埠助手,可以傳送單字元指令。
最後寫主程式。他設計了兩種模式:自動模式和遙控模式。自動模式下,小車自動避障和循跡。遙控模式下,通過手機控製。模式切換通過藍芽指令實現。
寫了三天,程式碼有一千多行。他除錯了好幾天,改了很多bug。有的地方邏輯不對,有的地方語法錯誤,有的地方引腳定義錯了。改完一遍,上傳到Arduino,執行。小車動起來了,但方向是反的——前進變成了後退。他把電機線調換了一下,好了。
超聲波測距也正常,能測出距離。但避障的邏輯有點問題——小車遇到障礙物,會後退然後轉彎,但有時候會卡在牆角出不來。他修改了邏輯,加了隨機方向選擇,好多了。
循跡功能是最難調的。紅外感測器的靈敏度受環境光影響很大,白天和晚上不一樣,室內和室外也不一樣。他反覆調整感測器的閾值,最後找到了一個比較穩定的值。小車能跟著黑線走了,但速度不能太快,太快會衝出線。他把速度調低了一點,循跡穩定了。
藍芽遙控沒問題,串列埠助手傳送指令,小車立即響應。
除錯了一個星期,所有功能都正常了。他把小車放在地上,開啟開關,小車開始自動行駛。遇到障礙物,停下來,後退,轉彎,然後繼續走。地麵貼了一條黑線,小車跟著黑線走,走得很穩,沒有偏離。他用手機連線藍芽,切換到遙控模式,按前進鍵,小車往前走;按左轉鍵,小車左轉;按右轉鍵,小車右轉。響應很快,幾乎沒有延遲。
趙磊來看的時候,小車正在自動循跡。它沿著黑線穩穩地走了一圈,回到起點,自動停下。
趙磊蹲在地上,盯著小車看了半天,站起來,看著林默。
“林默,你這……這比我們學校機器人社團做的東西都厲害。”
林默說:“還行。有些地方還可以改進。”
趙磊搖搖頭:“不用改,已經很好了。拿去科技節,肯定能拿獎。”
小胖不知道什麼時候也來了,站在門口,手裡還拿著鋸子。他看小車在自動行駛,眼睛瞪得溜圓。
“林默,這是你做的?”
林默點頭。
小胖蹲下來,伸手想摸小車,小車前麵的超聲波感測器檢測到障礙物,自動後退了一步。小胖嚇了一跳,縮回手。
“臥槽,它還會躲?”
林默笑了:“超聲波感測器檢測到手,它就後退。”
小胖驚了,又伸手試了試。小車又後退了一步。小胖再伸手,小車再後退。小胖追著它跑,小車一直後退,直到撞到牆。小胖哈哈大笑。
溫馨提示: 頁麵右上角有「切換簡繁體」、 「調整字型大小」、「閱讀背景色」 等功能