這篇文章來(lái)源于DevicePlus.com英語(yǔ)網(wǎng)站的翻譯稿。
圣誕節(jié)將近,我們打算制作一個(gè)可愛(ài)的LED圣誕裝飾!通過(guò)使用全彩LED和WebIOPi,我們可以用無(wú)線控制的方式實(shí)現(xiàn)裝飾彩燈在紅色、藍(lán)色和綠色之間的切換。
關(guān)于全彩 LED
圖1:RGB全彩5mm LED
RGB全彩5mm LED包含三種基本顏色:紅色,綠色和藍(lán)色。通過(guò)三種顏色相混合可以得到全彩光源。您可以使用任何的透明RGB LED,從Sparkfun,Amazon等可以購(gòu)買(mǎi)到這些產(chǎn)品。
要控制三種顏色,需要使用4個(gè)引腳(3個(gè)控制顏色的引腳+GND)。LED的尺寸大于一般的單色LED尺寸。
圖2:摘自O(shè)STA5131A 數(shù)據(jù)表
LED的方向取決于引腳的長(zhǎng)度。最短的引腳為圖2中左側(cè)的①。光源的三基色分別分配到每個(gè)引腳上:①綠色; ②藍(lán)色以及 ④ 紅色。③是“共陰極組”,指一組擁有陰極公共端的電子元器件。在本項(xiàng)目中,它對(duì)應(yīng)的是LED的負(fù)極,需要將其連接到GND端。
圖3:將全彩LED連接到Raspberry Pi 2
該處的接線非常簡(jiǎn)單。這次,我們將綠色連接到引腳11(GPIO 17),藍(lán)色連接到引腳13(GPIO 27),紅色連接到引腳15(GPIO 22)。根據(jù)LED 引腳來(lái)使用三個(gè)對(duì)應(yīng)并列的引腳可以使接線更加清晰易懂。
現(xiàn)在,讓我們來(lái)點(diǎn)亮全彩LED!我嘗試從WebIOPi默認(rèn)屏幕上的“GPIO 標(biāo)頭”進(jìn)行操作。(如果您使用的是WebIOPi,可以通過(guò)將設(shè)置恢復(fù)到原始狀態(tài)來(lái)顯示W(wǎng)ebIOPi默認(rèn)屏幕。取消掉[SCRIPTS]中的myproject和[HTTP]中的doc-root注釋?zhuān)?/p>
如視頻中所示,光照強(qiáng)度很大,所以請(qǐng)注意不要直視它!如果您使用了LED漫射器(如橡膠帽等),就可以調(diào)低光線亮度。另外,全彩LED的光照強(qiáng)度存在個(gè)體差異,所以我們通過(guò)更改電阻值對(duì)光照強(qiáng)度進(jìn)行調(diào)整。
Raspberry Pi的GPIO引腳是數(shù)字輸出,所以輸出值為1或0(開(kāi)/關(guān))。一共有2種模式×3種顏色,除了關(guān)閉狀態(tài),可以展現(xiàn)出7種顏色,如圖4所示。
圖4:加成色
雖然可以表達(dá)出七種顏色,但如果僅僅是這樣,就太浪費(fèi)了。這種情況下,對(duì)WebIOPi編程就可以派上用場(chǎng)了。通過(guò)對(duì)WebIOPi進(jìn)行編程,您可以將燈光調(diào)整為自己喜歡的顏色。
關(guān)于 PWM
為了從WebIOPi控制全彩LED,需要使用脈沖寬度調(diào)制(PWM)的方法。
PWM – Arduino
脈寬調(diào)制(PWM)是一種通過(guò)數(shù)字處理方式獲取模擬信號(hào)的技術(shù)。數(shù)字控制用于創(chuàng)建方波信號(hào),即一種在開(kāi)和關(guān)兩種狀態(tài)之間切換的信號(hào)。這種開(kāi)關(guān)模式可以通過(guò)改變信號(hào)處于開(kāi)狀態(tài)所用時(shí)間與信號(hào)處于關(guān)狀態(tài)所用時(shí)間之間的比例來(lái)模擬開(kāi)(5V)至關(guān)(0V)之間的電壓?!伴_(kāi)通狀態(tài)”所持續(xù)時(shí)間被稱(chēng)為脈沖寬度。為了獲得變化的模擬值,您可以更改或調(diào)制脈沖寬度。例如,如果將LED以足夠快的頻率重復(fù)這種開(kāi)關(guān)模式,最終呈現(xiàn)出來(lái)的效果就會(huì)和輸出了0V到5V之間的用于控制LED亮度的穩(wěn)定電壓一樣。
在數(shù)字信號(hào)中,只有ON(開(kāi))和OFF(關(guān))這兩種類(lèi)型的信號(hào)。通過(guò)使用在一個(gè)周期內(nèi)接通(ON)時(shí)間和關(guān)閉(OFF)時(shí)間之間的比例(占空比),可以處理0 至100%之間的值。
圖5:占空比
上圖中有關(guān)占空比的內(nèi)容很容易理解。再次說(shuō)明,波形處于5V時(shí)是ON,處于0V時(shí)是OFF。該比例是通過(guò)計(jì)算一個(gè)周期內(nèi)的占比獲取的。
現(xiàn)在,我們來(lái)看一看WebIOPi中的一些便捷函數(shù)。
創(chuàng)建HTML文件
我們從HTML文件開(kāi)始。WebIOPi中內(nèi)置有用于PWM控制的滑塊部件。
Javascript 庫(kù)
// Only for Chrome and Safari, create a slider that pulse out a 0-100% duty cycle ratio on GPIO 8 button = webiopi().createRatioSlider(8); content.append(button);
該部件代碼內(nèi)含在示例中的51至53行。注釋文本中顯示“僅適用Chrome 和Safari”,但其實(shí)也適用Windows Internet Explorer、Opera以及Firefox等其他瀏覽器。
WebIOPi.createRatioSlider
WebIOPi.createRatioSlider (gpio, ratio)
Returns a slider that send its value as a PWM duty cycle ratio
(int) gpio: GPIO number from 0 to 53
(float) ratio: slider’s init value
要使用該函數(shù),只要在第一個(gè)參數(shù)中輸入GPIO編號(hào)就可以了!文檔中聲明了可以為第二個(gè)參數(shù)設(shè)定初始值,但是在當(dāng)前版本中似乎并沒(méi)有對(duì)該值作出響應(yīng)(如果有興趣的話,請(qǐng)參考webiopi.js中第504行)。
現(xiàn)在,我們來(lái)為全彩LED創(chuàng)建一個(gè)HTML文件吧!
/home/pi/webiopi_sample/html/index.html
input[] { display: block; width: 160px; height: 45px; }
red
green
blue
我們制作了三個(gè)滑動(dòng)條,這樣就可以設(shè)置RGB每個(gè)顏色的值了。使用createRatioSlider函數(shù)之后的HTML輸出如下所示:
該滑動(dòng)條可以以0.01的步距在0.0至1.0(0至100%)之間滑動(dòng)。
由于已經(jīng)分配了id,如果您想要設(shè)置初始值(如第21至23行所示),您可以使用jQuery對(duì)進(jìn)行設(shè)置。
$("#ratio17").val(0);
當(dāng)您在瀏覽器中對(duì)其進(jìn)行顯示時(shí),將會(huì)出現(xiàn)如下屏幕內(nèi)容:
圖 6
為了與LED鏈接,必須在Python端執(zhí)行初始設(shè)置。
創(chuàng)建 Python 文件
因?yàn)橹档脑O(shè)置是在HTML端完成的,所以Python端只需要對(duì)初始化及終止處理進(jìn)行描述就可以了。
/home/pi/webiopi_sample/python/script.py
import webiopi GPIO = webiopi.GPIO RED = 22 GREEN = 17 BLUE = 27 def setup(): # Set GPIO to PWM GPIO.setFunction(RED , GPIO.PWM) GPIO.setFunction(GREEN, GPIO.PWM) GPIO.setFunction(BLUE , GPIO.PWM) def destroy(): # Light off GPIO.pwmWrite(RED , 0) GPIO.pwmWrite(GREEN, 0) GPIO.pwmWrite(BLUE , 0)
由于本次使用了PWM,所以將第10到12行setFunction中的第二個(gè)參數(shù)指定為“GPIO.PWM”。如果指定為“GPIO.OUT”,脈沖信號(hào)將不會(huì)被識(shí)別,并且在您每次移動(dòng)滑動(dòng)條時(shí)它將會(huì)閃爍一秒鐘。
雖然已經(jīng)在程序末端寫(xiě)入了關(guān)閉LED的處理過(guò)程,但是還是需要使用“pwmWrite”函數(shù)。
PwmWrite (Channel, Value)
Write An Integer Value To The Given PWM Channel.
REST API: POST / Devices / Name / Pwm / Channel / Integer / Value
Name (Str): Device Name From Configuration File
Channel (Int): Analog Channel Number
value (int): integer value to output from 0 to pwmMaximum
在第一個(gè)參數(shù)中輸入指定的GPIO引腳編號(hào)以及您想要為第二個(gè)參數(shù)設(shè)定的值。如果該值被設(shè)置為0,那么狀態(tài)變?yōu)镺FF,LED將會(huì)熄滅。
讓我們來(lái)運(yùn)行它!
運(yùn)行指令
sudo /etc/init.d/webiopi start
我們嘗試通過(guò)移動(dòng)滑動(dòng)條來(lái)調(diào)整顯色的光強(qiáng),如上面視頻所示。當(dāng)調(diào)整紅色,綠色和藍(lán)色這些單色光時(shí),您可以以漸變的形式調(diào)整光強(qiáng)。另外,將這些單色光進(jìn)行重疊,就可以顯示出疊加效果的顏色。設(shè)置很小的值將會(huì)使光強(qiáng)過(guò)弱而導(dǎo)致不穩(wěn)定,所以需要設(shè)置一定程度的光強(qiáng)以保證穩(wěn)定性。
圖7
這非常方便,因?yàn)橹恍枰蜷_(kāi)電源就可以立即啟用Wi-Fi 和WebIOPi的自動(dòng)啟動(dòng)設(shè)置了。
圣誕裝飾!
圖8
安裝過(guò)程非常簡(jiǎn)單,只要將跳線直接插入LED 引腳即可,如上圖所示。有時(shí)候線會(huì)脫落,所以最好將線焊接進(jìn)去。
圖9
我將LED放進(jìn)了一個(gè)鐘形的裝飾品中,看起來(lái)很酷,不是嗎?
用Raspberry Pi的一個(gè)GPIO可以點(diǎn)亮兩個(gè)全彩LED。如果您想要連接許多個(gè),可以使用諸如移位寄存器之類(lèi)的部件來(lái)完成。
圣誕節(jié)就快到了!為什么不用這些可愛(ài)的led圣誕裝飾來(lái)增添假日氣氛呢?您也可以制造其他創(chuàng)意產(chǎn)品!比如將其放在透明的裝飾物中或者蠟燭中,或者使用大量LED制造出手工照明燈來(lái)作為您的圣誕節(jié)裝飾品!
DevicePlus 編輯團(tuán)隊(duì)
設(shè)備升級(jí)版適用于所有熱愛(ài)電子和機(jī)電一體化的人。
審核編輯黃宇
-
led
+關(guān)注
關(guān)注
242文章
23847瀏覽量
674155 -
Raspberry Pi
+關(guān)注
關(guān)注
2文章
620瀏覽量
23144
發(fā)布評(píng)論請(qǐng)先 登錄
視覺(jué)享受!用Raspberry Pi實(shí)現(xiàn)圣誕樹(shù)燈光秀

用Raspberry Pi實(shí)現(xiàn)圣誕樹(shù)燈光秀
Raspberry Pi 標(biāo)準(zhǔn)的40針連接器設(shè)計(jì)方案
利用RGB LED創(chuàng)造圣誕樹(shù)的智能裝飾品
如何使用Raspberry Pi 2將舊的RC汽車(chē)轉(zhuǎn)換為可在WiFi或Internet上工作
基于Arduino裝飾圣誕樹(shù)的教程

使用Raspberry Pi或Arduino:DIY LED矩陣彩燈

使用Raspberry Pi Pico的LED序列

通過(guò)Raspberry Pi進(jìn)行簡(jiǎn)單的物聯(lián)網(wǎng)LED控制

在Raspberry Pi上通過(guò)網(wǎng)絡(luò)控制LED

圣誕LED樹(shù)裝飾開(kāi)源分享

使用Raspberry Pi和Arduino實(shí)現(xiàn)Web控制的LED動(dòng)畫(huà)

Windows IoT和Raspberry Pi:讀取按鈕

用于室內(nèi)植物或圣誕樹(shù)的 Raspberry Pi Pico 水監(jiān)控器

LED圣誕燈電路圖 LED圣誕燈的工作原理和特點(diǎn)

評(píng)論