溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python DIY超聲波避障小車(chē)的方法是什么

發(fā)布時(shí)間:2022-01-13 10:26:33 來(lái)源:億速云 閱讀:153 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“python DIY超聲波避障小車(chē)的方法是什么”,在日常操作中,相信很多人在python DIY超聲波避障小車(chē)的方法是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”python DIY超聲波避障小車(chē)的方法是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

    一、實(shí)驗(yàn)器材

    1、TPYboard V102板  1塊
    2、電機(jī)驅(qū)動(dòng)模塊L298N   1個(gè)
    3、電機(jī) 2塊
    4、小車(chē)底盤(pán) 1個(gè)
    5、超聲波模塊 1個(gè)
    6、舵機(jī) 1個(gè)
    7、SG90舵機(jī)支架 1個(gè)
    8、超聲波云臺(tái)支架 1個(gè)

python DIY超聲波避障小車(chē)的方法是什么

    二、超聲波模塊

    什么是超聲波模塊

    超聲波傳感器是利用超聲波的特性研制而成的傳感器, 它是通過(guò)傳送一個(gè)超聲波(遠(yuǎn)高于人的聽(tīng)覺(jué)范圍)和提供一個(gè)對(duì)應(yīng)于爆裂回聲返回到傳感器所需時(shí)間的輸出脈沖來(lái)工作的。超聲波傳感器在非接觸性測(cè)量方面的應(yīng)用非常廣泛,如檢測(cè)液體水位(特別是具有腐蝕性的液體,如硫酸、硝酸液體),汽車(chē)倒車(chē)防撞系統(tǒng),金屬/非金屬探傷等,都可以用到超聲波距離傳感器。

    超聲波模塊測(cè)距的原理

    采用IO口TRIG觸發(fā)測(cè)距,給最少10us的高電平信呈。
    模塊自動(dòng)發(fā)送 8 個(gè) 40khz 的方波,自動(dòng)檢測(cè)是否有信號(hào)返回。

    (3)有信號(hào)返回,通過(guò) IO 口 ECHO 輸出一個(gè)高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。測(cè)試距離=(高電平時(shí)間*聲速(340M/S))/2。
    如下圖接線(xiàn),VCC 供 5V電源, GND 為地線(xiàn),TRIG 觸發(fā)控制信號(hào)輸入,接板子的X9,ECHO 回響信號(hào)輸出,接板子的X10,四個(gè)接口端。

python DIY超聲波避障小車(chē)的方法是什么
    三、電機(jī)驅(qū)動(dòng)模塊

    什么是電機(jī)驅(qū)動(dòng)模塊

    電機(jī)驅(qū)動(dòng)模塊主要是可以控制電機(jī)的運(yùn)行:調(diào)速、運(yùn)行、停止、步進(jìn)、勻速等操作。

    L298N的使用方法

    L298N模塊是2路的H橋驅(qū)動(dòng),所以可以同時(shí)驅(qū)動(dòng)兩個(gè)電機(jī),接法如圖所示使能ENA ENB之后,可以分別從IN1 IN2輸入PWM信號(hào)驅(qū)動(dòng)電機(jī)1的轉(zhuǎn)速和方向,可以分別從IN3 IN4輸入PWM信號(hào)驅(qū)動(dòng)電機(jī)2的轉(zhuǎn)速和方向。我們將電機(jī)1接口的OUT1與OUT2與小車(chē)的一個(gè)電機(jī)的正負(fù)極連接起來(lái),將電機(jī)2接口的OUT3與OUT2與小車(chē)的另一個(gè)電機(jī)的正負(fù)極連接起來(lái)。然后將兩邊的接線(xiàn)端子,即供電正極(中間的接線(xiàn)端子為接地)連接TPYboard的VIN,中間的接線(xiàn)端子即接地,連接TPYBoard的GND,In1-In4連接TPYBoard的X1,X2,Y1,Y2,通過(guò)X1,X2與Y1,Y2的高低電平,來(lái)控制電機(jī)的轉(zhuǎn)動(dòng),從而讓小車(chē)前進(jìn),后退,向左,向右。

python DIY超聲波避障小車(chē)的方法是什么
    四、舵機(jī)

    概述

    舵機(jī)也叫伺服電機(jī),最早用于船舶上實(shí)現(xiàn)其轉(zhuǎn)向功能,由于可以通過(guò)程序連續(xù)控制其轉(zhuǎn)角,因而被廣泛應(yīng)用智能小車(chē)以實(shí)現(xiàn)轉(zhuǎn)向以及機(jī)器人各類(lèi)關(guān)節(jié)運(yùn)動(dòng)中。


    2、舵機(jī)的組成

    一般來(lái)講,舵機(jī)主要由以下幾個(gè)部分組成,舵盤(pán)、減速齒輪組、位置反饋電位計(jì)、直流電機(jī)、控制電路等,如下圖所示。

python DIY超聲波避障小車(chē)的方法是什么

    舵機(jī)的輸入線(xiàn)共有三條,紅色中間,是電源線(xiàn),一邊灰色的是地線(xiàn),這輛根線(xiàn)給舵機(jī)提供最基本的能源保證,主要是電機(jī)的轉(zhuǎn)動(dòng)消耗。電源有兩種規(guī)格,一是4.8V,一是6.0V,分別對(duì)應(yīng)不同的轉(zhuǎn)矩標(biāo)準(zhǔn),即輸出力矩不同,6.0V對(duì)應(yīng)的要大一些,具體看應(yīng)用條件;另外一根線(xiàn)是控制信號(hào)線(xiàn),F(xiàn)utaba的一般為白色,JR的一般為桔黃色。另外要注意一點(diǎn),SANWA的某些型號(hào)的舵機(jī)引線(xiàn)電源線(xiàn)在邊上而不是中間,需要辨認(rèn)。但記住紅色為電源,灰色為地線(xiàn),剩下的一根為信號(hào)線(xiàn),一般不會(huì)搞錯(cuò)。本實(shí)驗(yàn)中,舵機(jī)紅色接TPYBoard v102+的VIN引腳,灰色接TPYBoard v102+的GND引腳,剩下的橙色是信號(hào)線(xiàn),接TPYBoard V102+的X3針腳。TPYBoard v102+ 的X1、X2、X3、X4為信號(hào)引腳。

python DIY超聲波避障小車(chē)的方法是什么


    3、舵機(jī)工作原理

    控制電路板接受來(lái)自信號(hào)線(xiàn)的控制信號(hào),控制電機(jī)轉(zhuǎn)動(dòng),電機(jī)帶動(dòng)一系列齒輪組,減速后傳動(dòng)至輸出舵盤(pán)。舵機(jī)的輸出軸和位置反饋電位計(jì)是相連的,舵盤(pán)轉(zhuǎn)動(dòng)的同時(shí),帶動(dòng)位置反饋電位計(jì),電位計(jì)將輸出一個(gè)電壓信號(hào)到控制電路板,進(jìn)行反饋,然后控制電路板根據(jù)所在位置決定電機(jī)轉(zhuǎn)動(dòng)的方向和速度,從而達(dá)到目標(biāo)停止。其工作流程為:控制信號(hào)→控制電路板→電機(jī)轉(zhuǎn)動(dòng)→齒輪組減速→舵盤(pán)轉(zhuǎn)動(dòng)→位置反饋電位計(jì)→控制電路板反饋。

    五、伺服電機(jī)的構(gòu)造函數(shù)與方法

    1.構(gòu)造函數(shù)
    pyb.Servo(id)
    在這id為1-4,對(duì)應(yīng)TPYBoard v102+的X1-X4。

    2.方法
    Servo.angle([angle,time = 0 ])
    如果沒(méi)有給出參數(shù),則該函數(shù)返回當(dāng)前角度。
    如果給出參數(shù),則該函數(shù)設(shè)置伺服角度:

    angle 是以度數(shù)移動(dòng)的角度。
    time是達(dá)到指定角度所需的毫秒數(shù)。如果省略,則伺服器盡可能快地移動(dòng)到其新位置。
    Servo.speed([speed, time=0])
    如果沒(méi)有給出參數(shù),則該函數(shù)返回當(dāng)前速度。
    如果給出參數(shù),則該功能設(shè)置伺服的速度:
    speed 是在-100到100之間變化的速度。
    time是達(dá)到指定速度所需的毫秒數(shù)。如果省略,則伺服器盡可能快地加速。
    Servo.pulse_width([value ]) <http://docs.micropython.org/en/latest/pyboard/library/pyb.Servo.html>
    如果沒(méi)有給出參數(shù),該函數(shù)返回當(dāng)前的原始脈沖寬度值。
    如果給出參數(shù),則該函數(shù)設(shè)置原始脈沖寬度值。
    Servo.calibration([pulse_min,pulse_max,pulse_centre [,pulse_angle_90,pulse_speed_100 ]])
    如果沒(méi)有給出參數(shù),則該函數(shù)返回當(dāng)前的校準(zhǔn)數(shù)據(jù),作為5元組。
    如果給出參數(shù),該功能設(shè)置時(shí)序校準(zhǔn):
    pulse_min 是允許的最小脈沖寬度。
    pulse_max 是允許的最大脈沖寬度。
    pulse_centre 是對(duì)應(yīng)于中心/零位置的脈沖寬度。
    pulse_angle_90 是對(duì)應(yīng)于90度的脈沖寬度。
    pulse_speed_100 是對(duì)應(yīng)于速度100的脈沖寬度。

    六、硬件接線(xiàn)圖

TPYBoard v102

超聲波模塊

舵機(jī)

L298N驅(qū)動(dòng)模塊

VIN

VCC

 

 

GND

GND

 

 

X9

Trig

 

 

X10

Echo

 

 

VIN

 

 

GND

 

 

X3

 

 

X1

 

 

In1

X2

 

 

In2

Y1

 

 

In3

Y2

 

 

In4

VIN

 

 

+12V

GND

 

 

GND

VIN

 

 

+5V

  七、源代碼
 

# main.py -- put your code here!
import pyb
from pyb import Pin
from pyb import Timer
from pyb import servo

x1 = Pin('X1', Pin.OUT_PP)
x2 = Pin('X2', Pin.OUT_PP)
y1 = Pin('Y1', Pin.OUT_PP)
y2 = Pin('Y2', Pin.OUT_PP)
Trig = Pin('X9',Pin.OUT_PP)
Echo = Pin('X10',Pin.IN)

num=0
flag=0
run=1
zuo=0
qian=0
you=0
distance=0
def start(t):
    global flag
    global num
    if(flag==0):
        num=0
    else:
        num=num+1
def stop(t):
    global run
    if(run==0):
        run=1
start1=Timer(1,freq=10000,callback=start)
stop1=Timer(4,freq=2,callback=stop)

#小車(chē)左轉(zhuǎn)
def left():
    x1.high()
    x2.low()
    y1.high()
    y2.low()
#小車(chē)前進(jìn)
def go():
    x1.high()
    x2.low()
    y1.low()
    y2.high()
#小車(chē)后退
def back():
    x1.low()
    x2.high()
    y1.high()
    y2.low()
#小車(chē)右轉(zhuǎn)
def right():
    x1.low()
    x2.high()
    y1.low()
    y2.high()
#小車(chē)停止
def stop():
    x1.low()
    x2.low()
    y1.low()
    y2.low()
#控制舵機(jī)向右、向左、向前
def servo():
    global distance
    global zuo
    global you
    global qian
    servo3=pyb.Servo(3)
    #向右75旋轉(zhuǎn)
    servo3.angle(-75,500)
    pyb.delay(1000)
    ceju()
    you=distance
    print('you',you)
    #向左轉(zhuǎn)75度
    servo3.angle(75,500)
    pyb.delay(1000)
    ceju()
    zuo=distance
    print('zuo',distance)
    #轉(zhuǎn)到0度
    servo3.angle(0,500)
    pyb.delay(1000)
    ceju()
    qian=distance
    print('qian',distance)
    #返回正前方、左前方、右前方的距離
    return qian,zuo,you
#測(cè)距方法
def  ceju():
    global flag
    global num
    global run
    global distance
    if(run==1):
        Trig.value(1)
        pyb.udelay(100)
        Trig.value(0)
        while(Echo.value()==0):
            Trig.value(1)
            pyb.udelay(100)
            Trig.value(0)
            flag=0
        if(Echo.value()==1):
            flag=1
            while(Echo.value()==1):           
                flag=1
        if(num!=0):
            #測(cè)距
            distance=num/10000*34299/2
            #print('Distance:')
            #print(distance,'cm')
            pyb.delay(500)
        flag=0
        run=0
    return distance
def main():
    global distance
    global zuo
    global you
    global qian
    servo3=pyb.Servo(3)
    servo3.angle(0,500)
    pyb.delay(1000)
    ceju()
    while 1==1:
        ceju()、
        #前方距離大于40cm前進(jìn)
        if distance > 40:
            go()
            ceju()
            print('juli',distance)
        #前方距離小于40cm
        if distance <= 40:
            stop()
            back()
            pyb.delay(500)
            stop()
            servo()
            #如果右前方距離大于左前方
            if you>zuo:
                right()
                pyb.delay(400)
                ceju()
            #如果左前方距離大于右前方
            if zuo>you:
                left()
                pyb.delay(400)
                ceju()
            #如果所有方向距離全部小于15cm
            if zuo<15 and you< 15 and qian<15 :
                stop()
                back()
                pyb.delay(800)
                stop()
                ceju()
            #有一個(gè)方向距離小于5CM
            if zuo<5 or you <5 or qian<5:
                stop()
                back()
                pyb.delay(800)
                stop()
                ceju()
main()

到此,關(guān)于“python DIY超聲波避障小車(chē)的方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI