概述
在本課程中,您將學習如何在Arduino上使用RGB(紅綠藍)LED。
乍一看,RGB(紅色,綠色,藍色)LED看起來就像普通的LED,但是,在通常的LED封裝中,實際上有三個LED,一個紅色,一綠色,是,一藍色。通過控制每個LED的亮度,您可以混合幾乎任何您想要的顏色。
我們可以混合顏色,就像您將音頻與“混合板”或調色板上的顏料混合一樣-通過調整三個LED各自的亮度。做到這一點的困難方法是使用第2課中使用的不同值的電阻器(或可變電阻器)。這是很多工作!對我們來說幸運的是,Arduino具有 analogWrite 函數,您可以將其與標有?的引腳一起使用,以向相應的LED輸出可變數量的功率。
零件
要構建本課中描述的項目,您將需要以下零件。
零件 數量
擴散RGB LED 10mm 1
270Ω電阻器(紅色,紫色,棕色條紋)-可以使用的最大電阻為1K歐姆。小調光器
3
半尺寸面包板 1
Arduino Uno R3 1
跳線包 1
面包板布局
RGB LED有四根引線。封裝中每個LED的正極連接都有一根引線,而LED的所有三個負極側都有一根引線。
LED封裝的公共負極連接是LED封裝扁平側的第二個引腳。它也是四個線索中最長的。該引線將接地。
封裝內的每個LED都需要自己的270Ω電阻,以防止過多的電流流過。 LED的三個正極(一個紅色,一個綠色和一個藍色)使用這些電阻器連接到Arduino輸出引腳。
如果您使用的是普通的ANODE LED而不是普通的CATHODE,請將長引腳連接到+5而不是接地端
顏色
您可以通過改變紅色,綠色和藍色的光量來混合任意顏色,這是因為您的眼睛具有三種類型的光接收器(紅色,綠色和藍色)。您的眼睛和大腦會處理紅色,綠色和藍色的數量,并將其轉換為光譜的顏色。
在某種程度上,通過使用三個LED,我們在眼睛上發揮了作用。電視機中使用了相同的想法,其中LCD的紅色,綠色和藍色點彼此相鄰,構成每個像素。
如果我們將所有三個LED的亮度設置為相同,則該燈的整體顏色將為白色。如果關閉藍色LED,以便僅紅色和綠色LED具有相同的亮度,則該光將顯示為黃色。
我們可以分別控制LED的紅色,綠色和藍色部分的亮度,從而可以混合我們喜歡的任何顏色。
黑色并不是缺少光,而是一種顏色。因此,最能使我們的LED變成黑色的是關閉所有三種顏色。
Arduino草圖
以下測試草圖將循環顯示紅色,綠色,藍色,黃色,紫色和淺綠色。這些顏色是一些標準的Internet顏色。
下載:文件
復制代碼
/*
Adafruit Arduino - Lesson 3. RGB LED
*/
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
//uncomment this line if using a Common Anode LED
//#define COMMON_ANODE
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop()
{
setColor(255, 0, 0); // red
delay(1000);
setColor(0, 255, 0); // green
delay(1000);
setColor(0, 0, 255); // blue
delay(1000);
setColor(255, 255, 0); // yellow
delay(1000);
setColor(80, 0, 80); // purple
delay(1000);
setColor(0, 255, 255); // aqua
delay(1000);
}
void setColor(int red, int green, int blue)
{
#ifdef COMMON_ANODE
red = 255 - red;
green = 255 - green;
blue = 255 - blue;
#endif
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
} /*
Adafruit Arduino - Lesson 3. RGB LED
*/
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
//uncomment this line if using a Common Anode LED
//#define COMMON_ANODE
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop()
{
setColor(255, 0, 0); // red
delay(1000);
setColor(0, 255, 0); // green
delay(1000);
setColor(0, 0, 255); // blue
delay(1000);
setColor(255, 255, 0); // yellow
delay(1000);
setColor(80, 0, 80); // purple
delay(1000);
setColor(0, 255, 255); // aqua
delay(1000);
}
void setColor(int red, int green, int blue)
{
#ifdef COMMON_ANODE
red = 255 - red;
green = 255 - green;
blue = 255 - blue;
#endif
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
嘗試一下草圖,然后我們將對其進行詳細剖析……。
草圖通過指定每種顏色將使用哪些引腳:
下載:file
復制代碼
int redPin = 11;
int greenPin = 10;
int bluePin = 9; int redPin = 11;
int greenPin = 10;
int bluePin = 9;
下一步是編寫“設置”功能。正如我們在前面的課程中所了解的那樣,設置功能在Arduino重置后僅運行一次。在這種情況下,它要做的就是定義我們用作輸出的三個引腳。
下載:文件
復制代碼
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
} void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
在我們看一下“循環”功能之前,先看一下其中的最后一個功能。草圖。
下載:文件
復制代碼
void setColor(int red, int green, int blue)
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
} void setColor(int red, int green, int blue)
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
此函數使用三個參數,一個用于紅色,綠色和藍色LED的亮度。在每種情況下,該數字都將在0到255之間,其中0表示關閉,而255表示最大亮度。然后該函數調用‘analogWrite’來設置每個LED的亮度。
如果您查看‘loop’函數,您會看到我們正在設置紅色,綠色和藍色的光量我們要顯示的內容,然后暫停一秒鐘,然后再繼續使用下一種顏色。
下載:文件
復制代碼
void loop()
{
setColor(255, 0, 0); // red
delay(1000);
setColor(0, 255, 0); // green
delay(1000);
setColor(0, 0, 255); // blue
delay(1000);
setColor(255, 255, 0);// yellow
delay(1000);
setColor(80, 0, 80); // purple
delay(1000);
setColor(0, 255, 255);// aqua
delay(1000);
} void loop()
{
setColor(255, 0, 0); // red
delay(1000);
setColor(0, 255, 0); // green
delay(1000);
setColor(0, 0, 255); // blue
delay(1000);
setColor(255, 255, 0);// yellow
delay(1000);
setColor(80, 0, 80); // purple
delay(1000);
setColor(0, 255, 255);// aqua
delay(1000);
}
嘗試向草圖添加自己的幾種顏色,并觀察LED上的效果。
如果使用的是公共陽極RGB LED,則需要更改模擬寫入值,以便從255中減去顏色,在草圖中取消注釋#define COMMON_ANODE行!
使用Internet顏色
如果您已完成任何Internet編程,則可能會意識到顏色通常表示為“十六進制”數字。例如,紅色的數字為#FF0000。您可以使用以下表格找到與特定顏色關聯的數字:https://htmlcolorcodes.com/color-names/
該數字的六個數字實際上是三對數字。第一對是顏色的紅色部分,后兩位是綠色部分,最后兩位是藍色部分。紅色為#FF0000,因為它的最大紅色(FF為十六進制255)并且沒有綠色或藍色部分。
能夠撥出這些顏色編號之一以使其顯示在屏幕上將非常有用。 RGB LED。
讓我們嘗試制作靛藍色(#4B0082)。
i》
靛藍的紅色,綠色和藍色部分(以十六進制表示)分別為4B,00和82。我們可以將它們插入“ setColor”函數中,如下所示:
下載:文件
復制代碼
setColor(0x4B, 0x0, 0x82); // indigo setColor(0x4B, 0x0, 0x82); // indigo
我們在顏色的三個部分使用十六進制數字,方法是在顏色的三個部分前面加上“ 0x”。
嘗試將自己的幾種顏色添加到“循環”功能中。不要忘了在每個延遲之后添加延遲。
理論(PWM)
脈沖寬度調制(PWM)是一種控制功率的技術。我們還在這里使用它來控制每個LED的亮度。
下圖顯示了Arduino上PWM引腳之一的信號。
大約每1/500秒,PWM輸出將產生一個脈沖。該脈沖的長度由“ analogWrite”功能控制。因此,“ analogWrite(0)”將根本不會產生任何脈沖,而“ analogWrite(255)”將產生一直持續到下一個脈沖到期的脈沖,因此輸出實際上一直都在。 》如果我們在AnalogWrite中指定一個介于0到255之間的值,那么我們將產生一個脈沖。如果輸出脈沖僅在5%的時間內為高電平,那么無論我們驅動什么,都將僅獲得5%的全功率。
但是,如果在90%的時間內輸出為5V,則負載將獲得90%的電力。我們看不到LED會以這種速度打開和關閉,所以對我們來說,亮度似乎在變化。
其他要做的事情
嘗試將乒乓球放在LED上
嘗試更改延遲以加快速度或減慢顏色變化的速度
使用RGB LED可以做很多事情。檢出Internet上使用RGB LED的一些項目,您會發現視覺設備的多色持久性以及各種照明效果。
責任編輯:wv
-
led
+關注
關注
242文章
23300瀏覽量
661457 -
Arduino
+關注
關注
188文章
6471瀏覽量
187293
發布評論請先 登錄
相關推薦
評論