---
# System prepended metadata

title: WiFi遙控車

---

# 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/

