
上次教學的「【實測】顏色感測器 TCS3200」,大家有沒有成功呢?這次小編應用它來製作一個可以感測顏色的裝飾燈。當感測到接近紅色的紙張時,壓克力燈就發出紅色的光。感測到接近藍色的紙張時就發出藍色的光,綠色以此類推。大家是不是覺得這樣感測到什麼顏色,就變成什麼顏色的行為很像變色龍呢?所以小編就隨手畫了一個呆呆的變色龍,讓牠擔當我們本次專案的主角!首先~
材料清單
使用工具
接線圖
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,組裝後的側面外觀如下圖:

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