1. 程式人生 > >嵌入式系統(2)- 樹莓派DIY小車 - python控制小車

嵌入式系統(2)- 樹莓派DIY小車 - python控制小車

1.引入包

import RPi.GPIO as GPIO
import time

GPIO控制樹莓派的輸入輸出

time用來計時,後面超聲波測距用

2.定義介面方式以及介面位置
    17、18、27、22 定義4個驅動模組
    9、10  定義超聲波模組

GPIO.setmode(GPIO.BCM)  
IN1 = 17
IN2 = 18
IN3 = 27
IN4 = 22
IN5 = 9
IN6 = 10

3.初始化:
    L298N的介面設為輸出
    超聲波模組介面設為輸入,來控制發動機使小車移動
    IN5:Trig超聲波傳送腳,高電平時傳送出40KHZ超聲波
    IN6:Echo超聲波接收檢測腳,收到返回的超聲波時,輸出高電平

def init():
    GPIO.setup(IN1,GPIO.OUT)
    GPIO.setup(IN2,GPIO.OUT)
    GPIO.setup(IN3,GPIO.OUT)
    GPIO.setup(IN4,GPIO.OUT)
    GPIO.setup(IN5,GPIO.OUT,initial = GPIO.LOW)
    GPIO.setup(IN6,GPIO.IN)

4.基礎方向行為:
    通過控制輪子的轉動,來實現前左右的移動,停車

def up():
    GPIO.output(IN1,GPIO.LOW)
    GPIO.output(IN2,GPIO.LOW)
    GPIO.output(IN3,GPIO.LOW)
    GPIO.output(IN4,GPIO.LOW)

def down():
    GPIO.output(IN1,GPIO.HIGH)
    GPIO.output(IN2,GPIO.HIGH)
    GPIO.output(IN3,GPIO.LOW)
    GPIO.output(IN4,GPIO.LOW)
    
def left():
    GPIO.output(IN1,GPIO.HIGH)
    GPIO.output(IN3,GPIO.HIGH)
    GPIO.output(IN2,GPIO.LOW)
    GPIO.output(IN4,GPIO.LOW)
    
def right():
    GPIO.output(IN2,GPIO.HIGH)
    GPIO.output(IN4,GPIO.HIGH)
    GPIO.output(IN1,GPIO.LOW)
    GPIO.output(IN3,GPIO.LOW)

5.超聲波測距

    初始化時將trig和echo埠都置低,首先向給 trig 傳送至少10 us的高電平脈衝(模組自動向外發送8個40K的方波),然後
等待,捕捉 echo 端輸出上升沿,捕捉到上升沿的同時,開啟定時器開始計時,再次等待捕捉echo的下降沿,當捕捉到下降沿,讀出計時器的時間,這就是超聲波在空氣中執行的時間,按照 測試距離=(高電平時間*聲速(340M/S))/2 就可以算出超聲波到障礙物的距離。

    函式返回值即為小車超聲波探測器到前面障礙的距離

def checkdist():
    GPIO.output(IN5,GPIO.HIGH)
    time.sleep(0.000015)
    GPIO.output(IN5,GPIO.LOW)
    while not GPIO.input(IN6):
        pass
    t1 = time.time()
    while GPIO.input(IN6):
        pass
    t2 = time.time()
    return (t2-t1)*340/2

 

參考資料:

1.樹莓派 GPIO學習筆記(2)--HC-SR04超聲波模組 https://blog.csdn.net/github_27696095/article/details/45274021

2.【樹莓派】樹莓派小車(三)Python控制小車  https://www.cnblogs.com/lihanxiang/p/8451818.html