# WiFi遙控車 這個作品是使用樹莓派(Raspberry Pi)所做的WiFi遙控車,透過手機熱點分享給樹莓派,並建立網頁遙控器,透過網頁操控遙控車做簡單的前行後退與左右移動。 # # 遙控車圖片 ![Imgur](https://i.imgur.com/O1bV3ra.jpg) # # 影片連結 https://youtube.com/shorts/SIr67oPQ4A8?feature=share # # 所需材料 - Raspberry pi - L298N馬達驅動板 - 減速直流馬達*2 - 測速馬盤*2 - ST-2WD智能小車底盤*1 - 車輪*2 - 4節五號電池盒*1 - 1.5V電池*4 - 方向輪*1 - 船型開關*1 - M3*30x螺絲*4 - M3*6螺絲*8 - M3螺帽*8 - L12銅柱*4 - 塑膠殼、雙面膠、行動電源 # # 組裝步驟與程式碼 ## Step 1 安裝遙控車車體 在實際安裝馬達驅動版與Raspberry前,需先安裝車身架構與馬達、電池盒等外殼,並安裝船型開關,將電池盒正極焊接至船型開關的一端,另外一端焊接一條線備用,以及減速馬達需先焊上接線,如下圖 ![Imgur](https://i.imgur.com/vbyssb1.jpg) *注意!!船型開關不可直接接正負極* ![Imgur](https://i.imgur.com/zlUtTF0.jpg) ## Step 2 串接減速直流馬達 接著開始接L298N,接法說明如下 ![Imgur](https://i.imgur.com/OrZ1rUr.jpg) 輸出A分別接右側馬達的兩條線 輸出B分別接左側馬達的兩條線 +12V電源輸入孔接Step1船型開關焊接的備用的線,透過電池組來供應L298N所需的電 GND接地Raspberry Pi與電池盒的接地 +5V電源輸入閒置不用 IN1-->接Raspberry Pi pin7 IN2-->接Raspberry Pi pin11 IN1、IN2控制連接到輸出A的馬達,透過高低電位的組合決定正轉還是逆轉 IN3-->接Raspberry Pi pin13 IN4-->接Raspberry Pi pin15 IN3、IN4控制連接輸出的B馬達,決定正轉還是逆轉 L298N的供電由4顆1.5V的五號電池提供,操控遙控車時須先將船型電源打開 Raspberry Pi則透過行動電源供電,以達到無線遙控的效果 ## Step 3 程式碼撰寫 程式部分 --遙控車測試程式碼 編寫測試遙控車是否可以正常運作的cartest.py檔,透過控制四顆輪子正轉逆轉,達到控制遙控車的方向 ``` python #! /usr/bin/python import RPi.GPIO as gpio import sys gpio.setwarnings(False) gpio.setmode(gpio.BOARD) gpio.setup(7, gpio.OUT) gpio.setup(11, gpio.OUT) gpio.setup(13, gpio.OUT) gpio.setup(15, gpio.OUT) if len(sys.argv)<=1: cmd = 'stop' else: cmd = sys.argv[1] print(cmd) if cmd == 'go' or cmd =='g': #兩輪同時順時針轉 gpio.output(7, True) gpio.output(11, False) gpio.output(13, True) gpio.output(15, False) elif cmd == 'stop' or cmd =='s': #兩輪同時不過電 gpio.output(7, False) gpio.output(11, False) gpio.output(13, False) gpio.output(15, False) elif cmd == 'back' or cmd =='b': #兩輪同時逆時針轉 gpio.output(7, False) gpio.output(11, True) gpio.output(13, False) gpio.output(15, True) elif cmd == 'right' or cmd =='r': #右輪逆時針、左輪順時針以達到右轉目的 gpio.output(7, True) gpio.output(11, False) gpio.output(13, False) gpio.output(15, True) elif cmd == 'left' or cmd =='l': #左輪逆時針、右輪順時針以達到右轉目的 gpio.output(7, False) gpio.output(11, True) gpio.output(13, True) gpio.output(15, False) else: #若輸入其他指令,則同樣停止 gpio.output(7, False) gpio.output(11, False) gpio.output(13, False) gpio.output(15, False) ``` 編寫完畢後,在終端機輸入以下指令 ``` $ sudo chmod +x cartest.py $ sudo cp car /usr/bin ``` 將檔案設定成可執行檔,並複製到/usr/bin/底下,即可透過Raspberry 的終端機輸入指令控制遙控車 --建立car.py檔,由於最終我們是希望透過網頁的方式,去操控遙控車,因此需透過使用Python的Flask,將遙控車程式碼與網頁介面結合,使我們可以透過開啟網頁的方式進行遙控車的操控 ```python from flask import Flask, render_template import RPi.GPIO as gpio gpio.setwarnings(False) gpio.setmode(gpio.BOARD) gpio.setup(7, gpio.OUT) gpio.setup(11, gpio.OUT) gpio.setup(13, gpio.OUT) gpio.setup(15, gpio.OUT) #透過設定setwheel好方便我們操作 def setwheel(p7, p11, p13, p15): gpio.output(7, p7) gpio.output(11, p11) gpio.output(13, p13) gpio.output(15, p15) app = Flask(__name__) @app.route('/') @app.route('/<cmd>') def index(cmd=None): """Video streaming home page.""" if cmd == 'go': setwheel(False, True, False, True) elif cmd == 'stop': setwheel(False, False, False, False) elif cmd == 'back': setwheel(True, False, True, False) elif cmd == 'right': setwheel(True, False, False, True) elif cmd == 'left': setwheel(False, True, True, False) #將指令傳到網頁,預設會去執行car.py同一層的templates資料夾內的檔案 return render_template('index.html',cmd=cmd) if __name__ =="__main__": app.run(host='192.168.43.150',port='5000',debug=False) ``` --編寫網頁控制介面index.html,由於使用到Python Flask的功能,需在上一步編寫的car.py檔的同一層建立templates資料夾,並在該資料夾內建立index.html檔,檔案內容如下 ```html! <html> <head> <title>1111物聯網與大數據作業</title> </head> <body> <center> <h1>1111物聯網與大數據作業--WiFi遙控車</h1> <a href='/go'>Go</a> . <a href='/back'>Back</a> . <a href='/stop'>Stop</a> . <a href='/right'>Turn Right</a> . <a href='/left'>Turn Left</a> <hr> {% if cmd %} <h2> Your Command: {{ cmd }} </h2> {% endif %} </center> </body> </html> ``` ## Step 3 程式碼編寫完畢後,執行car.py檔,結果會如下 ![Imgur](https://i.imgur.com/NRcFNMa.jpg) 點擊網址,即可開啟遙控頁面 ![Imgur](https://i.imgur.com/3NPWp8Z.jpg) # 其他發想 完成WiFi遙控車後,後續應該還有很多的應用與發想,因為家裡有養貓的關係,也許可以再接上伺服馬達與鏡頭,搭配逗貓棒與物體辨識,來自動辨識貓咪,達成讓家裡的貓咪運動的目的,或自動拍攝貓咪抓到逗貓棒的瞬間的照片等等 # Reference - http://hophd.com/raspberry-pi-remote-car-hardware/ - http://www.ifuun.com/a2018071814824687/ - https://blog.miguelgrinberg.com/post/video-streaming-with-flask - http://hophd.com/raspberry-pi-remote-car-program/