如何使用樹莓派制作智能小車

這篇文章將為大家詳細講解有關如何使用樹莓派制作智能小車,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創新互聯公司憑借在網站建設、網站推廣領域領先的技術能力和多年的行業經驗,為客戶提供超值的營銷型網站建設服務,我們始終認為:好的營銷型網站就是好的業務員。我們已成功為企業單位、個人等客戶提供了網站設計制作、成都網站設計服務,以良好的商業信譽,完善的服務及深厚的技術力量處于同行領先地位。

電影里,時不時地可以看到一些這樣的場景,一輛小車,上面裝有攝像頭,這輛小車可以通過電腦或都是手機進行遠程遙控,車上攝像頭拍到的畫面,可以實時地顯示在電腦或手機上,就像下圖這樣。

如何使用樹莓派制作智能小車

沒有接觸過這方面的朋友或許會覺得這是一門很高大上的技術活,其實,并不然,這種小車做起來其實很簡單。那么,這樣子的小車,需要怎么去做呢?

其實,我們只需要準備一塊控制小車的電路板(開發板),2到4個電機(馬達)、小車架子一個、攝像頭以及攝像頭云臺一個,以上這些基礎配件,然后對開發板進行編程、控制就可以了,整 體硬件成本加起來不到500塊錢。

**  開發板:**

開發板有很多種,比如51單片機、樹莓派、STM32、Arduino、micro:bit等等,都可以做為小車的控制板,我使用的是樹莓派開發板,然后,可持樹莓派有很多版本、型號,最便宜的樹莓派zero 68元就可以買到,不過不建議買這種,沒有網卡,需要另外買網線模塊,我使用的是樹莓派3B,價格220元,帶有無線和有線網卡,還帶有藍牙。

如何使用樹莓派制作智能小車

**小車架子:**某寶上有很多這種車架子,各式各樣的,只需要在某寶上搜索“智能小車”就能找到,帶上馬達一整套,也就五六十塊錢。

如何使用樹莓派制作智能小車

**攝像頭+云臺:**某寶上也是一搜一大堆,比如我下面用的那個,45塊錢。

如何使用樹莓派制作智能小車

配件準備好了,就是給小車的開發板裝系統,然后對小車進行編程控制。

小車的控制最主要有兩方面的控制,一個是小車的前后左右的運動控制,一個是攝像頭的拍攝、上下左右轉運的控制。

小車的前后左右控制:

#-*- coding:UTF-8 -*-
import RPi.GPIO as GPIO
import time

#小車電機引腳定義
LeftIn1 = 20
LeftIn2 = 21
LeftSpeed = 16


RightIn1 = 19
RightIn2 = 26
RightSpeed = 13

#設置GPIO口為BCM編碼方式
GPIO.setmode(GPIO.BCM)

#忽略警告信息
GPIO.setwarnings(False)

#電機引腳初始化操作
def car_init():
    global pwm_LeftSpeed
    global pwm_RightSpeed
    global delaytime
    GPIO.setup(LeftSpeed,GPIO.OUT,initial=GPIO.LOW)
    GPIO.setup(LeftIn1,GPIO.OUT,initial=GPIO.LOW)
    GPIO.setup(LeftIn2,GPIO.OUT,initial=GPIO.LOW)

    GPIO.setup(RightSpeed,GPIO.OUT,initial=GPIO.LOW)
    GPIO.setup(RightIn1,GPIO.OUT,initial=GPIO.LOW)
    GPIO.setup(RightIn2,GPIO.OUT,initial=GPIO.LOW)

    #設置pwm引腳和頻率為2000hz
    pwm_LeftSpeed = GPIO.PWM(LeftSpeed, 2000)
    pwm_RightSpeed = GPIO.PWM(RightSpeed, 2000)
    pwm_LeftSpeed.start(0)
    pwm_RightSpeed.start(0)

#小車前進   
def run(delaytime):
    GPIO.output(LeftIn1, GPIO.HIGH)
    GPIO.output(LeftIn2, GPIO.LOW)

    GPIO.output(RightIn1, GPIO.HIGH)
    GPIO.output(RightIn2, GPIO.LOW)

    pwm_LeftSpeed.ChangeDutyCycle(80)
    pwm_RightSpeed.ChangeDutyCycle(80)
    time.sleep(delaytime)

#小車后退
def back(delaytime):
    GPIO.output(LeftIn1, GPIO.LOW)
    GPIO.output(LeftIn2, GPIO.HIGH)
    GPIO.output(RightIn1, GPIO.LOW)
    GPIO.output(RightIn2, GPIO.HIGH)
    pwm_LeftSpeed.ChangeDutyCycle(80)
    pwm_RightSpeed.ChangeDutyCycle(80)
    time.sleep(delaytime)

#小車左轉   
def left(delaytime):
    GPIO.output(LeftIn1, GPIO.LOW)
    GPIO.output(LeftIn2, GPIO.LOW)
    GPIO.output(RightIn1, GPIO.HIGH)
    GPIO.output(RightIn2, GPIO.LOW)
    pwm_LeftSpeed.ChangeDutyCycle(80)
    pwm_RightSpeed.ChangeDutyCycle(80)
    time.sleep(delaytime)

#小車右轉
def right(delaytime):
    GPIO.output(LeftIn1, GPIO.HIGH)
    GPIO.output(LeftIn2, GPIO.LOW)
    GPIO.output(RightIn1, GPIO.LOW)
    GPIO.output(RightIn2, GPIO.LOW)
    pwm_LeftSpeed.ChangeDutyCycle(80)
    pwm_RightSpeed.ChangeDutyCycle(80)
    time.sleep(delaytime)

#小車原地左轉
def spin_left(delaytime):
    GPIO.output(LeftIn1, GPIO.LOW)
    GPIO.output(LeftIn2, GPIO.HIGH)
    GPIO.output(RightIn1, GPIO.HIGH)
    GPIO.output(RightIn2, GPIO.LOW)
    pwm_LeftSpeed.ChangeDutyCycle(80)
    pwm_RightSpeed.ChangeDutyCycle(80)
    time.sleep(delaytime)

#小車原地右轉
def spin_right(delaytime):
    GPIO.output(LeftIn1, GPIO.HIGH)
    GPIO.output(LeftIn2, GPIO.LOW)
    GPIO.output(RightIn1, GPIO.LOW)
    GPIO.output(RightIn2, GPIO.HIGH)
    pwm_LeftSpeed.ChangeDutyCycle(80)
    pwm_RightSpeed.ChangeDutyCycle(80)
    time.sleep(delaytime)

#小車停止   
def brake(delaytime):
    GPIO.output(LeftIn1, GPIO.LOW)
    GPIO.output(LeftIn2, GPIO.LOW)
    GPIO.output(RightIn1, GPIO.LOW)
    GPIO.output(RightIn2, GPIO.LOW)
    pwm_LeftSpeed.ChangeDutyCycle(80)
    pwm_RightSpeed.ChangeDutyCycle(80)
    time.sleep(delaytime)

攝像頭控制有兩部分,一是拍攝、二是云臺轉動。

**攝像頭的拍攝:**拍攝部分,我使用的是mjpg-streamer,這個工具可以把小車上的攝像頭當作遠程攝像頭(Web Camera)使用,安裝的方式也很簡單:

#安裝必要的庫
sudo apt-get update
sudo apt-get install libjpeg8-dev
sudo apt-get install imagemagick
sudo apt-get install libv4l-dev
sudo apt-get autoremove cmake
sudo apt-get install cmake

必要庫安裝好后,下載mjpg-streamer到樹莓派上,并執行編譯即可:

cd mjpg-streamer/mjpg-streamer-experimental
make all
sudo make install

通過以上操作,就可以啟動攝像頭了:

#運行mjpg-streamer

./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"

攝像頭啟動后,可以在局域網內的任何一臺電腦上使用瀏覽器輸入:http://樹莓派IP:8080/?action=stream 即可看到攝像頭拍到的畫面。

**云臺控制:**云臺的主是對控制上下和左右的兩舵機進行編碼控制:

import RPi.GPIO as GPIO
import time
import pygame


#舵機引腳定義
ServoUpDownPin = 9
ServoLeftRightPin = 11

#設置GPIO口為BCM編碼方式
GPIO.setmode(GPIO.BCM)

#忽略警告信息
GPIO.setwarnings(False)


#初始化上下左右角度為90度
ServoLeftRightPos = 90
ServoUpDownPos = 90

def init():
    global pwm_UpDownServo
    global pwm_LeftRightServo
    
    GPIO.setup(ServoUpDownPin, GPIO.OUT)
    GPIO.setup(ServoLeftRightPin, GPIO.OUT)
    
    #設置舵機的頻率和起始占空比
    pwm_UpDownServo = GPIO.PWM(ServoUpDownPin, 50)
    pwm_LeftRightServo = GPIO.PWM(ServoLeftRightPin, 50)
    
    pwm_UpDownServo.start(0)
    pwm_LeftRightServo.start(0)


#攝像頭舵機左右旋轉到指定角度
def leftrightservo_appointed_detection(pos): 
    for i in range(1):   
        pwm_LeftRightServo.ChangeDutyCycle(2.5 + 10 * pos/180)
        time.sleep(0.02)                            #等待20ms周期結束
        pwm_LeftRightServo.ChangeDutyCycle(0)  #歸零信號

#攝像頭舵機上下旋轉到指定角度
def updownservo_appointed_detection(pos):  
    for i in range(1):  
        pwm_UpDownServo.ChangeDutyCycle(2.5 + 10 * pos/180)
        time.sleep(0.02)                            #等待20ms周期結束
        pwm_UpDownServo.ChangeDutyCycle(0) #歸零信號
        
        

#攝像頭舵機向上運動
def servo_up():
    global ServoUpDownPos
    pos = ServoUpDownPos
    updownservo_appointed_detection(pos)
    #time.sleep(0.05)
    pos +=0.7 
    ServoUpDownPos = pos
    if ServoUpDownPos >= 180:
        ServoUpDownPos = 180

#攝像頭舵機向下運動      
def servo_down():
    global ServoUpDownPos
    pos = ServoUpDownPos
    updownservo_appointed_detection(pos)
    #time.sleep(0.05)
    pos -= 0.7
    ServoUpDownPos = pos
    if ServoUpDownPos <= 45:
        ServoUpDownPos = 45
    

#攝像頭舵機向左運動
def servo_left():
    print("servo_left")
    global ServoLeftRightPos
    pos = ServoLeftRightPos
    leftrightservo_appointed_detection(pos)
    #time.sleep(0.10)
    pos += 0.7
    ServoLeftRightPos = pos
    print('ServoLeftRightPos:',ServoLeftRightPos)
    if ServoLeftRightPos >= 180:
        ServoLeftRightPos = 180

#攝像頭舵機向右運動
def servo_right():
    global ServoLeftRightPos
    pos = ServoLeftRightPos
    leftrightservo_appointed_detection(pos)
    #time.sleep(0.10)
    pos -= 0.7 
    ServoLeftRightPos = pos
    if ServoLeftRightPos <= 0:
        ServoLeftRightPos =  0
        
        
#所有舵機歸位
def servo_init():
    servoflag = 0
    servoinitpos = 90
    if servoflag != servoinitpos:  
        updownservo_appointed_detection(servoinitpos)
        leftrightservo_appointed_detection(servoinitpos)
        time.sleep(0.5)        
        pwm_LeftRightServo.ChangeDutyCycle(0)   #歸零信號
        pwm_UpDownServo.ChangeDutyCycle(0)  #歸零信號
    
#舵機停止
def servo_stop():
    pwm_LeftRightServo.ChangeDutyCycle(0)   #歸零信號
    pwm_UpDownServo.ChangeDutyCycle(0)  #歸零信號

對小車的控制編程完成后,最后我們使用WebSocket遠程連接小車,發送相關的控制命令,就可以使用電腦或手機遠程控制小車了。

如何使用樹莓派制作智能小車

關于“如何使用樹莓派制作智能小車”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

網頁題目:如何使用樹莓派制作智能小車
鏈接地址:http://m.kartarina.com/article28/pihjjp.html

成都網站建設公司_創新互聯,為您提供ChatGPT外貿網站建設定制網站網站策劃外貿建站服務器托管

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

手機網站建設
主站蜘蛛池模板: 精品人妻系列无码人妻免费视频| 无码专区HEYZO色欲AV| 国产AV无码专区亚洲AV男同| 无码精品久久久天天影视| 亚洲最大av资源站无码av网址| 自拍中文精品无码| 性色av极品无码专区亚洲| 韩国免费a级作爱片无码| 亚洲AV无码一区二区三区网址| 亚洲精品无码高潮喷水在线| WWW久久无码天堂MV| 无码精品A∨在线观看中文| 亚洲精品无码专区久久同性男| 无码内射中文字幕岛国片| 免费无码av片在线观看 | 亚洲日韩精品A∨片无码加勒比 | 无码人妻AⅤ一区二区三区水密桃 无码欧精品亚洲日韩一区夜夜嗨 无码免费又爽又高潮喷水的视频 无码毛片一区二区三区中文字幕 无码毛片一区二区三区视频免费播放 | 特级毛片内射www无码| 亚洲AV无码久久| 少妇无码太爽了在线播放| 成人免费无码大片A毛片抽搐色欲| 日韩丰满少妇无码内射| 亚洲av中文无码乱人伦在线r▽| 国产精品亚洲а∨无码播放不卡 | 无码人妻啪啪一区二区| 精品亚洲AV无码一区二区| 亚洲va无码手机在线电影| 国模无码人体一区二区| 中文无码AV一区二区三区| 无码av中文一区二区三区桃花岛| 亚洲国产精品无码久久九九大片 | 国产AV一区二区三区无码野战| 无码国产成人午夜电影在线观看 | 精品久久久无码21p发布| 中文字幕日韩精品无码内射| 亚洲av无码乱码在线观看野外 | 国产裸模视频免费区无码| 亚洲av永久无码精品漫画| 四虎成人精品国产永久免费无码| 欲色aV无码一区二区人妻| 无码任你躁久久久久久老妇|