【瓦力號】感測障礙的智慧自走車

Description

Description
作者:Ryan Hu

創作發想

瓦力號是一台自走車,可利用 WiFi 連線以及 IR 紅外線控制,其主要是透過 NodeMCU 這塊主控板來實現 WiFi 連線控制。

我的想法是這樣:將我的 program 燒錄進 NodeMCU,利用 WiFi 連網,並在 網頁上設計一些供使用者按的按鈕,用來操控自走車。

運用材料

  • 1. 伺服馬達:伺服馬達是迴受控制系統的馬達,相較於「步進馬達」則是非迴受控制系統,兩者的差別在於準確度。
  • 2. NodeMCU 主控板:使用 NodeMCU,主要是因為需要它上面搭載的 ESP8266 module,可以用來實現 WiFi 連線。
  • 3. IR receiver: 利用 IR transmitter 發送訊號去給 receiver 控制瓦力號的馬達,使其可以做出前進、後退以及左右轉彎的動作。
  • 4. HC-SR04 超音波感測器:我把這個 module 黏在瓦力號的前身(「瓦力號」也是因為這個 module 裝在前面而取名的),利用超聲波原理,讓瓦力號能夠在與障礙物接觸前,在預先設定的某個距離外,就會自動停下來,不會整個撞上去。

實作步驟


1.主控板的選定:

當車子組裝完畢之後,我裝上車子的第一塊 Arduino board 仍然是 Arduino Zero,因為 Arduino Zero 是我進入 Maker 圈後認識的第一塊板子,但由於希望能藉由 WiFi 連線來控制瓦力號,因此最後採用了 NodeMCU 這塊主控板。

2.讓輪子轉動:

在這個步驟的一開始,我馬上遇到了兩個問題:第一是輪子動的速度有夠慢,第二則是兩邊輪子的參數就算設定一樣,車子仍然無法順利直走。

第一個問題只是我自己的疏失,參數的設定取決於使用的開發板;而第二個問題後來發現是因為我還不知道有解角器,也就是光電編碼器這個 IC 前基本上是無解的,這裡就不多解釋,有興趣的朋友可以自己看看。

ESP8266 WiFi連線控制

輪子會動了,車子會跑了,接下來要做的就是用 WiFi 連線去控制這台車。我把這裡分成兩個部分來說明:

1. ESP8266 連結公司 WiFi AP:

其實現在回頭看當然不難,但記憶中當時我很多都不知道為什麼,不過幸好最後都一一擊破(詳細程式碼可參考原文)。因為有大神寫好 <ESP8266WiFi.h> 的標頭檔可以使用,所以 WiFi 連線就變得輕而易舉,而我是利用console 去觀察 ESP8266 WiFi module 到底有沒有乖乖的連上公司的 WiFi,如果還沒就會看到不斷有 「.」 出現在同一行。

2. User interface:

這個部分就有比較多東西可以分享(詳細程式碼可參考原文)。

若要開啟 server,你勢必要先連上 WiFi ,才能回傳 server 的 IP 位置。其過程主要是當 WiFi 先連上後,我將 ESP8266 內建的 server 喚醒,喚醒後讓他回傳一個 IP 位置(即 ESP8266 server 的位置)到我的 console ,因為我的 MAC 和 ESP8266 的 IP 位置都是同一個 AP 給的(即 MAC 和 ESP8266 是連到同一個 WiFi)所以我直接在 chrome 上打上顯示在 console 的 IP 位置,就會連到 ESP8266 的 server。

接下來,「WiFiClient client」 用 client 這個變數去做 server 端相關的活動,例如檢查它到底可不可以用,還有很重要的是用 client.print() 去實作簡易的網頁。

最後也是最容易讓人困惑的,就是中間 request 變數在做的事情。故事是這樣的,request 是來自你在 webpage 上面做了一些事情 (比如說你按了某個 button) 後, address 上有變化,而這個變化再利用 HTTP GET 的方式送出一個 request 給 server, server 就會去做 parse 的動作,如果有,server 當然就做出相對應的回應,沒有就沒反應。

紅外線感測器的架設

我先是把 library 裝了起來(這個 library 完整到完全不用自己寫多少 code,連 decode 的部分都幫 user 寫好了),接著再很快的把 IR receiver 跟 ESP8266 的腳接一接,然後 program 我需要的功能(詳細程式碼可參考原文)。

我主要是透過R_FD、R_BD、L_FD、L_BD 分別控制瓦力號輪子的四個 pin 腳,利用 PWM 的 funciton – analogWrite 去設定相對應的參數,使其可以做出前進後退以及左右轉彎的動作。

再來就是 IR communication 的部分,在 main loop 裡面可以看到,irrecv.decode(&results) 如果回傳 true(表示 receiver 有吃到東西),就進去找相對應解碼後的碼到底是符合哪個,如果符合某個碼,就 trigger 某件事。最後再用 resume() 這個 function 去清掉本次讀到的 IR data。

HC-SR04超音波感測器

最後,我在瓦力號前方裝了一個超音波感測器,利用超聲波原理,讓瓦力號碰觸到障礙物之前,就會在我設定的某個距離外自動停下來,不會整個撞上去。

 

成果展示

 

後記

「瓦力號」是我一頭栽進 maker圈後的第一個作品,從完全沒有工程背景到做出瓦力號,開啟了我邁向成為獨當一面 maker 的道路。

以上是這次瓦力號系列的分享 (終於),如果有任何我理解不對的地方,再麻煩各位朋友前輩指教!

Resource

自造者萊恩

瓦力號-詳細製作過程

Ryan Hu

政大休學生,對於 IOT 軟硬整合相關有極大興趣,鍾愛無人機,目前獨自完成的專案像是瓦力號、GPS 自動語音導覽系統、NTP 網路自動校時時鐘,喜歡流浪。
個人網站:https://makeryan.wordpress.com/
個人信箱:ryanhu0306@gmail.com
Ryan Hu

Latest posts by Ryan Hu (see all)

    Contact

    Contact
    • Category
      自走車& mini 4WD, 開發板
    • Tags
      NodeMCU開發版, 自走車

    Project簡述

    Project簡述
    • 簡述
      「瓦力號」是我一頭栽進 maker圈後的第一個作品,從完全沒有工程背景到做出瓦力號,開啟了我邁向成為獨當一面 Maker 的道路!
    • 作者
      Ryan Hu
    • FB Comments
      268134000335433

    您的姓名 〈需填寫〉

    您的電子郵件信箱 〈需填寫〉

    主旨

    您的信件內容