欢迎光临
我们一直在努力

"变色龙"颜色识别小夜灯

20171201154907

==概述==

通过手上现有的模块,做一个颜色识别感应灯。当周围环境颜色改变,RGB灯同时跟随环境颜色改变灯的颜色。适用氛围灯、卧室小夜灯等

本次是以小实验的方式写的,对于模块不了解的,可以先看一下我们的模块教程,了解掌握模块使用方法后,再尝试本小实验。

(对于非本店模块不提供技术支持!如果无法做通,可能是不兼容导致,请自行尝试)。

所需物品:

主控板一块:点我购买

大面包板(建议连接多个灯使用):点我购买

颜色识别传感器:点我购买

杜邦线若干:点我购买

RGB灯(测试时为一个,按需购买):点我购买

灯罩一个:某宝买一个,几块钱。

==接线图==

LED color sensor

==接线方式==

20171202122855

20171202122933

20171202123013

==例子程序==

#include <Metro.h>  // 函数库
#include <math.h>
Metro ledlightup = Metro(60,true);
Metro processdata = Metro(50,true);
Metro TcsTrigger = Metro(10,true);
 
int s0=8,s1=9,s2=10,s3=11; // 颜色传感器端口定义
int out=2;
int flag=0;  //变量初始化
int counter=0;
int countR=0,countG=0,countB=0;
void setup()
{
   Serial.begin(115200);
   pinMode(s0,OUTPUT);
   pinMode(s1,OUTPUT);
   pinMode(s2,OUTPUT);
   pinMode(s3,OUTPUT);
 
   analogWrite(3,0);
   analogWrite(5,0);
   analogWrite(6,0);
 
}
 
void TCS()
{
   digitalWrite(s0,HIGH);
   digitalWrite(s1,HIGH);
   attachInterrupt(0, ISR_INTO, CHANGE);
 
}
 
void ISR_INTO()
{
   counter++;
}
 
int Raverage = 0;
int Baverage = 0;
int Gaverage = 0;
 
void loop()       //   函数调用
{
   TCS();
   if(TcsTrigger.check()){
     Tcstrigger();
   }
   if(processdata.check()){
     procedata();
   }  
   if(ledlightup.check()){
    ledup();
   }
 
}
void Tcstrigger()  //   数据采集
{
       flag++;
     if(flag==1){
       digitalWrite(s2,LOW);
       digitalWrite(s3,LOW);  
       countR=counter;    
       digitalWrite(s2,HIGH);
       digitalWrite(s3,HIGH);
     }    
     else if(flag==2){
       countG=counter;      
       digitalWrite(s2,LOW);
       digitalWrite(s3,HIGH); 
 
     }
     else if(flag==3){
       countB=counter;   
       digitalWrite(s2,LOW);
       digitalWrite(s3,LOW);  
       flag=0;
     }
     counter=0;
}
 
void  procedata()        // 数据处理
{
       static int Rinput[5] ={
       0,0,0,0,0                }
     ,Binput[5] ={
       0,0,0,0,0                }
     ,Ginput[5] ={
       0,0,0,0,0                };
 
     for(int i = 4;i > 0;i--){
       Rinput[i] = Rinput[i-1];
       Binput[i] = Binput[i-1];
       Ginput[i] = Ginput[i-1];
     }
  
     if(countR < 2500)
       Rinput[0] = countR;
     else
       Rinput[0] = Rinput[1];
 
     if(countB < 2500)
       Binput[0] = countB;
     else
       Binput[0] = Binput[1];
 
     if(countG < 2500)
       Ginput[0] = countG;
     else
       Ginput[0] = Ginput[1];   
 
     Raverage = 0;
     0
     Baverage = 0;
     Gaverage = 0;
 
     for(int i = 0;i <= 4;i++){
       Raverage += Rinput[i];
       Baverage += Binput[i];
       Gaverage += Ginput[i];
     }
     Raverage /= 5;
     Baverage /= 5;
     Gaverage /= 5;
       
}
 
void  ledup()     //数据输出
{
     int ledvalueR = Raverage;
     int ledvalueG = Gaverage;
     int ledvalueB = Baverage;
 
     ledvalueR = constrain(ledvalueR,350,1700);
     ledvalueB = constrain(ledvalueB,350,1500);
     ledvalueG = constrain(ledvalueG,350,1650);
      Serial.print("R:");
     Serial.print(Raverage,DEC);
     Serial.print(" ");
     Serial.print(ledvalueR,DEC);
     Serial.print("B:");
     Serial.print(Baverage,DEC);
     Serial.print(" ");
     Serial.print(ledvalueB,DEC);
     Serial.print("G:");
     Serial.print(Gaverage,DEC);
     Serial.print(" ");
     Serial.println(ledvalueG,DEC);
     
   
     ledvalueR = map(ledvalueR,350,1700,0,255);
     ledvalueB = map(ledvalueB,350,1500,0,255);
     ledvalueG = map(ledvalueG,350,1650,0,255);
 
     analogWrite(3,ledvalueR);   
     analogWrite(6,ledvalueB);
     analogWrite(5,ledvalueG);
  
}

==相关下载==

库文件下载:点我下载

==实验效果==

在颜色传感器前放置不同的颜色,RGB灯对应的显示不同颜色。

未经允许不得转载:Arduino-Maker » "变色龙"颜色识别小夜灯

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 2

评论前必须登录!

 

  1. #2

    请问库函数#include 从哪里可以下载?

    ahuang1年前 (2018-03-26)
  2. #1

    教程页面最下方的链接里

    ZBST技术&售后1年前 (2018-04-03)

线上商城

中贝斯特创客空间蘑菇云创客教育