嵌入式系統(2)- 樹莓派DIY小車 - python控制小車
阿新 • • 發佈:2018-12-06
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