在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用樹莓派控制交通紅綠燈(簡潔版)

CHANBAEK ? 來源:和娃一起玩樹莓派 ? 作者:老孟K ? 2023-07-02 15:08 ? 次閱讀

前面我們通過控制LED燈和讀取按鈕狀態(tài),簡單演示了樹莓派如何通過GPIO來與外部世界溝通。今天我們要用樹莓派模擬一個(gè)控制交通的紅綠燈,讓大家進(jìn)一步學(xué)習(xí)如何通過程序和計(jì)算機(jī)的I/O來解決實(shí)際問題。

今天要做的紅綠燈是簡潔版,我們今后還會講它的進(jìn)階版(高級版)。簡潔版的紅綠燈有一個(gè)開關(guān)控制按鈕和紅黃綠三色交通控制燈。當(dāng)程序啟動時(shí),只有黃燈處于閃爍狀態(tài),提醒來往車輛注意其他路口的車輛,當(dāng)?shù)谝淮伟聪掳粹o后,則進(jìn)入紅綠燈交替開關(guān)的狀態(tài),和大家日常在路口看到的類似,再次按下按鈕,則重新恢復(fù)到黃燈閃爍狀態(tài)。這是大部分路口自動控制紅綠燈的邏輯。(如果大家不明白紅綠燈相關(guān)的交規(guī),可以咨詢父母或者上網(wǎng)搜索,這里不說了)。

需要的元器件

本次的紅綠燈需要如下的元器件

  • 開關(guān)按鈕一個(gè)
  • 跳線若干,元器件連接方式不同,需要的跳線數(shù)不同,約6-10個(gè)。
  • 發(fā)光二極管(LED)三個(gè),如果沒有紅黃綠三色,可以用同色LED,用LED位置表示紅黃綠。
  • 1K歐姆的電阻三個(gè)
  • 面包板(可選)
  • 樹莓派GPIO擴(kuò)展組件(可選)

紅綠燈電路

在前面控制發(fā)光二極管時(shí),我們知道發(fā)光二極管需要連接一個(gè)1K歐姆的電阻來起到限制電流的保護(hù)作用。所以電路如下圖。

圖片

從電路可以看到,控制按鈕連接了GPIO17,紅色LED連接了GPIO26,黃色LED連接了GPIO5,綠色LED連接了GPIO27。

最終的元器件連接如下圖:

圖片

Python控制程序

在我們實(shí)際進(jìn)行電路或程序設(shè)計(jì)時(shí),一般都會采取循序漸進(jìn)的方式,先從簡單的設(shè)計(jì)開始,然后一步一步加入更復(fù)雜的邏輯,直到最終實(shí)現(xiàn)我們需要的效果。這在電路或程序較復(fù)雜時(shí)尤其重要。

首先,我們需要確保電路連接都是正確的,有一個(gè)簡單的驗(yàn)證方法,在前面的發(fā)光二極管控制一講也提到過,就是在發(fā)光二極管連接到GPIO之前,先直接連接GPIO的第一引腳,也就是3.3V的電源,此時(shí)LED會亮,則說明連接正確無誤。

其次,我們要確保各器件連接了正確的GPIO引腳,因?yàn)橛行〨PIO引腳緊挨著(如GPIO17,27,22),如果連接錯(cuò)了,也是沒法成功控制電路的。按我的電路,先用下面的程序運(yùn)行一下看,3個(gè)LED都應(yīng)該亮1秒,滅1秒,同時(shí)按鈕按下超過1秒,可以看到打印輸出Pressed。

from gpiozero import LED


from time import sleep


red = LED(26)  #紅燈鏈接了GPIO26
yellow= LED(5)   #黃燈鏈接了GPIO5
green = LED(22)  #綠燈連接了GPIO22
control = Button(17) #按鈕連接了GPIO17
while True:
    red.on()
    yellow.on()
    green.on()
    if control.is_pressed:
        print("Pressed")   #保持按鈕按下超過1秒,可以看到打印輸出
    sleep(1)
    #先讓LED亮1秒
    red.off()
    yellow.off()
    green.off()
    sleep(1)
    #再讓LED滅1秒

接下來我們加入更多的邏輯。只讓黃燈閃爍,還是紅綠燈交替控制,需要有一個(gè)變量來進(jìn)行判斷,因?yàn)榉谴思幢耍钥梢园堰@個(gè)變量設(shè)置為布爾型(True或False),我們把它命名為kaiguan。代碼先改為如下:

from gpiozero import LED,Button


from time import sleep


kaiguan = False   #控制變量默認(rèn)設(shè)置為False,此時(shí)黃燈閃爍


red = LED(26)  #紅燈鏈接了GPIO26
yellow= LED(5)   #黃燈鏈接了GPIO5
green = LED(22)  #綠燈連接了GPIO22
control = Button(17) #按鈕連接了GPIO17
while True:
    if kaiguan == False:   #當(dāng)kaiguan變量為False時(shí),黃燈閃爍
        yellow.on()
        sleep(0.5)
        yellow.off()
        sleep(0.5)
    else:
        red.on()
        yellow.on()
        green.on()
        if control.is_pressed:
            print("Pressed")
        sleep(1)
        red.off()
        yellow.off()
        green.off()


        sleep(1)

運(yùn)行上面的程序,可以看到黃燈閃爍,按按鈕沒有任何效果,因?yàn)閑lse部分的代碼永遠(yuǎn)執(zhí)行不到。

接著我們加入按鈕是否按下的判斷邏輯,代碼改為:

from gpiozero import LED,Button


from time import sleep


kaiguan = False   


red = LED(26)  #紅燈鏈接了GPIO26
yellow= LED(5)   #黃燈鏈接了GPIO5
green = LED(22)  #綠燈連接了GPIO22
control = Button(17) #按鈕連接了GPIO17
while True:
    if kaiguan == False:   #當(dāng)kaiguan變量為False時(shí),黃燈閃爍
        yellow.on()
        sleep(0.5)
        yellow.off()
        sleep(0.5)
    else:             #當(dāng)kaiguan變量為True時(shí),和原來邏輯一樣
        red.on()
        yellow.on()
        green.on()

        sleep(1)
        red.off()
        yellow.off()
        green.off()


        sleep(1)
    if control.is_pressed:  #判斷按鈕是否被按下
            print("Pressed")
            kaiguan = bool(1-kaiguan)    #取反。

運(yùn)行上面的程序,可以看到,一開始只有黃燈閃爍,當(dāng)我們按下按鈕時(shí)(保持按下狀態(tài)直到看到Pressed被打印出來),會變成所有燈亮1秒滅1秒,再次按按鈕,又會變成黃燈閃爍,如此反復(fù)。

現(xiàn)在看來,我們需要修改else部分的邏輯,使它實(shí)現(xiàn)綠燈亮3秒,然后熄滅,同時(shí)黃燈亮1秒,然后熄滅,同時(shí)紅燈亮,3秒后紅燈熄滅,綠燈亮,如此反復(fù)。大家也可以按自己喜好調(diào)整紅綠燈的時(shí)間。最新的代碼如下:

from gpiozero import LED,Button


from time import sleep


kaiguan = False   


red = LED(26)  #紅燈鏈接了GPIO26
yellow= LED(5)   #黃燈鏈接了GPIO5
green = LED(22)  #綠燈連接了GPIO22
control = Button(17) #按鈕連接了GPIO17
while True:
    if kaiguan == False:   #當(dāng)kaiguan變量為False時(shí),黃燈閃爍
        yellow.on()
        sleep(0.5)
        yellow.off()
        sleep(0.5)
    else:          #當(dāng)kaiguan變量為True時(shí)
        green.on()   
        sleep(3)    #綠燈亮3green.off()
        yellow.on()  #黃燈亮1sleep(1)
        yellow.off()
        red.on()     #紅燈亮3sleep(3)
        red.off()
    if control.is_pressed:  ##判斷按鈕是否被按下
            print("Pressed")
            kaiguan = bool(1-kaiguan)

上面代碼中 bool(1-kaiguan)可以實(shí)現(xiàn)取反的效果,也就是當(dāng)kaiguan現(xiàn)在是True時(shí),運(yùn)算后會被改為False,如果kaiguan現(xiàn)在是False,則會被改為True。

運(yùn)行上面的代碼基本可以實(shí)現(xiàn)我們需要的邏輯,但是存在以下不足:

按鈕不是按下后就會觸發(fā)改變,而是需要多按一會,尤其是在紅綠燈交替亮滅時(shí),需要多按一會,直到屏幕輸出Pressed后才會變化為黃燈閃爍。這是因?yàn)樵诩t綠燈交替亮滅時(shí),約7秒的時(shí)間沒有檢測按鈕是否按下,只有這7秒的程序執(zhí)行完畢后才能進(jìn)入按鈕檢測部分的代碼,可以在紅燈亮了后再按,會減少按下的時(shí)間。

大家可以看看我的紅綠燈電路運(yùn)行起來的樣子。

如何才能讓按鈕更靈敏,同時(shí)加入更高級的控制邏輯呢?下一次我們將在紅綠燈高階版進(jìn)行介紹。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 元器件
    +關(guān)注

    關(guān)注

    113

    文章

    4817

    瀏覽量

    94634
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1595

    瀏覽量

    109455
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1279

    瀏覽量

    53746
  • 樹莓派
    +關(guān)注

    關(guān)注

    121

    文章

    1969

    瀏覽量

    107144
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用PLC實(shí)現(xiàn)紅綠燈控制示例

    如圖為一個(gè)紅綠燈控制時(shí)序圖,啟動信號導(dǎo)通后,紅綠燈程序開始動作。
    的頭像 發(fā)表于 05-29 09:45 ?425次閱讀
    使用PLC實(shí)現(xiàn)<b class='flag-5'>紅綠燈</b><b class='flag-5'>控制</b>示例

    紅綠燈控制系統(tǒng)的LED城市路燈方案

    將LED路燈裝置與交通紅綠燈控制系統(tǒng)結(jié)合在一起,利用每一路段紅綠燈的轉(zhuǎn)換實(shí)現(xiàn)對下一路段燈光強(qiáng)弱的控制。將當(dāng)前市場上 LED 集燈板上的LED燈分為兩組,在滿足不同時(shí)段照明要求前
    發(fā)表于 10-17 14:44 ?4110次閱讀

    PLC實(shí)現(xiàn)交通紅綠燈控制方法及原理

    PLC實(shí)現(xiàn)交通紅綠燈控制電路熟悉PLC編程原理及方法。掌握定時(shí)器使用方法。
    發(fā)表于 03-19 15:15

    交通紅綠燈帶仿真和程序

    交通紅綠燈帶仿真和程序
    發(fā)表于 03-29 10:53

    交通紅綠燈

    本帖最后由 samuergao 于 2014-7-3 14:13 編輯 交通燈,并顯示當(dāng)前時(shí)間和倒計(jì)時(shí),包含了單條路遇到人行道的紅綠燈,還有十字路口的紅綠燈,大家?guī)涂纯从械母倪M(jìn)沒有。
    發(fā)表于 07-03 12:12

    基于單片機(jī)的交通紅綠燈控制系統(tǒng)的設(shè)計(jì)

    前一段時(shí)間,做了一個(gè)關(guān)于基于單片機(jī)的交通紅綠燈控制系統(tǒng)的設(shè)計(jì)
    發(fā)表于 11-10 06:34

    交通紅綠燈PLC控制系統(tǒng)編程方法與技巧

    本文介紹了交通紅綠燈基本控制形式,針對帶綠閃的紅綠燈和帶數(shù)顯的紅綠控制和實(shí)現(xiàn)方法,詳細(xì)論述了相應(yīng)的編程方法和技巧。實(shí)驗(yàn)證明編制的程序運(yùn)行可靠
    發(fā)表于 08-14 10:31 ?152次下載

    基于可編程控制交通紅綠燈模擬系統(tǒng)設(shè)計(jì)

    本文在綜合分析了8255A 及8253 芯片的特點(diǎn)之后,運(yùn)用二者的特性,進(jìn)行了交通紅綠燈模擬系統(tǒng)設(shè)計(jì),在詳細(xì)闡述了設(shè)計(jì)思想及電路設(shè)計(jì)方案之后,對該系統(tǒng)的有效性測試表明了該交通紅
    發(fā)表于 05-18 11:03 ?199次下載
    基于可編程<b class='flag-5'>控制</b>的<b class='flag-5'>交通紅綠燈</b>模擬系統(tǒng)設(shè)計(jì)

    基于自定義時(shí)鐘脈沖的交通紅綠燈控制設(shè)計(jì)

    以三菱FX2N型PLC作為控制核心元件,闡明交通紅綠燈控制設(shè)計(jì)思路和控制方案。以PLC定時(shí)器構(gòu)成的自定義時(shí)鐘脈沖程序段作為程序基本單元設(shè)計(jì)的交通紅
    發(fā)表于 06-19 11:42 ?6870次閱讀
    基于自定義時(shí)鐘脈沖的<b class='flag-5'>交通紅綠燈</b><b class='flag-5'>控制</b>設(shè)計(jì)

    EDA設(shè)計(jì)應(yīng)用之紅綠燈交通控制器設(shè)計(jì)

    紅綠燈交通控制器EDA設(shè)計(jì)
    發(fā)表于 01-22 16:28 ?52次下載

    將VR技術(shù)應(yīng)用于交通紅綠燈

    大家都知道,不管是行人還是汽車,在過路口的時(shí)候,一般都會有紅綠燈的存在,如果沒有紅綠燈的話,那整個(gè)交通都會混亂,交通事故絕對是層出不窮,而且堵車也會堵得水泄不通,所以
    發(fā)表于 12-22 09:38 ?4110次閱讀

    使用樹莓控制紅綠燈的源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用樹莓控制紅綠燈的源代碼免費(fèi)下載。
    發(fā)表于 10-28 17:11 ?10次下載
    使用<b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>控制</b><b class='flag-5'>紅綠燈</b>的源代碼免費(fèi)下載

    基于8255A和8253芯片實(shí)現(xiàn)交通紅綠燈模擬系統(tǒng)的應(yīng)用方案

    本文在綜合分析了8255A 及8253 芯片的特點(diǎn)之后,運(yùn)用二者的特性,進(jìn)行了交通紅綠燈模擬系統(tǒng)設(shè)計(jì),在詳細(xì)闡述了設(shè)計(jì)思想及電路設(shè)計(jì)方案之后,對該系統(tǒng)的有效性測試表明了該交通紅綠燈模擬系統(tǒng)具有較為
    的頭像 發(fā)表于 03-23 14:47 ?6175次閱讀

    中文編程鴻蒙Hi3861開發(fā)基礎(chǔ)案例之-03交通紅綠燈

    中文編程鴻蒙Hi3861開發(fā)模擬交通紅綠燈亮與滅控制
    的頭像 發(fā)表于 05-11 11:27 ?2649次閱讀
    中文編程鴻蒙Hi3861開發(fā)基礎(chǔ)案例之-03<b class='flag-5'>交通紅綠燈</b>

    樹莓控制交通紅綠燈(進(jìn)階版)

    哇奧,今天才發(fā)現(xiàn)上一次建造的紅綠燈居然不對,綠燈一般在下方,當(dāng)紅燈變綠燈時(shí)黃燈閃爍,我做的是綠燈變紅燈時(shí)黃燈閃爍!。這在我們開發(fā)時(shí)也會碰到,就像找bug一樣,對于發(fā)現(xiàn)的問題要及時(shí)修正。
    的頭像 發(fā)表于 07-02 15:10 ?2382次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>控制</b><b class='flag-5'>交通紅綠燈</b>(進(jìn)階版)
    主站蜘蛛池模板: 久久国产精品网 | 日产精品卡二卡三卡四卡无卡乱码 | 久久伊人精品青青草原高清 | 四虎影院最新网址 | 一级毛片视屏 | 在线播放色 | 欧美精品成人a多人在线观看 | 99久久精品免费看国产免费 | 国产色司机在线视频免费观看 | 欧美爽爽爽爽爽爽视频 | 亚洲天堂视频在线播放 | 四虎国产精品永久在线看 | 免费公开视频人人人人人人人 | 天天插夜夜 | 欧美freesex10一|3| 欧美又黄又嫩大片a级 | 欧美一区二区三区不卡免费观看 | 1024你懂的国产欧美日韩在 | 手机在线免费观看视频 | 视频一区 在线 | 天天操天天干天天透 | 性色成人网 | 草草操| 色多多黄色 | 性毛片 | 日本精品视频一视频高清 | 成人影院在线观看视频 | 波多野结衣在线免费视频 | 久久久久免费精品国产小说 | 202z国产高清日本在线播放 | 色综合天天综合 | 狠狠狠| 扛着高跟鞋丝袜腿呻吟视频 | 日本免费黄色小视频 | 老师喂我吃她的奶水脱她胸罩 | 黄网站色 | 黄色一级日本 | 国模私拍大尺度视频在线播放 | 久久第一页 | 成年人视频黄色 | 5x视频在线观看 |