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

DLP4710EVM-LC斷開RGB LED中的一路(或兩路)供電線后,整個評估模塊就無法工作怎么解決?
SM16703TH三通道LED驅(qū)動芯片 RGB端口默認輸出電流 8mA

海信116英寸RGB-Mini LED:一朵綻放在科技穹頂?shù)闹袊ɑ?/a>

寵物屋體驗控制電機、RGB全彩LED燈與溫濕度傳感器

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

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

ESP-12 ESP8266如何通過I2C將SSID和RSSI信息發(fā)送到RPi / Arduino?
三星預(yù)計硅基LED將進化為單片RGB面板,用于XR設(shè)備
TIDA-00980-具有 IO-li<x>nk 接口的 RGB LED 信號塔 PCB layout設(shè)計

評論