如何使用Arduino製造出一個精靈寶可夢Go孵蛋車?

 

pokemon go egg hatching

 

精靈寶可夢Go是全世界最受歡迎的手機遊戲之一。捕捉精靈寶可夢有很多技巧,但是今天我們將構建一個Arduino精靈寶可夢Go車,使您可以更容易地完成孵蛋。精靈寶可夢Go孵蛋車旨在協助玩家孵化遊戲中的蛋,最終透過製造一輛車並攜帶您的個人手機來完成。我們將對常規的RC車進行修改,並載入一些元件,例如用於藍牙控制的HC06模組和用於檢測物體以在撞上障礙物前轉彎的HC-SR04距離感測器。遊戲中有三種類型的蛋,車輛具有調整機制來適應不同的孵蛋里程。在本教程中,我們將介紹兩種蛋(3km和5km)。

 

目標

  1. 車輛根據使用者指定的距離進行移動。
  2. 車輛具有避障功能
  3. 透過藍牙進行無線控制。

硬體

  • Arduino Uno
  • RC 車
  • L9110S H 橋
  • HC-SR04 超聲波感測器
  • HC06 藍牙模組

軟體

工具

  • 麵包板
  • 螺絲刀
  • 烙鐵

 

組件概述
I. H橋

 

pokemon go egg hatching

圖1:L9110S H橋步進馬達雙直流驅動控制器

 

pokemon go egg hatching

圖2:H橋概要圖示

H橋中的H來自上圖中四個馬達連接所構成的H形。我們使用H橋而不是直接使用Arduino的GPIO主要因為我們想用外部電源來給馬達供電,這樣就不會影響Arduino的電源供給。

下表顯示了H橋如何根據開關狀態進行操作。S1和S2是前部馬達的端子,而S3和S4是後部馬達的端子。

S1 S2 S3 S4 結果
1 0 0 1 馬達右轉
0 1 1 0 馬達左轉
0 0 0 0 馬達未被使用
0 1 0 1 馬達制動
1 0 1 0 馬達制動
1 1 0 0 短路
0 0 1 1 短路
1 1 1 1 短路

表1:H橋開關表

II. 超聲波感測器

pokemon go egg hatching

圖3:HC-SR04 超聲波感測器

我們將一個典型的HC-SR04超聲波感測器用於實現避障功能。超聲波感測器發出一個高頻脈衝,然後計算脈衝的反射波返回的時間。該時間對應於感測器與最近的障礙物之間的距離。感測器有兩個開口:一個發射超聲波,另一個接收超聲波。

III.藍牙模組

pokemon go egg hatching

圖4:HC06藍牙模組

如果您想要找一個低成本的藍牙模組,那麼HC06能夠滿足您的要求。雖然它的覆蓋範圍很小(10米),但是可以用於有低功耗要求的專案中。

HC-06模組有兩種模式:主模式和從模式。主設備具有存儲最後配對的從設備的功能。主設備將搜索最後配對的從設備,直到建立連接。如果按下“喚醒”按鈕,則模組記憶體將會丟失並開始搜索新的設備。

在我們的專案中,我們將遙控器(行動電話)作為主設備,將RC車作為從設備。只要RC車在連接範圍內,就會自動與主設備連接。

 

步驟1:構建一個小車!

對於本專案,我選擇購買一輛RC車並進行拆解和改造,以添加前面所提到的其他組件。您也可以使用任何可用的車輛。畢竟,這只是一輛有兩台馬達(每個馬達都有兩個端子)的小車。

 

pokemon go egg hatching

圖5:改造前的RC車

 

pokemon go egg hatching

圖6:RC車(底視圖)

我在這裡想要做的是移除所有不再使用的塑膠車殼和裝飾物。我直接透過擰開RC車兩側的螺釘完成了拆卸。

pokemon go egg hatching

圖7:無蓋RC車及其主控制器板

卸下蓋子後,您會看到一些電線和主控制器板。之後不會使用這個主控制器板,因此可以將其卸下。我們需要保留用於與輪胎機械連接的馬達電線,其他的電線就可以拆卸了。

pokemon go egg hatching

圖8:RC車基底

您會看到兩根電線從兩個馬達引出。您可以透過將9V電池的正極連接到一根電線,然後將另一根電線接地來對其進行測試。如果您不想執行查找馬達電線端子這一步驟,則可以購買兩個裝有直流3-6v齒輪馬達的塑膠輪胎輪,就像此處的這樣。

步驟2:設置藍牙模組

我們將使用一個簡單的藍牙終端應用程式來發送資料,並檢查模組是否捕獲了串列監視器上的資料。

首先,我們必須按照下圖所示方式連接模組:

 

 

pokemon go egg hatching

圖9: HC06藍牙模組與Arduino UNO的連接/© c-sharpcorner

上傳該草圖,並確保上傳草圖時斷開TX和RX,因為這些引腳負責與PC進行UART通信。

https://github.com/formus14/PokemonGO/tree/master/Milestone%20sketches/BluetoothTest

如果您不熟悉Arduino通信協議,請隨時查閱我們的Arduino通信協議教程

成功上傳後,按照接線圖重新連接TX和RX,然後下載該應用程式: Bluetooth Terminal HC-05

pokemon go egg hatching

這個應用程式可以使我們透過藍牙對RC車進行控制,而且您可以用應用程式終端傳送任何類型的指令。該應用程式有5個按鈕,您可以透過按下其中的按鈕來選擇發送特定的指令。

當您打開應用程式時,它將自動搜索可用的設備。根據模組版本,您將會找到名為“HC-05”或“HC-06”的模組。連接到模組,您將看到嵌入式LED在閃爍。

pokemon go egg hatching

如下圖所示,將應用程式連接到模組後,嵌入式LED將停止閃爍,並在整個連接過程中都保持穩定亮起。您可以以此來判斷藍牙是否成功配對!

pokemon go egg hatching

現在可以嘗試編寫任何文本,並注意Arduino串列監視器上所發生的情況。

pokemon go egg hatching

我們寫入“test ..”看看會發生什麼。

pokemon go egg hatching

將串列監視器中的串列傳輸速率設置為9600,您將在螢幕上看到文本資訊。

注意:發送文本之前,請以9600串列傳輸速率打開串列監視器。

如果有任何問題,請重新檢查連線和嵌入式LED(如果它們在非穩定狀態下發光)。

 

pokemon go egg hatching

在應用程式上創建控制按鈕

在同一應用程式上,您可以添加發送特定資料的按鈕。例如,按鈕“Press Here”可以發送字串“I love Pokemon GO”或者任何您想發送的指令。

我選擇創建5個按鈕來用於5種不同的功能:2個按鈕用於控制方向(左右)。1個按鈕用於停止車輛,2個按鈕用於控制在找到您的寶可夢之前所需要的孵蛋里程(3km或5km).

pokemon go egg hatching

想要選擇按鈕名稱對應發送的資料,請用力按下任意按鈕,控制視窗將會被打開。

pokemon go egg hatching

您可以指定按鈕的名稱(我選擇了“Left”),然後在指令部分指定從應用程式發送的資料或字元。我選擇了“l”,可以在之後的Arduino代碼中再次確認是否接收到了“l”。

pokemon go egg hatching

與“Left”按鈕相同,您可以指定按鈕名稱和相應要發送的資料。只要發送的字元與您在Arduino代碼中指定的字元相匹配,發送什麼字元都可以。但是還是建議您使字元與名稱一致(如“r”代表“Right”,“l”代表“Left”等等),以免造成混淆。

pokemon go egg hatching

按鈕3Km將字元“3”發送給Arduino,以啟動計時器,一旦接收到該字元,計時器便開始計算車輛所行駛的距離。

pokemon go egg hatching

按鈕5Km將字元“5”發送給Arduino,以啟動計時器,一旦接收到該字元,計時器便開始計算車輛所行駛的距離。

pokemon go egg hatching

字元“s”命令車輛停止。添加此按鈕用於緊急情況下停車或一般狀況下讓車輛停止。

pokemon go egg hatching

 

現在,我們已經添加了5個按鈕。

您還可以透過寫入字元或指令來啟動這些功能,就像我們之前透過發送“testing..”來實現的那樣。我們透過寫入“b”添加了汽車向後移動的功能。您可以透過組合感測器的多種函數來創建自己的功能(如自動泊車)。

 

 

步驟3:將H橋與馬達端子連接

您需要將H橋連接到2個馬達和Arduino上,如下所示:

 

pokemon go egg hatching

圖10:H橋連接

Sketch :

https://github.com/formus14/PokemonGO/tree/master/Milestone%20sketches/Hbridge

 

步驟4:確定汽車速度/行駛距離

確定行駛距離的最簡單方法是速度x行駛時間。

pokemon go egg hatching

圖11:速度,距離和時間之間的關係

 

在假設車的速度恒定的前提下,我使用了外部測量的方式來確定車輛的平均速度。還有其他可以用於確定距離的方法:可以使用GPS模組,透過旋轉編碼器測量車輪的RPM或者使用霍爾效應感測器。這些方法都會消耗主電池的能量,而這是我希望儘量避免的。您只需要將起點和終點突出地顯示出來,然後測量出車輛經過該範圍所花費的時間,就可以簡單地計算出速度。

 

pokemon go egg hatching

圖12:測量車輛所要行駛區域的固定距離

 

我標記了汽車所行使區域的多個固定距離,然後檢測出所花費的時間,從而計算出汽車的平均速度。

在我的專案中,車輛在2秒內行駛了1.1米,速度=(1.1) / (2)= 0.55 米/秒。

我又進行了幾次試驗來測量速度。每次試驗的速度幾乎都相同。使用這些資料,我們可以計算出車輛達到所需里程花費的時間:

1.1 米 — 2秒 ( 2/60 分鐘)

5 米9 秒 ( 9/60 分鐘)

3,000 米 ( 3 Km) — 1.5 小時

5,000米 ( 5 Km) — 2.5 小時

  • 行駛3 Km所需時間 = ( 3000 X (9/60 ) ) / 5 = 90 分鐘 = 1.5 小時
  • 行駛5 Km所需時間 = ( 5000 X (9/60 ) ) / 5 = 150 分鐘 = 2.5 小時
  • 行駛10 Km所需時間 = ( 10000 X (9/60 ) ) / 5 = 300 分鐘= 5 小時

這些結果與三個重要因素相關:馬達功率,電池功率以及增加了部件之後車輛的總重量。

 

步驟5:將手機放在車輛上並上傳最終草圖

我已經用塑膠手機殼和橡皮筋將手機固定在了車輛上,如圖13所示。您可以使用3D列印製造手機殼,或者直接使用任何可以達到相同目的的手機殼。

對於該專案,我們不需要使用任何庫。所有的需要的函數都在主草圖中。

不要忘記更改定義的車速,使其與以下所示的已定義部分中的車速匹配:

 

pokemon go egg hatching

 

pokemon go egg hatching

圖13:最終的精靈寶可夢Go車(側視圖)

 

pokemon go egg hatching

圖14:最終的精靈寶可夢Go車(頂視圖)

 

技巧和竅門

  • 每當您上傳草圖時,都要從Arduino斷開RX線,否則會出現編譯錯誤。這是因為引腳0和1負責UART通信,開發板將會接收來自PC端的代碼。
  • 一定要選擇可充電電池。我使用過Nikko可充電電池組。這種電池在RC車領域非常受歡迎。
  • 選擇H橋模組而非H橋PIC,PIC很容易發熱,H橋模組板上嵌有散熱器,可以防止這種情況產生。

在這裡,我們構建了低成本、低功耗、功能強大的精靈寶可夢Go車。完成組裝很容易,但是仍有很多可以提升的地方。我們可以添加更多的感測器來實現高級功能,也可以透過升級馬達和電池來加快行駛速度。我們還可以使用覆蓋範圍更大的藍牙模組來實現更長距離的控制。請繼續關注這個有趣專案的進展!如果您有任何改進建議,請隨時與我們分享!