謝作如+++劉正云
用Arduino做一輛小車,原本是一個入門的項目,很多人都做過。但是,這輛小車如果能用Android手機或者平板電腦來控制,無疑就有趣多了。在MIT的App Inventor幫助下,編寫Android系統上的App程序,也能夠以搭積木的形式完成。同樣,Arduino方面的代碼,也能夠采用一款圖形化的編程插件——ArduBlock來編寫。用Android控制Arduino小車,就成為一個技術門檻很低,卻非常具有挑戰性的綜合性任務了。
● 項目描述
本項目指設計一輛能夠通過Android手機控制的小車,小車控制板采用開源硬件Arduino。通過手機屏幕或者手機的重力傳感器,能控制小車的前進、后退、左轉、右轉、原地轉等各種功能。本項目的難度設計為小學生都能完成,所以小車的程序我們選擇用ArduBlock編寫,手機的程序由App Inventor編寫。
因為Arduino機器人的形式很多,如智能燈、機械臂、人形機器人等,所以這個項目具有一定的可擴展性,還可以實現更多的功能。
● 通訊分析
Android手機和Arduino小車的通訊方式很多,但藍牙方式無疑是最簡單、最方便的選擇,因為藍牙已經成為Android手機的標配。App Inventor中有藍牙的編程模塊,能實現通過藍牙來讀取和發送數據。大部分的Arduino控制板,都預設了藍牙模塊的接口,而藍牙模塊的價格也相對低廉,淘寶上隨處可買。
手機控制小車的程序設計分為手機程序和小車程序,即上位機與下位機兩部分。手機(上位機)部分通過手機自帶的藍牙發送控制命令,如前進、后退、左右轉等。小車(下位機)部分則根據藍牙模塊(串口)收到的命令,做出相應的動作。具體的通訊過程如圖1所示。
在這個項目中,設計手機和小車的通訊數據格式是關鍵,即手機發送的數據分別代表什么命令。考慮到ArduBlock教育版只能獲取串口數據中的數字,所以我們設計了下面的通訊協議,分別定義了數據和命令的對應關系,如表1。
● Arduino小車搭建和程序設計
1.硬件搭建
我們選擇了DFrobot公司的RoMeo V1和MiniQ小車底盤,這是我們設計的開源課程《Arduino創意機器人》中使用的機器人套件(如圖2)。《Arduino創意機器人》課程是國內第一個完全開源的STEM課程,所有的教學資源,如微視頻、電子教材、教學設計等都能在網上下載,關于小車的搭建步驟詳見我們的課程資源,這里不再敘述。《Arduino創意機器人》課程資源下載地址:http://pan.baidu.com/s/1qWFJ0EK。
一般而言,藍牙模塊有4條線需要和Arduino連接,分別為5V、GND、TX和RX。5V和GND要與Arduino上的5V和GND一一對應,但是RX接在Arduino的TX上,TX要接在Arduino的RX上。因為我們選擇的藍牙模塊也是同一公司的,小車使用的控制板為RoMeo V1,上面已經集成了藍牙模塊接口,插上就可以直接使用,不用另外接線(如圖3)。
2.程序編寫
小車的程序比較簡單,先將串口讀取到的數值賦值給變量a,再使用“如果”模塊進行判斷即可。這里的數值“1”、“2”、“3”、“4”、“9”分別根據通訊協議(數據和命令對應表)來設置小車的動作,具體代碼見圖4。
注意:①如果電機M1和M2為150時小車沒有前進,反而轉彎了,只要調整電機的接線即可。②如果用Arduino下載程序出現錯誤,請先把藍牙模塊取下,等下載成功后再插入。
3.小車通訊測試
給小車下載程序后,應先做通訊協議方面的測試。這里的測試分為兩步:第一步是使用串口監視器測試。先用Arduino的串口監視器,通過USB串口給小車發送1、2、3、4、9幾個數字,看小車是否能做出相應的動作。別忘了要把小車的輪子懸空哦!第二步是使用手機藍牙串口工具測試。如果你的電腦有藍牙適配器,可以試著連接Arduino的藍牙模塊,然后通過串口監視器發送數據,如果成功,就說明藍牙模塊工作正常。當然也可以直接跳過這一步,直接用手機的藍牙連接,用“藍牙串口助手”發送數據來測試。
一般來說,如果第一步測試通過而第二步沒有成功,請檢查藍牙模塊的波特率。ArduBlock使用的串口波特率是9600,藍牙模塊的波特率也要設置為9600才能正常通訊。藍牙模塊的波特率可以通過AT命令來設置,請查閱技術文檔或者詢問藍牙產品的技術人員。
注意:如果使用DFRobot的V7擴展板,一定要記著把板子上的小開關扳到“RUN”一檔。
● Android程序設計
1.App界面設計
App Inventor分為在線版和離線版兩種,二者在使用上沒有什么區別。如果網絡夠快,就用在線版吧。不過如果是大班教學,應該自己搭建一個離線版的服務器。
控制Arduino小車的App軟件在編寫上并不難。我們在界面設計上并沒有花多大功夫,主要還是側重于其功能實現(如上頁圖5)。
App中添加的控件有:①Button按鍵(上、下、左、右箭頭以及stop按鍵):按下后通過藍牙發送相應的數字;②ListPicker(Select Device):按下它,會訪問到一個列表,用來存儲藍牙信息;③HorizontalArrangement/VerticalArrangement:用于排版,使頁面整齊美觀;④BluetoothClient:藍牙連接客戶端控件,主要用于配對藍牙,連接以及通信;⑤Notifier:警示窗口,當軟件運行出現意外時,會提示相關信息,以避免程序崩潰。
2.App功能實現
(1)連接藍牙
點擊Select Device時,應該出現選擇藍牙設備的界面(如圖6)。
選擇ListPicker1控件的BeforePicking事件,編寫如圖7的代碼。
需要說明的是,圖6中列出的是手機已經配對過的藍牙設備。如果還沒有配對,請先使用手機系統自帶的藍牙管理器來配對設備。
為了使App操作更加簡潔,我們可以在選擇設備后,就讓手機開始連接藍牙,連接藍牙的代碼要寫在ListPicker1控件的AfterPicking事件中(如圖8)。
(2)發送數據
App主要通過上下左右四個箭頭控制小車前進、后退、左右轉,通過stop鍵讓小車停止,代碼如圖9。
這樣一來,按下不同的按鈕,手機就會通過藍牙發送不同的數據。雖然上述的代碼并不是很完善,但是已經基本具備了上位機的功能。趕緊編譯程序,安裝到手機上試試吧。
● 拓展應用
這個手機控制小車的項目還是比較簡單的,最大的不足是無法動態調速。當然,我們可以設計一個搖桿來發送更加復雜的數據給Arduino小車,如1200表示前進200,2100表示后退100等。只要設計好通訊協議,編寫代碼并不困難。圖10是筆者設計的一個用搖桿控制小車速度和方向的App界面。
因為Android手機上有重力加速度傳感器(AccelerometerSensor)和方向傳感器(OrientationSensor)。如果利用這兩個傳感器來控制小車的方向和速度,項目的可玩性就更強了。當然,我們要設計的通訊協議也復雜了起來。
● 總結
在這個項目的基礎上,我們還可以實現很多其他的功能,如解決單獨使用語音模塊控制小車聲音干擾的問題,制作出無線控制的語音識別模塊,或者是直接調用Google的語音庫,制作出手機語音控制的機器人小車……不要小看圖形化編程軟件,App Inventor和ArduBlock已經足夠強大了,趕緊動手吧!
endprint
用Arduino做一輛小車,原本是一個入門的項目,很多人都做過。但是,這輛小車如果能用Android手機或者平板電腦來控制,無疑就有趣多了。在MIT的App Inventor幫助下,編寫Android系統上的App程序,也能夠以搭積木的形式完成。同樣,Arduino方面的代碼,也能夠采用一款圖形化的編程插件——ArduBlock來編寫。用Android控制Arduino小車,就成為一個技術門檻很低,卻非常具有挑戰性的綜合性任務了。
● 項目描述
本項目指設計一輛能夠通過Android手機控制的小車,小車控制板采用開源硬件Arduino。通過手機屏幕或者手機的重力傳感器,能控制小車的前進、后退、左轉、右轉、原地轉等各種功能。本項目的難度設計為小學生都能完成,所以小車的程序我們選擇用ArduBlock編寫,手機的程序由App Inventor編寫。
因為Arduino機器人的形式很多,如智能燈、機械臂、人形機器人等,所以這個項目具有一定的可擴展性,還可以實現更多的功能。
● 通訊分析
Android手機和Arduino小車的通訊方式很多,但藍牙方式無疑是最簡單、最方便的選擇,因為藍牙已經成為Android手機的標配。App Inventor中有藍牙的編程模塊,能實現通過藍牙來讀取和發送數據。大部分的Arduino控制板,都預設了藍牙模塊的接口,而藍牙模塊的價格也相對低廉,淘寶上隨處可買。
手機控制小車的程序設計分為手機程序和小車程序,即上位機與下位機兩部分。手機(上位機)部分通過手機自帶的藍牙發送控制命令,如前進、后退、左右轉等。小車(下位機)部分則根據藍牙模塊(串口)收到的命令,做出相應的動作。具體的通訊過程如圖1所示。
在這個項目中,設計手機和小車的通訊數據格式是關鍵,即手機發送的數據分別代表什么命令。考慮到ArduBlock教育版只能獲取串口數據中的數字,所以我們設計了下面的通訊協議,分別定義了數據和命令的對應關系,如表1。
● Arduino小車搭建和程序設計
1.硬件搭建
我們選擇了DFrobot公司的RoMeo V1和MiniQ小車底盤,這是我們設計的開源課程《Arduino創意機器人》中使用的機器人套件(如圖2)。《Arduino創意機器人》課程是國內第一個完全開源的STEM課程,所有的教學資源,如微視頻、電子教材、教學設計等都能在網上下載,關于小車的搭建步驟詳見我們的課程資源,這里不再敘述。《Arduino創意機器人》課程資源下載地址:http://pan.baidu.com/s/1qWFJ0EK。
一般而言,藍牙模塊有4條線需要和Arduino連接,分別為5V、GND、TX和RX。5V和GND要與Arduino上的5V和GND一一對應,但是RX接在Arduino的TX上,TX要接在Arduino的RX上。因為我們選擇的藍牙模塊也是同一公司的,小車使用的控制板為RoMeo V1,上面已經集成了藍牙模塊接口,插上就可以直接使用,不用另外接線(如圖3)。
2.程序編寫
小車的程序比較簡單,先將串口讀取到的數值賦值給變量a,再使用“如果”模塊進行判斷即可。這里的數值“1”、“2”、“3”、“4”、“9”分別根據通訊協議(數據和命令對應表)來設置小車的動作,具體代碼見圖4。
注意:①如果電機M1和M2為150時小車沒有前進,反而轉彎了,只要調整電機的接線即可。②如果用Arduino下載程序出現錯誤,請先把藍牙模塊取下,等下載成功后再插入。
3.小車通訊測試
給小車下載程序后,應先做通訊協議方面的測試。這里的測試分為兩步:第一步是使用串口監視器測試。先用Arduino的串口監視器,通過USB串口給小車發送1、2、3、4、9幾個數字,看小車是否能做出相應的動作。別忘了要把小車的輪子懸空哦!第二步是使用手機藍牙串口工具測試。如果你的電腦有藍牙適配器,可以試著連接Arduino的藍牙模塊,然后通過串口監視器發送數據,如果成功,就說明藍牙模塊工作正常。當然也可以直接跳過這一步,直接用手機的藍牙連接,用“藍牙串口助手”發送數據來測試。
一般來說,如果第一步測試通過而第二步沒有成功,請檢查藍牙模塊的波特率。ArduBlock使用的串口波特率是9600,藍牙模塊的波特率也要設置為9600才能正常通訊。藍牙模塊的波特率可以通過AT命令來設置,請查閱技術文檔或者詢問藍牙產品的技術人員。
注意:如果使用DFRobot的V7擴展板,一定要記著把板子上的小開關扳到“RUN”一檔。
● Android程序設計
1.App界面設計
App Inventor分為在線版和離線版兩種,二者在使用上沒有什么區別。如果網絡夠快,就用在線版吧。不過如果是大班教學,應該自己搭建一個離線版的服務器。
控制Arduino小車的App軟件在編寫上并不難。我們在界面設計上并沒有花多大功夫,主要還是側重于其功能實現(如上頁圖5)。
App中添加的控件有:①Button按鍵(上、下、左、右箭頭以及stop按鍵):按下后通過藍牙發送相應的數字;②ListPicker(Select Device):按下它,會訪問到一個列表,用來存儲藍牙信息;③HorizontalArrangement/VerticalArrangement:用于排版,使頁面整齊美觀;④BluetoothClient:藍牙連接客戶端控件,主要用于配對藍牙,連接以及通信;⑤Notifier:警示窗口,當軟件運行出現意外時,會提示相關信息,以避免程序崩潰。
2.App功能實現
(1)連接藍牙
點擊Select Device時,應該出現選擇藍牙設備的界面(如圖6)。
選擇ListPicker1控件的BeforePicking事件,編寫如圖7的代碼。
需要說明的是,圖6中列出的是手機已經配對過的藍牙設備。如果還沒有配對,請先使用手機系統自帶的藍牙管理器來配對設備。
為了使App操作更加簡潔,我們可以在選擇設備后,就讓手機開始連接藍牙,連接藍牙的代碼要寫在ListPicker1控件的AfterPicking事件中(如圖8)。
(2)發送數據
App主要通過上下左右四個箭頭控制小車前進、后退、左右轉,通過stop鍵讓小車停止,代碼如圖9。
這樣一來,按下不同的按鈕,手機就會通過藍牙發送不同的數據。雖然上述的代碼并不是很完善,但是已經基本具備了上位機的功能。趕緊編譯程序,安裝到手機上試試吧。
● 拓展應用
這個手機控制小車的項目還是比較簡單的,最大的不足是無法動態調速。當然,我們可以設計一個搖桿來發送更加復雜的數據給Arduino小車,如1200表示前進200,2100表示后退100等。只要設計好通訊協議,編寫代碼并不困難。圖10是筆者設計的一個用搖桿控制小車速度和方向的App界面。
因為Android手機上有重力加速度傳感器(AccelerometerSensor)和方向傳感器(OrientationSensor)。如果利用這兩個傳感器來控制小車的方向和速度,項目的可玩性就更強了。當然,我們要設計的通訊協議也復雜了起來。
● 總結
在這個項目的基礎上,我們還可以實現很多其他的功能,如解決單獨使用語音模塊控制小車聲音干擾的問題,制作出無線控制的語音識別模塊,或者是直接調用Google的語音庫,制作出手機語音控制的機器人小車……不要小看圖形化編程軟件,App Inventor和ArduBlock已經足夠強大了,趕緊動手吧!
endprint
用Arduino做一輛小車,原本是一個入門的項目,很多人都做過。但是,這輛小車如果能用Android手機或者平板電腦來控制,無疑就有趣多了。在MIT的App Inventor幫助下,編寫Android系統上的App程序,也能夠以搭積木的形式完成。同樣,Arduino方面的代碼,也能夠采用一款圖形化的編程插件——ArduBlock來編寫。用Android控制Arduino小車,就成為一個技術門檻很低,卻非常具有挑戰性的綜合性任務了。
● 項目描述
本項目指設計一輛能夠通過Android手機控制的小車,小車控制板采用開源硬件Arduino。通過手機屏幕或者手機的重力傳感器,能控制小車的前進、后退、左轉、右轉、原地轉等各種功能。本項目的難度設計為小學生都能完成,所以小車的程序我們選擇用ArduBlock編寫,手機的程序由App Inventor編寫。
因為Arduino機器人的形式很多,如智能燈、機械臂、人形機器人等,所以這個項目具有一定的可擴展性,還可以實現更多的功能。
● 通訊分析
Android手機和Arduino小車的通訊方式很多,但藍牙方式無疑是最簡單、最方便的選擇,因為藍牙已經成為Android手機的標配。App Inventor中有藍牙的編程模塊,能實現通過藍牙來讀取和發送數據。大部分的Arduino控制板,都預設了藍牙模塊的接口,而藍牙模塊的價格也相對低廉,淘寶上隨處可買。
手機控制小車的程序設計分為手機程序和小車程序,即上位機與下位機兩部分。手機(上位機)部分通過手機自帶的藍牙發送控制命令,如前進、后退、左右轉等。小車(下位機)部分則根據藍牙模塊(串口)收到的命令,做出相應的動作。具體的通訊過程如圖1所示。
在這個項目中,設計手機和小車的通訊數據格式是關鍵,即手機發送的數據分別代表什么命令。考慮到ArduBlock教育版只能獲取串口數據中的數字,所以我們設計了下面的通訊協議,分別定義了數據和命令的對應關系,如表1。
● Arduino小車搭建和程序設計
1.硬件搭建
我們選擇了DFrobot公司的RoMeo V1和MiniQ小車底盤,這是我們設計的開源課程《Arduino創意機器人》中使用的機器人套件(如圖2)。《Arduino創意機器人》課程是國內第一個完全開源的STEM課程,所有的教學資源,如微視頻、電子教材、教學設計等都能在網上下載,關于小車的搭建步驟詳見我們的課程資源,這里不再敘述。《Arduino創意機器人》課程資源下載地址:http://pan.baidu.com/s/1qWFJ0EK。
一般而言,藍牙模塊有4條線需要和Arduino連接,分別為5V、GND、TX和RX。5V和GND要與Arduino上的5V和GND一一對應,但是RX接在Arduino的TX上,TX要接在Arduino的RX上。因為我們選擇的藍牙模塊也是同一公司的,小車使用的控制板為RoMeo V1,上面已經集成了藍牙模塊接口,插上就可以直接使用,不用另外接線(如圖3)。
2.程序編寫
小車的程序比較簡單,先將串口讀取到的數值賦值給變量a,再使用“如果”模塊進行判斷即可。這里的數值“1”、“2”、“3”、“4”、“9”分別根據通訊協議(數據和命令對應表)來設置小車的動作,具體代碼見圖4。
注意:①如果電機M1和M2為150時小車沒有前進,反而轉彎了,只要調整電機的接線即可。②如果用Arduino下載程序出現錯誤,請先把藍牙模塊取下,等下載成功后再插入。
3.小車通訊測試
給小車下載程序后,應先做通訊協議方面的測試。這里的測試分為兩步:第一步是使用串口監視器測試。先用Arduino的串口監視器,通過USB串口給小車發送1、2、3、4、9幾個數字,看小車是否能做出相應的動作。別忘了要把小車的輪子懸空哦!第二步是使用手機藍牙串口工具測試。如果你的電腦有藍牙適配器,可以試著連接Arduino的藍牙模塊,然后通過串口監視器發送數據,如果成功,就說明藍牙模塊工作正常。當然也可以直接跳過這一步,直接用手機的藍牙連接,用“藍牙串口助手”發送數據來測試。
一般來說,如果第一步測試通過而第二步沒有成功,請檢查藍牙模塊的波特率。ArduBlock使用的串口波特率是9600,藍牙模塊的波特率也要設置為9600才能正常通訊。藍牙模塊的波特率可以通過AT命令來設置,請查閱技術文檔或者詢問藍牙產品的技術人員。
注意:如果使用DFRobot的V7擴展板,一定要記著把板子上的小開關扳到“RUN”一檔。
● Android程序設計
1.App界面設計
App Inventor分為在線版和離線版兩種,二者在使用上沒有什么區別。如果網絡夠快,就用在線版吧。不過如果是大班教學,應該自己搭建一個離線版的服務器。
控制Arduino小車的App軟件在編寫上并不難。我們在界面設計上并沒有花多大功夫,主要還是側重于其功能實現(如上頁圖5)。
App中添加的控件有:①Button按鍵(上、下、左、右箭頭以及stop按鍵):按下后通過藍牙發送相應的數字;②ListPicker(Select Device):按下它,會訪問到一個列表,用來存儲藍牙信息;③HorizontalArrangement/VerticalArrangement:用于排版,使頁面整齊美觀;④BluetoothClient:藍牙連接客戶端控件,主要用于配對藍牙,連接以及通信;⑤Notifier:警示窗口,當軟件運行出現意外時,會提示相關信息,以避免程序崩潰。
2.App功能實現
(1)連接藍牙
點擊Select Device時,應該出現選擇藍牙設備的界面(如圖6)。
選擇ListPicker1控件的BeforePicking事件,編寫如圖7的代碼。
需要說明的是,圖6中列出的是手機已經配對過的藍牙設備。如果還沒有配對,請先使用手機系統自帶的藍牙管理器來配對設備。
為了使App操作更加簡潔,我們可以在選擇設備后,就讓手機開始連接藍牙,連接藍牙的代碼要寫在ListPicker1控件的AfterPicking事件中(如圖8)。
(2)發送數據
App主要通過上下左右四個箭頭控制小車前進、后退、左右轉,通過stop鍵讓小車停止,代碼如圖9。
這樣一來,按下不同的按鈕,手機就會通過藍牙發送不同的數據。雖然上述的代碼并不是很完善,但是已經基本具備了上位機的功能。趕緊編譯程序,安裝到手機上試試吧。
● 拓展應用
這個手機控制小車的項目還是比較簡單的,最大的不足是無法動態調速。當然,我們可以設計一個搖桿來發送更加復雜的數據給Arduino小車,如1200表示前進200,2100表示后退100等。只要設計好通訊協議,編寫代碼并不困難。圖10是筆者設計的一個用搖桿控制小車速度和方向的App界面。
因為Android手機上有重力加速度傳感器(AccelerometerSensor)和方向傳感器(OrientationSensor)。如果利用這兩個傳感器來控制小車的方向和速度,項目的可玩性就更強了。當然,我們要設計的通訊協議也復雜了起來。
● 總結
在這個項目的基礎上,我們還可以實現很多其他的功能,如解決單獨使用語音模塊控制小車聲音干擾的問題,制作出無線控制的語音識別模塊,或者是直接調用Google的語音庫,制作出手機語音控制的機器人小車……不要小看圖形化編程軟件,App Inventor和ArduBlock已經足夠強大了,趕緊動手吧!
endprint