Micropython TturnipBit 體感遙控車

所需器材:
        TurnipBit開發板 一塊
        下載數據線 一條
        智能小車套件 一套(底盤、車輪、電機等)
        超聲波模塊(HC-SR04)一個(用作小車的“眼睛”)
        L298N電機驅動模塊 一個
        接入互聯網的電腦 一臺(推薦使用Google Chome或者Firefox瀏覽器)
電機驅動和超聲波的安裝  超聲波模塊共4個引腳,分別是VCCGNDTrigEchoVCCTurnipBit擴展板的+5V引腳,GNDTurnipBit擴展板的GND引腳,Trig觸發引腳接P5Echo回傳引腳接P8L298N電機驅動模塊左側OUT3OUT4接線端子對應接入左輪電機的下側、上側側銅片,右側也是。L298N的輸入端IN1IN2IN3IN4分別接入擴展板的P19P13P12P11 詳細見下表:
  TurnipBit擴展板  
超聲波模塊
L298N
+5V
VCC
+12V+5V
GND
GND
GND
P5
Trig
P8
Echo
P11
IN4
P12
IN3
P13
IN2
P19
IN1
         
程序設計僞代碼分析   
    讓我們先用僞代碼來分析一下避障車的程序邏輯。首先,我們通過小車的超聲波模塊來檢測前方是否存在障礙物,計算出與障礙物之間的距離。當與障礙物的距離小於或等於我們預設的安全距離時,控制小車進行轉向避開障礙物;當與障礙物的距離大於我們預設的安全距離時,控制小車進行繼續前進;邏輯順序如下:第一步,觸犯超聲波模塊開始檢測;第二步:計算出與前方障礙物的距離;第三步:判斷與障礙物的距離是否小於設定的安全距離;第四步:若小於或等於則進行轉向,避開障礙物;第五步:若大於則繼續保持前進。根據僞代碼,畫成流程圖如下:    代碼分析會思考的避障車整體代碼,可參考右側代碼顯示區,如下。
from microbit import *


display.show(Image.ARROW_N)
pin11.write_digital(0)
pin12.write_digital(1)
pin13.write_digital(0)
pin19.write_digital(1)
while True:
  num = 0
  pin5.write_digital(0)
  pin5.write_digital(1)
  sleep(0.01)
  if pin8.read_digital() != True:
    pin5.write_digital(0)
    pin5.write_digital(1)
    sleep(0.01)
  while pin8.read_digital():
    num = num + 1
  if num <= 8:
    display.show(Image.ARROW_W)
    pin11.write_digital(1)
    pin12.write_digital(0)
    pin13.write_digital(0)
    pin19.write_digital(1)
    sleep(1000)
    display.show(Image.ARROW_N)
    pin11.write_digital(0)
    pin12.write_digital(1)
    pin13.write_digital(0)
    pin19.write_digital(1)


     接下來,我們一起來分析一下代碼。       通過上面的代碼,不難發現,控制避障車前進的代碼部分我們重複編寫了兩遍,在實際項目中這種寫法是不合理的。爲了讓代碼更加簡潔,優雅,我們將控制前進的代碼部分提取出來建立名稱爲Go()的函數,在需要執行前進的地方直接調用Go()函數即可。

from microbit import *

def Go():
    display.show(Image.ARROW_N)
    pin11.write_digital(0)
    pin12.write_digital(1)
    pin13.write_digital(0)
    pin19.write_digital(1)

Go()
while True:
    num = 0
    pin5.write_digital(0)
    pin5.write_digital(1)
    sleep(0.01)
    if pin8.read_digital() != True:
        pin5.write_digital(0)
        pin5.write_digital(1)
        sleep(0.01)
    while pin8.read_digital():
        num = num + 1
    if num <= 8:
        display.show(Image.ARROW_W)
        pin11.write_digital(1)
        pin12.write_digital(0)
        pin13.write_digital(0)
        pin19.write_digital(1)
        sleep(1000)
        Go()

按照同樣的方式,我們將控制轉向和檢測障礙物的代碼分別建立Turn()Detection()函數。
from microbit import *

def Go():
    display.show(Image.ARROW_N)
    pin11.write_digital(0)
    pin12.write_digital(1)
    pin13.write_digital(0)
    pin19.write_digital(1)

def Turn():
    display.show(Image.ARROW_W)
    pin11.write_digital(1)
    pin12.write_digital(0)
    pin13.write_digital(0)
    pin19.write_digital(1)

def Detection():
    num=0
    pin5.write_digital(0)
    pin5.write_digital(1)
    sleep(0.01)
    if pin8.read_digital() != True:
        pin5.write_digital(0)
        pin5.write_digital(1)
        sleep(0.01)
    while pin8.read_digital():
        num = num + 1 
    return num
    
Go()
while True:
    num = Detection()
    if num <= 8:
        Turn()
        sleep(1000)
        Go()


代碼如上  ,那麼如果用拼插編程怎麼實現?  圖形拼插代碼.rar(1.57 MB, 下載次數: 0) 
微信公衆號:Micropython玩家匯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章