2015年1月5日 星期一

Arduino : 舊光碟機變身紅外線遙控車

蒐集了不少朋友不要的光碟機,前一陣子玩利用舊印表機、掃瞄器和光碟機來自組 CNC 時,拆了好幾臺,不過,CNC 只需用到光碟機讀寫頭步進馬達和滑軌的部分,剩下的金屬殼、碟片旋轉馬達、塑膠機身及托盤馬達放在一旁,不想浪費,不時地拿起來端詳,思索著要如何運用。


如上圖中,機身前段上有一組減速齒輪,如果將紅色記號的部份鋸下來,加個輪子,依樣畫葫蘆,兩臺光碟機的機身前段即可變身成一輛車子的主體囉!


輪子如何和齒輪結合呢?手邊只有免洗筷較好操作,於是將原來推動光碟托盤的齒輪軸心,以斜口鉗剪掉,再以銼刀將切口磨平,最後再改以一小段免洗筷當齒輪的軸心,一端削成一字形裝輪子,一端鑽螺絲孔後穿過齒輪,放回齒輪組原來的位置後,以螺絲及華絲墊片固定在機身鎖得有一點緊,又不會太緊。裝上馬達,接上電池,測試可以運轉後,以冰棒棍鑽孔、鎖螺絲固定兩邊(因為和輪子連動的齒輪並不是在正中央,要注意兩邊輪子會有高度差),並在前端加上一個萬向輪。至此,車子的雛形算是完成了。

之前在鋸光碟機身時,家裡的小小孩一直在問我在做什麼,後來又問到,車子可以載她心愛的娃娃嗎?因此決定幫她打造這臺「公主一號」。



原本可不是如上圖這麼豪華哦!試玩時,接上兩顆三號電池,僅能前進而已。小小孩又問道:「可以用遙控的嗎?」,那有什麼問題!上個月淘寶用 1.5人民幣買的遙控器還沒試,趁此機會,拿出來玩一玩。

底下來看看輪子馬達控制電路的部份。

材料清單
  • Arduino UNO x 1
  • 紅外線遙控器 x 1
  • L293D x 1
  • 6038LM 紅外線接收模組 x 1
  • 4.7 uF 電容 x 1
  • LED x 2
  • 220 ohm 電阻 x 2

接線配置如下:



控制馬達的 L293D ,之前在藍芽遙控車中就已有詳細的說明,本文就不再贅述。紅外線接收模組使用 6038LM  ,主要是因為以前在玩 WinLIRC 時就買了,直接拿現有的零件來用,也可以使用其它型號的模組替代,不過要注意,各家紅外線模組的三支腳位排列順序可能有所不同。

另外,在紅外線模組的正極和接地之間,不接電容也可以動作,只是經過實測,當使用較小的行動電源時,常會發生解碼失敗的情形。接上 4.7 uF 的電容後,穩定很多。



Arduino 紅外線解碼的程式,我原來是用網路上「Arduino Starter kit Users Manual 」中找到的 WD6122 解碼程式,但是發現它常常會卡住,讓車子不聽使喚。後來改用 Ken Shirriff 寫的 Arduino-IRremote ,順多了。簡單的記錄一下如何幫 Arduino 加上處理紅外線訊號的程式庫。

首先要下載 Arduino-IRremote 的程式碼,網址如下:

連到 Arduino-IRremote GitHub 的頁面後,在右下方會有個「Donwload ZIP」的按鈕,按一下後即可將程式下載回來。

接著將下載回來的壓縮檔解壓縮,資料夾就更改名稱為「IRremote」,最後,將「IRremote」的資料夾搬移到 Arduino 目錄中的「libraries」中即完成安裝。

接著就可以開始使用 IRremote 中的函數了。

「公主一號」的 Arduino 程式下載網址如下:

如果 L293D 的接腳是按前面的線路圖接的,大概只要修改遙控器按鈕的代碼,底下幾行要打開 Arduino 的「Serial Monitor」,並按遙控器的按鈕觀察代碼,依需求修改值:
  • #define IR_CODE_LEFT_TURN 0xFFA25D
  • #define IR_CODE_RIGHT_TURN 0xFFE21D
  • #define IR_CODE_FORWARD 0xFF629D
  • #define IR_CODE_BACKWARD 0xFF02FD

上面定義使用遙控器按鍵代碼是「0xFFA25D」的來當左轉時的控制鈕,代碼是「0xFFE21D」的來當控制車子右轉的按鈕......,其餘的依此類推。

底下來看看「公主一號」實際跑的狀況:



因為原來光碟機托盤齒比的關係,這臺車子跑得並不快,但用橡皮圈帶動的輪子,載了重重的行動電源還跑得動,也很安靜。老爸車子做得愉快,而小公主則是開開心心的玩,算是皆大歡喜啦!

由於紅外線遙控容易受到干擾,這臺紅外線遙控車應該只能在室內玩而已,有空再來試一下無線電遙控的方式。

相關文章



5 則留言:

  1. 您好:
    拜見您的作品:舊愛變新歡:自製繪圖機
    覺得您這個創意很棒, 我想請教您提到這是利用平台式掃描器+噴墨式印表機+光碟機+硬碟機x2+Arduino變身為繪圖機

    請問平台式掃描器, 及硬碟機x2在此扮演的功能為何?
    請問您輸出資料來源端是事先寫好在arduino 裏的, 還是用電腦輸出, 如果是電腦輸出, 能否請教怎麼跟arduino 溝通這些列印位置的?

    不好意思, 問題有點多, 謝謝您的回覆

    回覆刪除
    回覆
    1. 您好:
      那台改裝的 CNC 是以 BJC-4000 printer 當 X 軸, Scanner 當 Y 軸, 而光碟機當 Z 軸,硬碟機則是用來將 printer 墊高。因為當初只是實驗性的拿來夾筆當繪圖機, 所以整個機構只有 Z 軸的光碟機固定在 printer 上, 其它的都沒固定(放地上)。
      馬達控制的部份是在 Arduino 中裝了 grbl 的靭體(google找得到), 來控制三片 EasyDriver 的控制板(x, y, z 三顆馬達),您可以參考下面的網頁:
      https://github.com/grbl/grbl/wiki/Connecting-Grbl

      另外,圖形資料要轉成 gcode ,並由可以和 grbl 通訊的軟體來傳送,我用的是用別人用 JAVA 開發的 UniversalGcodeSender。相關的資料,您應該可以用本回應中的關鍵字找得到。

      刪除
    2. 您好:
      請問如何裝韌體到arduino上呢?
      另外如果不要用java進行gcode的傳送
      是否有其他可行的辦法?
      我目前只能完成結構 和用arduino IDE寫程式控制他。


      不好意思
      感謝您的知識分享

      刪除
  2. 我的馬達是用電晶體去控制的而不適用IC
    可是這樣紅外線控制馬達開啟後 紅外線接收器會收到莫名的(其他紅外線碼-不知怎麼的) 自己寫了某案件會關掉所有動作 紅外線接收器卻接收不到正確的指令 是因為跟IC有關嗎?

    回覆刪除
  3. https://googledrive.com/host/0B12NSU5QARH9M0JDQUpzTWVWd2c/ir_rc_car.ino

    網址掛點了

    回覆刪除

 
© 2009. Design by Pocket