步驟1:簡(jiǎn)介-RGB LED
在開(kāi)始之前,請(qǐng)先快速了解一下電路以及LED的行為。當(dāng)購(gòu)買(mǎi)LED時(shí),包裝背面應(yīng)顯示大量文字,顯示技術(shù)規(guī)格。如果您似乎找不到任何規(guī)格,請(qǐng)嘗試在零件的序列號(hào)上運(yùn)行Google搜索。我們關(guān)注正向電壓(VF,以伏為單位)和正向電流(IF,以毫安為單位)。對(duì)于這些變量中的每一個(gè),典型的LED(燃燒一種顏色)將具有一個(gè)值。但是,您可能會(huì)注意到,不同顏色的LED具有不同的值。特別是紅色似乎降低了最低的正向電壓,而藍(lán)色則降低了最高的正向電壓。同樣,三種顏色的RGB LED很可能具有不同的值。購(gòu)買(mǎi)材料時(shí),您需要牢記這些值,以便能夠選擇合適的電阻器-不用擔(dān)心,我們會(huì)到達(dá)那里!
您會(huì)還請(qǐng)注意,RGB LED有四根引線(xiàn),而不是兩根。如前所述,RGB LED實(shí)際上是一個(gè)很小的電路,由三個(gè)不同的LED組成。現(xiàn)在,在這里事情可能會(huì)變得有些棘手。 RGB LED有兩種類(lèi)型:共陽(yáng)極和共陰極。在共陽(yáng)極類(lèi)型上,最長(zhǎng)的導(dǎo)線(xiàn)連接到正極端子,并允許電流流向內(nèi)部的所有三個(gè)LED,而導(dǎo)線(xiàn)1、3和4分別是紅色,綠色和藍(lán)色的接地導(dǎo)線(xiàn)。另一方面,普通陰極類(lèi)型共用接地線(xiàn)。三個(gè)較短的導(dǎo)線(xiàn)分別以相同的順序分別連接到正極端子。那么,您應(yīng)該使用哪個(gè)呢?作為一個(gè)初學(xué)者,我會(huì)堅(jiān)持使用普通陰極類(lèi)型。普通陰極將使您更好地了解Raspberry如何處理輸出以及電路如何工作,并且盡管普通陽(yáng)極類(lèi)型仍可在電流吸收的情況下工作,但它要先進(jìn)一些。
步驟2:材料
Raspberry Pi,我將使用2型B
無(wú)焊料面包板(好吃!)(這是我使用的那個(gè))
一個(gè)RGB LED
3個(gè)電阻
跳線(xiàn)
電阻很重要,因?yàn)樗鼈円矔?huì)阻止LED發(fā)送通過(guò)您的Pi的電流很大,如果有機(jī)會(huì)他們會(huì)做的。這可能會(huì)導(dǎo)致您燒毀LED,油炸GPIO引腳和/或破壞Pi。將輸出連接到Pi時(shí),即使它們是低電平,也要始終使用電阻。通常,這些LED各自可以處理高達(dá)30mA的電流,但我們將其保持在17mA以下。我們?yōu)槭裁床荒茏叩媚敲锤撸?Pi只能向GPIO引腳提供這么多的電流,并且再次消耗過(guò)多電流會(huì)造成嚴(yán)重?fù)p壞。那么我們能走多高呢?答案不是超級(jí)簡(jiǎn)單,但是可以推斷出來(lái)。根據(jù)eLinux,GPIO引腳連接到3.3v電源軌,該電源能夠一次提供最大50mA的電流。但是,這并不意味著該電源軌具有將其限制為50mA的調(diào)節(jié)器。如果允許這樣做,連接到該電源軌的電路將繼續(xù)汲取超過(guò)50mA的電流,直到發(fā)生短路。將所有三個(gè)引腳保持在至少17mA以下將確保我們的Pi受到足夠的保護(hù),即使所有三種顏色都在一次燃燒。
您購(gòu)買(mǎi)的電阻將取決于您的單個(gè)LED。您將需要三個(gè)電阻,每種顏色一個(gè)。要計(jì)算電阻,請(qǐng)轉(zhuǎn)到LEDCalculator.net。該網(wǎng)站使用歐姆定律,因此您不必這樣做。只需輸入提供的電壓(3.3v),壓降(單個(gè)顏色的正向電壓),額定電流(保持在16mA或以下)和LED的數(shù)量(在這種情況下,將每種顏色視為單個(gè)LED) )。對(duì)每種顏色執(zhí)行此操作,適當(dāng)更改電壓降。現(xiàn)在,您已經(jīng)有了電阻的值!在1/4瓦特大小中各取一個(gè)(在這種情況下,瓦特?cái)?shù)衡量電阻器在故障之前將吸收的熱量)。現(xiàn)在我們有了所需的一切。讓我們開(kāi)始吧!
第3步:面包板設(shè)置
從技術(shù)上講,無(wú)焊面包板不是必需的,但它可以使事情變得簡(jiǎn)單更快,更容易。但是,如果您確實(shí)選擇焊接,那么我將假設(shè)您至少具有一些電路的基本知識(shí),并且以下圖表將足以幫助您入門(mén)。
無(wú)焊料面包板是用于原型制作,因?yàn)樗鼓梢暂p松地在電路中移動(dòng)組件,而無(wú)需焊接和拆焊。相信我,即使是一個(gè)簡(jiǎn)單的項(xiàng)目,無(wú)焊板也可以節(jié)省數(shù)小時(shí)的時(shí)間。在無(wú)焊板上,稱(chēng)為總線(xiàn)的正極和負(fù)極列都可以連接到電源的正極和負(fù)極端子。使用跳線(xiàn),我們可以連接到這些總線(xiàn)以形成電路。兩組總線(xiàn)之間的列(標(biāo)記為A-E和F-J)通過(guò)行連接,但這些連接不與中間分隔線(xiàn)交叉。例如,第1行的A-E列構(gòu)成一條軌道,第1行的F-J列構(gòu)成另一條軌道,第2行的A-E列構(gòu)成另一條軌道。現(xiàn)在我們了解了這一點(diǎn),讓我們來(lái)談?wù)勲娐贰?duì)于此電路,我們需要將公共陰極連接到接地引腳,并將三個(gè)陽(yáng)極中的每個(gè)陽(yáng)極通過(guò)一個(gè)電阻器連接到不同的可編程引腳。在這種情況下,我們將使用編號(hào)為9、11、13和15的GPIO引腳(Pi的GPIO引腳有兩種不同的命名約定-這是使用“板”約定)。引腳號(hào)9是接地,因此我們將其陰極連接至該引腳,然后將紅色,綠色和藍(lán)色連接至引腳11、13和15。
一旦完成所有設(shè)置,便可以繼續(xù)測(cè)試我們的電路-我們不希望出現(xiàn)故障電路,使我們認(rèn)為我們的代碼是錯(cuò)誤的。為此,請(qǐng)斷開(kāi)您的Pi的電路(接地連接除外),然后打開(kāi)Pi。操作系統(tǒng)啟動(dòng)后,首先從面包板上取下紅色導(dǎo)線(xiàn)并將其連接到引腳號(hào)1。此引腳不可編程,并且始終設(shè)置為3.3v,因此,當(dāng)連接紅色導(dǎo)線(xiàn)時(shí),紅色LED應(yīng)亮起。對(duì)所有三種顏色都執(zhí)行此操作。
步驟4:編寫(xiě)程序
在進(jìn)入程序之前,請(qǐng)務(wù)必注意縮進(jìn)在Python語(yǔ)言。其他語(yǔ)言使用括號(hào)等標(biāo)點(diǎn)符號(hào)來(lái)告訴程序運(yùn)行程序的順序。 Python使用縮進(jìn)。因此,您可能無(wú)法簡(jiǎn)單地將代碼從此頁(yè)復(fù)制并粘貼到程序中,因?yàn)榭赡軣o(wú)法完全保留格式。請(qǐng)隨時(shí)隨便繼續(xù)編寫(xiě)自己的代碼,或者在此處下載我的示例代碼。
如果您是編碼新手,那么請(qǐng)務(wù)必指出,沒(méi)有一種方法可以編寫(xiě)程序。人們有自己的風(fēng)格,但這主要取決于您如何解決問(wèn)題。我將提供示例代碼并逐行進(jìn)行說(shuō)明,但是請(qǐng)注意,這不是獲得完全相同結(jié)果的唯一方法。
import sys, time
在這里,我們導(dǎo)入兩個(gè)庫(kù)中-已經(jīng)定義并且可以調(diào)用的函數(shù),變量等。
import RPi.GPIO as GPIO
這是一個(gè)Raspbian庫(kù),允許我們使用Python控制GPIO引腳。/p》 redPin = 11
greenPin = 13
bluePin = 15
現(xiàn)在,我們定義一些變量-我們將哪些引腳連接到RGB引線(xiàn)。此步驟不是必需的,但是如果需要,它可以更輕松地更改引腳。
def blink(pin):
在這里,我們定義了一個(gè)功能。功能是計(jì)算機(jī)按照我們賦予它的順序執(zhí)行的一組步驟。此特定功能需要一個(gè)變量才能運(yùn)行:我們要點(diǎn)亮的引腳號(hào)。
GPIO.setmode(GPIO.BOARD)
我們通過(guò)引用我們的庫(kù)之一GPIO開(kāi)始我們的功能。然后,我們告訴我們要為GPIO引腳(其中有兩個(gè))選擇一個(gè)命名約定,以便程序知道我們要指的是哪一個(gè)。然后,我們告訴它再次使用GPIO庫(kù)使用“ board”約定(而不是BMC約定)。
GPIO.setup(pin, GPIO.OUT)
現(xiàn)在,再次使用GPIO庫(kù),我們告訴我們要使用的Pi引腳。但是首先,我們需要指定輸入或輸出引腳以及使用方式。在這里,“ pin”是將插入眨眼(pin)的變量。
GPIO.output(pin, GPIO.HIGH)
現(xiàn)在已經(jīng)設(shè)置了該引腳,此行將其打開(kāi)。您應(yīng)該現(xiàn)在就識(shí)別語(yǔ)法;在這里,我們使用相同的變量“ pin”,并使用GPIO庫(kù)將引腳設(shè)置為“ high”值。對(duì)于GPIO引腳,“高”值導(dǎo)致通過(guò)3.3v或“ on”,而“低”值導(dǎo)致通過(guò)0v或“ off”。
現(xiàn)在我們將定義一個(gè)關(guān)閉燈的功能。它看起來(lái)與以前的功能幾乎相同,只是我們將引腳設(shè)置回低電平。
def turnOff(pin):
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW)
我們需要使用剛剛創(chuàng)建的功能定義一些特定于顏色的功能。回想一下,我們將針腳11、13和15用于紅色,綠色和藍(lán)色。我們將從打開(kāi)燈的功能開(kāi)始。使用這種類(lèi)型的功能,我們不需要任何參數(shù),因此方括號(hào)為空;
def redOn():
blink(redPin)
在這里,我們?yōu)椤?blink”函數(shù)提供一個(gè)引腳號(hào)以供使用。11。當(dāng)我們調(diào)用redOn()時(shí),閃爍函數(shù)將以“ pin”替換為“ redPin”開(kāi)始執(zhí)行。回想一下,我們之前將redPin設(shè)置為11。
現(xiàn)在,我們對(duì)其余的顏色也做同樣的事情。
def greenOn():
blink(greenPin)
def blueOn():
blink(bluePin)
記住,在處理光時(shí),黃色是通過(guò)將紅色與綠色混合而成,青色是通過(guò)綠色與藍(lán)色混合而成,品紅色與紅色和藍(lán)色混合而成,而白色則是通過(guò)將所有這三種結(jié)合在一起而制成的。關(guān)閉。再次,語(yǔ)法將類(lèi)似于上面的函數(shù)。
def yellowOn():
blink(redPin)
blink(greenPin)
def cyanOn():
blink(greenPin)
blink(bluePin)
def magentaOn():
blink(redPin)
blink(bluePin)
def whiteOn():
blink(redPin)
blink(greenPin)
blink(bluePin)
現(xiàn)在,我們準(zhǔn)備定義我們的主要功能;一個(gè)不斷詢(xún)問(wèn)用戶(hù)輸入并通過(guò)調(diào)用各種函數(shù)做出反應(yīng)的循環(huán)。在這種情況下,用戶(hù)將能夠打開(kāi)和關(guān)閉顏色。編寫(xiě)該程序的目的是僅接受一些預(yù)先指定的輸入。否則,它將不執(zhí)行任何操作并顯示相應(yīng)的信息。
同樣,我們不要求使用此函數(shù)提供任何變量,因此括號(hào)保持空白。 “ while True”本質(zhì)上表示“程序正在運(yùn)行時(shí),請(qǐng)執(zhí)行此操作”,因此它將一直運(yùn)行,直到退出為止。
def redOff():
turnOff(redPin)
def greenOff():
turnOff(greenPin)
def blueOff():
turnOff(bluePin)
def yellowOff():
turnOff(redPin)
turnOff(greenPin)
def cyanOff():
turnOff(greenPin)
turnOff(bluePin)
def magentaOff():
turnOff(redPin)
turnOff(bluePin)
def whiteOff():
turnOff(redPin)
turnOff(greenPin)
turnOff(bluePin)
我們定義了一個(gè)新變量“ cmd”,以便以后使用將其設(shè)置為等于用戶(hù)的輸入。
現(xiàn)在,僅當(dāng)用戶(hù)輸入的內(nèi)容與引號(hào)內(nèi)的文本完全匹配時(shí),“ if”語(yǔ)句才會(huì)運(yùn)行。請(qǐng)注意,這里我們使用兩個(gè)“等于”符號(hào)。在Python和實(shí)際上大多數(shù)語(yǔ)言中,使用單個(gè)“等于”來(lái)更改變量的值,而使用雙精度來(lái)比較變量值是否彼此匹配。
def main():
while True:
cmd = raw_input(“Choose an option:”)
“ elif”代表“ else,如果”。這將附加到較早的“ if”語(yǔ)句并添加新參數(shù),從而使我們可以輕松地創(chuàng)建“ else,if”語(yǔ)句鏈。
if cmd == “red on”:
redOn()
使用我們的最后一個(gè)“ else”語(yǔ)句,if如果用戶(hù)嘗試輸入除上述指定命令之一以外的任何其他命令,它將告訴用戶(hù)這是無(wú)效命令。函數(shù)需要的最后一件事是“返回”,因此程序知道何時(shí)循環(huán)。
elif cmd == “red off”:
redOff()
elif cmd == “green on”:
greenOn()
elif cmd == “green off”
greenOff()
elif cmd == “blue on”:
blueOn()
elif cmd == “blue off”:
blueOff()
elif cmd == “yellow on”:
yellowOn()
elif cmd == “yellow off”:
yellowOff()
elif cmd == “cyan on”:
cyanOn()
elif cmd == “cyan off”:
cyanOff()
elif cmd == “magenta on”:
magentaOn()
elif cmd == “magenta off”:
magentaOff()
elif cmd == “white on”:
whiteOn()
elif cmd == “white off”:
whiteOff()
else:
print(“Not a valid command.”)
return
這是我們代碼的最后一行。運(yùn)行程序時(shí),此行將調(diào)用我們剛剛定義的主要函數(shù),并將設(shè)置循環(huán)。
步驟5:運(yùn)行程序
就是這樣!現(xiàn)在該運(yùn)行程序了。導(dǎo)航至頂部菜單欄,然后選擇運(yùn)行-》運(yùn)行模塊,或按F5。在IDLE運(yùn)行程序之前,系統(tǒng)會(huì)要求您保存所做的工作。繼續(xù),在提示后鍵入“ red on”,然后按Enter。紅燈應(yīng)亮起!
請(qǐng)注意,退出程序之前,至少應(yīng)確保已關(guān)閉所有顏色。但是,我建議您在退出之前運(yùn)行GPIO.cleanup()函數(shù)。這是RPi.GPIO庫(kù)隨附的內(nèi)置函數(shù),可重置程序中使用的所有引腳。您可以修改此代碼以包含運(yùn)行GPIO.cleanup()的命令,也可以按CTRL + C中斷程序,然后直接在用戶(hù)輸入中鍵入GPIO.cleanup()。
-
led
+關(guān)注
關(guān)注
242文章
23826瀏覽量
673631 -
RGB
+關(guān)注
關(guān)注
4文章
807瀏覽量
59891 -
樹(shù)莓派
+關(guān)注
關(guān)注
121文章
1997瀏覽量
107395
發(fā)布評(píng)論請(qǐng)先 登錄
伍爾特電子全新推出WL-SFTW耐高溫RGB LED產(chǎn)品
Texas Instruments LP5817 3通道RGB LED驅(qū)動(dòng)器數(shù)據(jù)手冊(cè)

FZH12 12通道LED驅(qū)動(dòng)控制芯片中文手冊(cè)
IMX93 evk卡上是否有跳線(xiàn)或開(kāi)關(guān)可供設(shè)置,以便為RPI-CAM mipi供電?
Melexis推出MLX80142雙RGB LED驅(qū)動(dòng)芯片
請(qǐng)問(wèn)DLP4710 EVM-LC中的RGB三個(gè)LED的參數(shù)是多少?
DLPC7540EVM是怎么控制RGB驅(qū)動(dòng)板調(diào)整電流幅值、頻率周期和占空比的?
海信全球首款RGB-MiniLED電視國(guó)內(nèi)首次亮相

DLP4710EVM-LC斷開(kāi)RGB LED中的一路(或兩路)供電線(xiàn)后,整個(gè)評(píng)估模塊就無(wú)法工作怎么解決?
SM16703TH三通道LED驅(qū)動(dòng)芯片 RGB端口默認(rèn)輸出電流 8mA

寵物屋體驗(yàn)控制電機(jī)、RGB全彩LED燈與溫濕度傳感器

UART軟件控制的RGB LED混色與MSP430? MCU

如何選擇RGB LED驅(qū)動(dòng)器

基于LP50xx器件的全彩RGB LED矩陣系統(tǒng)設(shè)計(jì)指南

評(píng)論