創客萊吧MakerLab

高雄市左營區博愛二路202號B1F        

0989-250-580

光變色龍

Updated: May 9, 2019



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


材料清單:

Arduino nano

TCS3200顏色傳感器模組

6顆 5mm RGB LED 4pin 共陰

11條 杜邦線(母/母)

3顆 1/4W 18Ω 電阻DIP

4顆 十字圓頭螺絲 M3x10mm

4顆 五彩六角螺帽M3


使用工具:

電烙鐵

焊錫

十字起子

剝線鉗

熱熔槍

熱熔膠條


接線圖:

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




參考程式(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,組裝後的側面外觀如下圖:





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