【自動運転#30】ラジコンっぽくしてみる モータ編【ソフトウェアPart18】

目次

環境

Raspberry pi zero

iphone8

エディターはラズパイに初めから付いている、Thonnyを使ってます。

今回は

プログラムの解読が進まないので、今回は気分を変えて、プログラムをスマホで操作できるようにして、ラジコンっぽくしようと思います。

部品

  • ピンソケット2種類
  • 基板
  • モータドライバ
  • Raspberry Pi Zero
  • ジャンプワイヤー
  • モバイルバッテリ

配線繋げる

モータドライバ端子名と機能繋ぐ先
1番GNDラズパイGPIO39番
2番OUT1 出力端子モータの端子
3番NC何も繋げません。
4番Vref 制御電源端子モータドライバ8番と10kΩと繋いでます。
5番IN1 入力端子ラズパイGPIOピン13番
6番IN2 入力端子ラズパイGPIOピン15番
7番VCC ロジック側電源端子ラズパイGPIOピン1番(3.3V)
8番VS 出力側電源端子ラズパイGPIOピン2番(5V)
9番NC何も繋げません。
10番OUT2 出力端子モータの端子
*モータ端子はどちらに繋げてもいいです。
*ラズパイGPIOピン番号です。GPIOポート番号ではありませんのでご注意ください。

↑こんな感じです。

HTMLを作る

最初に、Webブラウザの操作画面をHTMLで作ります。

↓こんな感じです。”motor-client.html”というファイルに保存します。

<!DOCTYPE html><html><head><meta chatset="utf-8">
<meta name="viewport" content="width=device-width">
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<style> button { font-size:30px; border-radius:6px;  } </style>
</head><body style="text-align:center; font-size:30px;">
<script>
    function send(cmd) { $.get(cmd); $('#msg').html(cmd); }
</script><p>
    <button onclick="send('slottle')">slottle</button><br> 
    <button onclick="send('brake')">brake</button><br>
    <p id="msg"></p>
</p></body></html>

ラジコンとなるプログラムを作る

次にラジコンのプログラムを作ります。

↓こんな感じです。”Car_Controller.py”というファイルで保存します。

class CarController(object):

    FORWARD_PIN = 27 #ラズパイGPIO
    BACKWARD_PIN = 22 #ラズパイGPIO

    def __init__(self):
        # slottle
        wp.wiringPiSetupGpio()
        wp.pinMode(CarController.FORWARD_PIN,1)
        wp.softPwmCreate(CarController.FORWARD_PIN,0,100)
        wp.pinMode(CarController.BACKWARD_PIN,1)
        wp.softPwmCreate(CarController.BACKWARD_PIN,0,100)

    def slottle(self,x):
        #"""
        #x: -1.0 to 1.0
        #"""
        x = int(max(-100,min(100,100*x)))
        if 0<=x:
            wp.softPwmWrite(CarController.FORWARD_PIN,abs(x))
            wp.softPwmWrite(CarController.BACKWARD_PIN,0)
        if x<0:
            wp.softPwmWrite(CarController.FORWARD_PIN,0)
            wp.softPwmWrite(CarController.BACKWARD_PIN,abs(x))

Webサーバーのプログラムを作る

次にWebサーバのプログラムを作ります。

↓こんな感じです。「ブレーキ」とありますが、実際は「スロットル」の信号を「0」にしてるだけです。

from http.server import HTTPServer, BaseHTTPRequestHandler
from car_controller import CarController

class MotorServerHandler(BaseHTTPRequestHandler):
    #get to access 
    def do_GET(self):
        path = self.path
        print("path=", path)
        body = "ok"
        if path == "/":
            f = open("motor-client.html", encoding='utf-8')
            body = f.read()
            f.close()
        #スロットル
        if path == "/slottle":
            q = CarController()
            q.slottle(x= 0.5)
       #ブレーキ
        elif path == "/brake":
            q = CarController()
            q.slottle(x = 0.0)
        else:
            print("commnad unknown")
        self.send_response(200)
        self.send_header('Content-Type', 'text/html;charset=utf-8')
        self.end_headers()
        self.wfile.write(body.encode('utf-8'))
        
try:
    #start server
    addr = ('', 8081)
    httpd = HTTPServer(addr, MotorServerHandler)
    print("start server")
    httpd.serve_forever()
except KeyboardInterrupt:
    pass
httpd.socket.close()

やってみよう!

プログラムができたので、実際やってみます。

書いたプログラムは同じフォルダに入れておいてください。

次にLXTerminalを開きます。ファイルが実行できるように”cd”で移動します。

cd プログラムが入ってるフォルダのパス

次に”motor-server.py”プログラムを実行します。

sudo python3 motor-server.py

すると、「start server」という文字がLXTerminal上に出ます。

次にスマホでラズパイのIPアドレスにアクセスします。

ブラウザはなんでもいいですが、私は「Google Chome」でアクセスします。

検索バーに

http://(ラズパイのIPアドレス):8081/

と入力します。↓のような画面がスマホ上に出るはずです。

「slottle」を押すとモータが回ります。

「brake」を押すとモータが止まります。

動画です。

できたー。やったー。

注意点

Car_Controller.pyのプログラムがわからない

そもそも、Car_Controller.pyのプログラムの中身がネットで拾った情報でよくわかっていません。

なので、とりあえず、xの値をそのまま数字を入れています。

解読できたら、報告します。

よろしくお願いします。

使った部品

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次