ก่อนหน้านี้เราคงได้รู้จักและทำความเข้าใจเกี่ยวกับ หลอดไฟ LED กันมาบ้างแล้ว คราวนี้เราลองมาทำกิจกรรมสนุกๆ กับหลอดไฟ RGB LED กันบ้าง

ก่อนอื่นมาทำความรู้จักกับหลอด LED RGB กันก่อนครับ

หลอด LED RGB ภายในหลอดจะมี LED ทั้งหมด 3 แม่สี คือ สีแดง สีเขียว และสีน้ำเงิน อยู่ภายใน และมีขาต่อใช้งานทั้งหมด 4 ขา ประกอบด้วยขา Common R G และ B ซึ่งขา Common จะเป็นขาที่รวมขา A หรือขา K ของหลอด LED แต่ละสีเข้าด้วยกัน หากเป็น Common A (CA) จะต้องต่อขา Common เข้าขั้วบวก และป้อนลอจิก 0 (LOW) ออกจากไมโคร จึงจะทำสีที่ต้องการติดสว่างขึ้นมา หากเป็น Common K (CC) จะต้องต่อขา Common ลงกราว์ด แล้วปล่อยลอจิก 0 เข้าไปควบคุม ก็จะทำให้แสงสีที่ต้องการติดสว่างขึ้นมาได้

ขอบคุณรูปภาพจากeenthusiast.com

การผสมสี

การที่จะทำให้หลอด LED RGB เปล่งแสงออกมาเป็นสีอะไร สามารถทำได้โดยการควบคุมความสว่างของแสงแต่ละสี แบบเดียวกับการผสมสีลงบนจานผสมสี หากให้สีของแต่ละสีติดเท่ากันหมด ก็จะทำให้ได้แสงสีขาวออกมา

การปรับความสว่างของหลอด LED ทำได้จากการปรับค่าดิวตี้ไซเคิลของความถี่ PWM โดยหากค่าดิวตี้ไซเคิลมีมาก ก็จะทำให้หลอด LED สว่างมากขึ้น และหากค่าดิวตี้ไซเคิลน้อยลงจนถึง 0 ก็จะทำให้หลอด LED ดับไปเลย

ขอบคุณรูปภาพจากwww.imagesco.com

ใน Arduino การสร้าง PWM สามารถทำได้จากการใช้คำสั่ง analogWrite() ในการสร้าง และปรับค่าดิวตี้ไซเคิล ในบอร์ด Arduino ที่ใช้ไอซีไมโครฯเบอร์ ATmega328P (Arduino Uno R3 , Arduino Nano, Arduino pro mini) จะสามารถปรับค่าดิวตี้ไซเคิลได้ความละเอียด 8 บิต คือปรับได้ตั้งแต่ 0 - 255 และจะใช้ PWM ได้เฉพาะขาที่รองรับขา PWM เท่านั้น (ขา 3, 5, 6, 9, 10 และ 11)

เริ่มกิจกรรมเขียนโปรแกรมควบคุมหลอดไฟ RGB LED ให้รับค่าจาก Processing กันเลยดีกว่า ก่อนอื่นมาดูก่อนต้องเตรียมอะไรกันบ้าง

สิ่งที่ต้องมี


1.Arduino Uno R3
2.สาย USB A to B
3.หลอดไฟ RGB LED
4.สาย jumper แบบผู้-ผู้
5.photo board
6.ตัวต้านทาน R220 โอห์ม

โปรแกรมที่ใช้

1.โปรแกรม Arduino IDE จาก arduino.cc หรือ arduino.org

2.โปรแกรม Processing IDE จาก processing.org

3. ภาพจานสี จากwww.fnordware.com/superpng/pnggrad16rgb.pnghttp://www.fnordware.com/superpng/pnggrad16rgb.png

มาเริ่มการต่อวงจรกัน

1.ทำการต่อวงจรดังในภาพ

2. เขียนโค้ดใส่ใน Arduino IDE แล้วทำการ verify และ upload ลงใน Arduino Microcontroller

ในบทความนี้จะสร้างไฟล์ชื่อไฟล์สำหรับ Arduino ว่า RGB_LED_Processing.ino

อัพโหลดโค้ดต่อไปนี้ลงบอร์ด Arduino

/***************************

created 2006

by smitec08

modified 3 Dec 2015

by Arkom Thaicharoen

email: arkom@thaiprogrammer.org

***************************/

// Output

int redPin = 3; // Red LED, connected to digital pin 3

int greenPin = 5; // Green LED, connected to digital pin 5

int bluePin = 6; // Blue LED, connected to digital pin 6

long int inByte;

int wait = 10; //10ms

void setup()

{

pinMode(redPin, OUTPUT); // sets the pins as output

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

Serial.begin(9600);

}

void outputColour(int red, int green, int blue) {

analogWrite(redPin, red);

analogWrite(bluePin, blue);

analogWrite(greenPin, green);

}

int* getColour() {

int* colour;

int i;

i = 0;

//for some reason it only works if we put a dud value between the C and

// the R value

while (i < 4)

{

if (Serial.available() > 0) {

colour[i] = Serial.read();

i++;

}

}

return colour;

}

// Main program

void loop()

{

if (Serial.available() > 0) {

// get incoming byte:

inByte = Serial.read();

if (inByte == 'C') {

int* one;

one = getColour();

//1 2 3 not 0 1 2 due to the dud value

outputColour(one[1], one[2], one[3]);

}

}

delay(wait);

}

3. เขียนโค้ดใส่ใน Processing IDE ในบทความนี้จะสร้างไฟล์ชื่อไฟล์สำหรับ Processing ว่า RGB_LED_Arduino.pde

/***************************

created 2006

by smitec08

modified 3 Dec 2015

by Arkom Thaicharoen

email: arkom@thaiprogrammer.org

***************************/

import processing.serial.*;

PImage img;

Serial myPort;

void setup() {

//set these to the size of the image

size(512,512); //ขนาดภาพ กว้างคูณยาว: side (X,Y)

//this is the name of your image file saved in the data folder in your

//processing folder see processing.org for help

img = loadImage("RGBR.png"); //http://www.fnordware.com/superpng/pnggrad16rgb.pnghttp://www.fnordware.com/superpng/pnggrad16rgb.png

//the [0] may be [another number] on your computer

myPort = new Serial(this, Serial.list()[2], 9600);

//ตรงจุดนี้ต้องลองดูว่า Serial.list()[ หมายเลขอะไรขึ้นอยู่กับพอร์ต

//ที่ได้รับจากเครื่องคอมฯ ต้องลองไปเรื่อยๆตั้งแต่ 0,1,2...

}

void draw() {

background(0);

image(img,0,0);

img.loadPixels();

}

void mousePressed()

{

myPort.write("CL");

myPort.write(int(red(img.pixels[mouseX+mouseY*img.width])));

myPort.write(int(green(img.pixels[mouseX+mouseY*img.width])));

myPort.write(int(blue(img.pixels[mouseX+mouseY*img.width])));

}

4.download จาก http://www.fnordware.com/superpng/pnggrad16rgb.pnghttp://www.fnordware.com/superpng/pn

ggrad16rgb.pngแล้วใส่ภาพลงใน folder source code ของ Processing ทำการเปลี่ยนชื่อให้เป็น RGBR.png

ภาพไฟล์ pnggrad16rgb.png

ใส่ภาพไฟล์ pnggrad16rgb.png

ลงใน folder แล้วเปลี่ยนชื่อเป็น RGBR.png

ทดลองโปรแกรม


มาดูสิ่งที่เกิดขึ้น

>> หลอดไฟจะเปลี่ยนสีตามที่เราคลิก


อาคม ไทยเจริญ
https://www.facebook.com/arkomt