基于Arduino的自动变色小夜灯(颜色识别传感器、RGB模块)

1、概述

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

对于模块不了解的,可以先看一下我们的模块教程[传送门],了解掌握模块使用方法后,再尝试本小实验。因为综合实验一般涉及多个模块,我们仅对全部使用我司产品的客户做技术支持,若只是部分使用我司产品的,我们只对我司产品部分是否有故障进行排查。

2、所需材料

1、UNO主控板:官方板 或者 国产板
2、辅助配件:面包板杜邦线
3、传感器和模块:RGB LED模块颜色识别传感器

3、接线

RGB LED模块 Arduino
GND GND
R D3
G D5
B D6
颜色识别传感器 Arduino
GND GND
S0 D8
S1 D9
S2 D10
S3 D11
OUT D2
OE GND

4、示例程序

#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灯对应的显示不同颜色。

5、相关下载

库文件

0
分享到:

评论3

请先

  1. 请问库函数#include 从哪里可以下载?
    ahuang2018-03-26 19:45:15
  2. 教程页面最下方的链接里
    arron2018-04-03 10:00:56
  3. 您好,库文件里面没有arduino的文件,请问一下在哪里可以获取库文件呀
    aldcyyy2022-06-21 1:02:55
本站资料配套硬件销售店铺:天猫店ultirobot.tmall.com 、三冠淘宝店zhongbest.taobao.com
没有账号? 忘记密码?