Arduino 專題教學-魔幻多變的光變色龍

【DIY】魔幻多變的光變色龍

上次教學的「【實測】顏色感測器 TCS3200」,大家有沒有成功呢?這次小編應用它來製作一個可以感測顏色的裝飾燈。當感測到接近紅色的紙張時,壓克力燈就發出紅色的光。感測到接近藍色的紙張時就發出藍色的光,綠色以此類推。大家是不是覺得這樣感測到什麼顏色,就變成什麼顏色的行為很像變色龍呢?所以小編就隨手畫了一個呆呆的變色龍,讓牠擔當我們本次專案的主角!首先~

材料清單

使用工具

接線圖

6顆RGB LED是採用並聯的方式,在紅色、藍色與綠色接腳各接一個18Ω的電阻,並連接到可輸出PWM接腳的D9、D10、D11。本次專案擔當控制角色的是Arduino nano,您也可以使用UNO,小編會使用nano是因為它體積小能塞進盒子裡。

RGB LED
RGB LED
接線圖
接線圖

參考程式(2019/5/9更新):

//=====================================================

const int s0 = 3;

const int s1 = 4;

const int s2 = 5;

const int s3 = 6;

const int out = 2;

// LED pins connected to Arduino

int redLed = 9;

int blueLed = 10;

int greenLed = 11;

// Variables

int red = 0;

int green = 0;

int blue = 0;

void setup() {

Serial.begin(9600);

pinMode(s0, OUTPUT);

pinMode(s1, OUTPUT);

pinMode(s2, OUTPUT);

pinMode(s3, OUTPUT);

pinMode(out, INPUT);

pinMode(redLed, OUTPUT);

pinMode(greenLed, OUTPUT);

pinMode(blueLed, OUTPUT);

digitalWrite(s0, HIGH);

digitalWrite(s1, HIGH);

}

void loop() {

color();

Serial.print(“R Intensity:”);

Serial.print(red, DEC);

Serial.print(” G Intensity: “);

Serial.print(green, DEC);

Serial.print(” B Intensity : “);

Serial.print(blue, DEC);

if(red>25 && green>25 && blue>25) {

Serial.println(” – (Black Color)”);

digitalWrite(redLed,LOW);

digitalWrite(greenLed,LOW);

digitalWrite(blueLed,LOW);

}

else if(red<12 && green<12 && blue<12) {

Serial.println(” – (White Color)”);

for(int i=0;i<255;i++) {

analogWrite(redLed, i);

digitalWrite(greenLed, i);

digitalWrite(blueLed, i);

delay(5);

}

for(int i=255;i>0;i–) {

analogWrite(redLed, i);

digitalWrite(greenLed, i);

digitalWrite(blueLed, i);

delay(5);

}

}

else if (red < blue && red < green && red < 20) {

Serial.println(” – (Red Color)”);

for(int i=0;i<255;i++) {

analogWrite(redLed, i);

digitalWrite(greenLed, LOW);

digitalWrite(blueLed, LOW);

delay(5);

}

for(int i=255;i>0;i–) {

analogWrite(redLed, i);

digitalWrite(greenLed, LOW);

digitalWrite(blueLed, LOW);

delay(5);

}

}

else if (blue < red && blue < green) {

Serial.println(” – (Blue Color)”);

for(int i=0;i<255;i++) {

digitalWrite(redLed, LOW);

digitalWrite(greenLed, LOW);

analogWrite(blueLed, i);

delay(5);

}

for(int i=255;i>0;i–) {

digitalWrite(redLed, LOW);

digitalWrite(greenLed, LOW);

analogWrite(blueLed, i);

delay(5);

}

}

else if (green < red && green < blue) {

Serial.println(” – (Green Color)”);

for(int i=0;i<255;i++) {

digitalWrite(redLed, LOW);

analogWrite(greenLed, i);

digitalWrite(blueLed, LOW);

delay(5);

}

for(int i=255;i>0;i–) {

digitalWrite(redLed, LOW);

analogWrite(greenLed, i);

digitalWrite(blueLed, LOW);

delay(5);

}

}

}

void color()

{

digitalWrite(s2, LOW);

digitalWrite(s3, LOW);

//count OUT, pRed, RED

red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);

digitalWrite(s3, HIGH);

//count OUT, pBLUE, BLUE

blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);

digitalWrite(s2, HIGH);

//count OUT, pGreen, GREEN

green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);

}

//=====================================================

程式燒錄完成後,就測試看看燈有沒有依照感測的紙張顏色發亮,如果沒有可以檢查一下LED燈有沒有接錯喔。

接下來製作壓克力變色龍與木盒(控制與感測的底座),您可以依照自己的喜好製作或選擇其他材料製作底座,下圖是小編繪製的變色龍與底座。

光變色龍設計圖
光變色龍設計圖
底座設計圖
底座設計圖

小編的變色龍使用5mm厚的壓克力、底座使用3mm厚的木板,並用雷切機切割而成。組合好底座後,再用螺絲與螺帽固定顏色感測器,用熱熔槍固定nano,組裝後的側面外觀如下圖:

光變色龍組裝完成側面圖
光變色龍組裝完成側面圖

是不是很逗趣呢?希望大家也有用手邊的材料製作成功喔!