久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2585|回復: 0
打印 上一主題 下一主題
收起左側

Micropython實例之DIY超聲波避障小車

[復制鏈接]
跳轉到指定樓層
樓主
    當今發達的交通在給人們帶來便捷的同時也帶來了許多的交通事故。人們遇到緊急事情處理超時是造成因素的主要原因之一。如果我們的汽車更加智能,事先能預測并顯示前面障礙物距離車的距離,當障礙物距離車很近的時候自動采取一些措施來避開障礙物,這樣就能在很大程度上避免事故的發生,下面我來帶大家做一個智能的避障小車。
下方可查看演示視頻!

    一、實驗器材

    1、TPYboard V102板  1塊
    2、電機驅動模塊L298N   1個
    3、電機 2塊
    4、小車底盤 1個
    5、超聲波模塊 1個
    6、舵機 1個
    7、SG90舵機支架 1個
    8、超聲波云臺支架 1個



    二、超聲波模塊

    什么是超聲波模塊

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

    超聲波模塊測距的原理

    采用IO口TRIG觸發測距,給最少10us的高電平信呈。
    模塊自動發送 8 個 40khz 的方波,自動檢測是否有信號返回。

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




    三、電機驅動模塊

    什么是電機驅動模塊

    電機驅動模塊主要是可以控制電機的運行:調速、運行、停止、步進、勻速等操作。

    L298N的使用方法

    L298N模塊是2路的H橋驅動,所以可以同時驅動兩個電機,接法如圖所示使能ENA ENB之后,可以分別從IN1 IN2輸入PWM信號驅動電機1的轉速和方向,可以分別從IN3 IN4輸入PWM信號驅動電機2的轉速和方向。我們將電機1接口的OUT1與OUT2與小車的一個電機的正負極連接起來,將電機2接口的OUT3與OUT2與小車的另一個電機的正負極連接起來。然后將兩邊的接線端子,即供電正極(中間的接線端子為接地)連接TPYboard的VIN,中間的接線端子即接地,連接TPYBoard的GND,In1-In4連接TPYBoard的X1,X2,Y1,Y2,通過X1,X2與Y1,Y2的高低電平,來控制電機的轉動,從而讓小車前進,后退,向左,向右。




    四、舵機

    概述

    舵機也叫伺服電機,最早用于船舶上實現其轉向功能,由于可以通過程序連續控制其轉角,因而被廣泛應用智能小車以實現轉向以及機器人各類關節運動中,如下圖所示。




    2、舵機的組成

    一般來講,舵機主要由以下幾個部分組成,舵盤、減速齒輪組、位置反饋電位計、直流電機、控制電路等,如下圖所示。



    舵機的輸入線共有三條,紅色中間,是電源線,一邊灰色的是地線,這輛根線給舵機提供最基本的能源保證,主要是電機的轉動消耗。電源有兩種規格,一是4.8V,一是6.0V,分別對應不同的轉矩標準,即輸出力矩不同,6.0V對應的要大一些,具體看應用條件;另外一根線是控制信號線,Futaba的一般為白色,JR的一般為桔黃色。另外要注意一點,SANWA的某些型號的舵機引線電源線在邊上而不是中間,需要辨認。但記住紅色為電源,灰色為地線,剩下的一根為信號線,一般不會搞錯。本實驗中,舵機紅色接TPYBoard v102+的VIN引腳,灰色接TPYBoard v102+的GND引腳,剩下的橙色是信號線,接TPYBoard V102+的X3針腳。TPYBoard v102+ 的X1、X2、X3、X4為信號引腳。




    3、舵機工作原理

    控制電路板接受來自信號線的控制信號,控制電機轉動,電機帶動一系列齒輪組,減速后傳動至輸出舵盤。舵機的輸出軸和位置反饋電位計是相連的,舵盤轉動的同時,帶動位置反饋電位計,電位計將輸出一個電壓信號到控制電路板,進行反饋,然后控制電路板根據所在位置決定電機轉動的方向和速度,從而達到目標停止。其工作流程為:控制信號→控制電路板→電機轉動→齒輪組減速→舵盤轉動→位置反饋電位計→控制電路板反饋。

    五、伺服電機的構造函數與方法

    1.構造函數
    pyb.Servo(id)
    在這id為1-4,對應TPYBoard v102+的X1-X4。

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

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

    六、硬件接線圖

  
TPYBoard v102
  
超聲波模塊
舵機
L298N驅動模塊
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


    七、實驗效果

   

    八、源代碼
  1. # main.py -- put your code here!
  2. import pyb
  3. from pyb import Pin
  4. from pyb import Timer
  5. from pyb import servo

  6. x1 = Pin('X1', Pin.OUT_PP)
  7. x2 = Pin('X2', Pin.OUT_PP)
  8. y1 = Pin('Y1', Pin.OUT_PP)
  9. y2 = Pin('Y2', Pin.OUT_PP)
  10. Trig = Pin('X9',Pin.OUT_PP)
  11. Echo = Pin('X10',Pin.IN)

  12. num=0
  13. flag=0
  14. run=1
  15. zuo=0
  16. qian=0
  17. you=0
  18. distance=0
  19. def start(t):
  20.     global flag
  21.     global num
  22.     if(flag==0):
  23.         num=0
  24.     else:
  25.         num=num+1
  26. def stop(t):
  27.     global run
  28.     if(run==0):
  29.         run=1
  30. start1=Timer(1,freq=10000,callback=start)
  31. stop1=Timer(4,freq=2,callback=stop)

  32. #小車左轉
  33. def left():
  34.     x1.high()
  35.     x2.low()
  36.     y1.high()
  37.     y2.low()
  38. #小車前進
  39. def go():
  40.     x1.high()
  41.     x2.low()
  42.     y1.low()
  43.     y2.high()
  44. #小車后退
  45. def back():
  46.     x1.low()
  47.     x2.high()
  48.     y1.high()
  49.     y2.low()
  50. #小車右轉
  51. def right():
  52.     x1.low()
  53.     x2.high()
  54.     y1.low()
  55.     y2.high()
  56. #小車停止
  57. def stop():
  58.     x1.low()
  59.     x2.low()
  60.     y1.low()
  61.     y2.low()
  62. #控制舵機向右、向左、向前
  63. def servo():
  64.     global distance
  65.     global zuo
  66.     global you
  67.     global qian
  68.     servo3=pyb.Servo(3)
  69.     #向右75旋轉
  70.     servo3.angle(-75,500)
  71.     pyb.delay(1000)
  72.     ceju()
  73.     you=distance
  74.     print('you',you)
  75.     #向左轉75度
  76.     servo3.angle(75,500)
  77.     pyb.delay(1000)
  78.     ceju()
  79.     zuo=distance
  80.     print('zuo',distance)
  81.     #轉到0度
  82.     servo3.angle(0,500)
  83.     pyb.delay(1000)
  84.     ceju()
  85.     qian=distance
  86.     print('qian',distance)
  87.     #返回正前方、左前方、右前方的距離
  88.     return qian,zuo,you
  89. #測距方法
  90. def  ceju():
  91.     global flag
  92.     global num
  93.     global run
  94.     global distance
  95.     if(run==1):
  96.         Trig.value(1)
  97.         pyb.udelay(100)
  98.         Trig.value(0)
  99.         while(Echo.value()==0):
  100.             Trig.value(1)
  101.             pyb.udelay(100)
  102.             Trig.value(0)
  103.             flag=0
  104.         if(Echo.value()==1):
  105.             flag=1
  106.             while(Echo.value()==1):           
  107.                 flag=1
  108.         if(num!=0):
  109.             #測距
  110.             distance=num/10000*34299/2
  111.             #print('Distance:')
  112.             #print(distance,'cm')
  113.             pyb.delay(500)
  114.         flag=0
  115.         run=0
  116.     return distance
  117. def main():
  118.     global distance
  119.     global zuo
  120.     global you
  121.     global qian
  122.     servo3=pyb.Servo(3)
  123.     servo3.angle(0,500)
  124.     pyb.delay(1000)
  125.     ceju()
  126.     while 1==1:
  127.         ceju()、
  128.         #前方距離大于40cm前進
  129.         if distance > 40:
  130.             go()
  131.             ceju()
  132.             print('juli',distance)
  133.         #前方距離小于40cm
  134.         if distance <= 40:
  135.             stop()
  136.             back()
  137.             pyb.delay(500)
  138.             stop()
  139.             servo()
  140.             #如果右前方距離大于左前方
  141.             if you>zuo:
  142.                 right()
  143.                 pyb.delay(400)
  144.                 ceju()
  145.             #如果左前方距離大于右前方
  146.             if zuo>you:
  147.                 left()
  148.                 pyb.delay(400)
  149.                 ceju()
  150.             #如果所有方向距離全部小于15cm
  151.             if zuo<15 and you< 15 and qian<15 :
  152.                 stop()
  153.                 back()
  154.                 pyb.delay(800)
  155.                 stop()
  156.                 ceju()
  157.             #有一個方向距離小于5CM
  158.             if zuo<5 or you <5 or qian<5:
  159.                 stop()
  160.                 back()
  161.                 pyb.delay(800)
  162.                 stop()
  163.                 ceju()
  164. main()
復制代碼





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月免费视频 | 国产精品美女久久久久aⅴ国产馆 | 欧美一级在线观看 | 最新中文字幕久久 | 国产午夜在线 | 精品日韩在线 | 亚洲精品免费观看 | 日韩高清国产一区在线 | 最新中文在线视频 | 国产999精品久久久久久绿帽 | 亚洲一区二区三区在线视频 | 喷水毛片| 免费的色网站 | 亚洲97| 91精品一区二区三区久久久久久 | 美国一级片在线观看 | 香蕉二区| 色综合久久久久 | 日本人麻豆| 香蕉久久久 | 日本福利视频免费观看 | 欧美在线小视频 | 中文精品视频 | 91精品久久久久 | 亚洲视频免费在线 | 亚洲电影一区二区三区 | 久久久毛片 | 欧美日韩在线精品 | 欧美乱人伦视频 | 中文字幕一区二区三区不卡 | 国产精品久久久久久网站 | 久久国产精品免费 | 国产精品久久久久久中文字 | 酒色成人网 | 亚洲福利在线视频 | 成人亚洲 | 国产精品区二区三区日本 | 日本一区二区高清视频 | 精品无码久久久久久国产 | 欧美亚洲免费 | 亚洲网站在线观看 |