颜色传感器原理以及应用讲解
颜色传感器的工作原理基于物体反射光线的颜色差异。当物体被照射光源时,其表面会反射出一定比例的光线,这些光线的波长和强度与物体本身的颜色有关。颜色传感器利用这些特性,通过光敏元件和信号处理器将光信号转换为电信号,并进行分析和识别。
颜色传感器通常由光源、滤光片、光敏元件、信号处理器等组成。光源照射在物体上,物体反射出来的光经过滤光片后进入光敏元件中,产生相应的电信号。这些电信号经过放大、滤波、数字化等处理后,可以得到物体的颜色信息。
参数表
颜色传感器采用的是内置APDS9960传感器,是一款集成ALS、红外LED和接近检测器的光学模块和环境亮度感测(ALS,Ambient Light Sensing)的环境亮度传感器,使用双光二极管来近似0.01lux照度近似人眼的视觉反应,带有上限和下限阈值的可编程中断功能,高达16位分辨率,即使在深色玻璃后也能高灵活运作。
原理图:
示例代码:
#include "SoftWire.h"
#include "Adafruit_APDS9960.h"
SoftWire sw(6,7); //sda,scl
Adafruit_APDS9960 apds=Adafruit_APDS9960(sw);
#define RED 1
#define GREEN 2
#define BLUE 3
#define WHITE 4
int R_F = 13000;
int G_F = 19000;
int B_F = 25000;
int r_f = 768;
int g_f = 1024;
int b_f = 1280;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
if(!apds.begin()){
Serial.println("failed to initialize device! Please check your wiring.");
}
else Serial.println("Device initialized!");
//enable color sensign mode
apds.enableColor(true);
delay(500);
}
int colorDetect()
{
uint16_t r, g, b, c;
int t;
//wait for color data to be ready
while(!apds.colorDataReady()){
delay(5);
}
apds.getColorData(&r, &g, &b, &c);
r = map(r, r_f, R_F, 0, 255);
g = map(g, g_f, G_F, 0, 255);
b = map(b, b_f, B_F, 0, 255);
//Find the largest value in R, G, B. For example, the maximum is R means that the object is Red
if (r > g)
t = RED;
else
t = GREEN;
if (t == GREEN && g < b)
t = BLUE;
if (t == RED && r < b)
t = BLUE;
//Returns the color only if the RGB value is greater than 30, otherwise returns 0
if(t == BLUE && b > 50)
{
Serial.println("Blue");
return t;
}
else if(t == GREEN && g > 50)
{
Serial.println("Green");
return t;
}
else if(t == RED && r > 50)
{
Serial.println("Red");
return t;
}
else
return 0;
return 0;
}
void loop() {
colorDetect();
delay(200);
}
串口打印: