电子说
耗材:
1x面包板
1x RGB LED(适用于12V RGB灯条的LED)
1x SFH 320光电晶体管
2x 470欧姆电阻
1x 240欧姆电阻
1x 10 Kohm电阻器
电线
Arduino(任何5V型号都可以工作)
步骤1:制作电路
接线图非常简单。
你可以在面包板上制作电路,或者如果你可以蚀刻或铣削电路板空白,当然,这将是更好的选择。
绿色和蓝色LED需要470欧姆,红色LED需要240欧姆。这是因为LED的工作电压不同。 LED必须全部以相同的亮度发光。
光电晶体管配有一个10k欧姆的下拉电阻。
就是这样。
唯一要记住的是晶体管直接放在LED旁边
步骤2:它是如何工作的?
设置简单,操作非常简单。 LED的颜色交替切换。首先是红色然后是绿色然后是蓝对于每种颜色,测量反射强度。例如,对于红色物体,红色的反射比其他两种颜色的反射强。对于紫色物体,红色和蓝色比绿色更强烈。剩下要做的就是通过Arduino的ADC读取模拟值,这样就可以得到物体的RGB值。
在正常光线下查看填充动物的例子,所有颜色都很正常。在红光的情况下,毛皮反射一点,绿色几乎是黑色,蓝色反射很多,这意味着紫罗兰具有高蓝色含量
为什么传感器如此快?光电晶体管的每种颜色的响应时间为14μs,这意味着所有颜色的响应时间为42μs。
如果计算f = 1/t,则得到23.8 KHz。这意味着在一秒钟内进行了23800次测量。
你的ADC从来没有这么快,他的性能达到了极限。
然而,通过给传感器更多的时间进行调整可以获得最佳效果,所以大约1 ms每种颜色,仍然意味着166赫兹。
为了最大限度地降低传感器的噪音,您应该进行大约5次测量并计算这些测量的算术平均值。
步骤3:将其连接到您的Arduino和Use It
要将传感器连接到Arduino,你应该有四个空闲引脚。
gnd - 》 gnd
5V - 》 5V
输出 - 》 A0
r - 》 2
b - 》 3
g - 》 4
现在将代码复制到Arduino IDE中并进行编译。
这是一个没有降噪的极简代码(步骤2中描述)。
#include
int sensor = A0;
int red = 2;
int blue = 3;
int green = 4;
int colour[] = {0,0,0};
char text[20];
int n =0;
void setup() {
// put your setup code here, to run once:
pinMode(red,OUTPUT);
pinMode(blue,OUTPUT);
pinMode(green,OUTPUT);
Serial.begin(9600);
} void loop() {
// put your main code here, to run repeatedly:
detect();
n=sprintf(text,“r %d g %d b %d ” ,colour[1],colour[2],colour[3]);
Serial.write(text,n);
delay(1000);
} void detect() {
digitalWrite(red, HIGH);
delay(1);
colour[1]=analogRead(sensor);
digitalWrite(red, LOW);
delay(1);
digitalWrite(green, HIGH);
delay(1);
colour[2]=analogRead(sensor);
digitalWrite(green, LOW);
delay(1);
digitalWrite(blue, HIGH);
delay(1);
colour[3]=analogRead(sensor);
digitalWrite(blue, LOW);
delay(1);
colour[1]=colour[1]/4;
colour[2]=colour[2]/4;
colour[3]=colour[3]/4;
}
上传到您的arduino后,您必须启动串行监视器才能看到RGB值。
传感器最佳工作距离在0.5到1厘米之间。在更远的距离,颜色变得更暗。该传感器是色彩检测任务和寻线仪的理想选择。您可以将PCB和部件涂成哑光黑色,以减少反射。不要忘记让组件的窗口自由。
这个传感器不是原型。该传感器用于德国南符腾堡州学生研究中心的Robocup德国救援队。为此,我构建了一个带有综合评估的8倍传感器。他将已经完成并校准的RGB值发送到中央处理器。
全部0条评论
快来发表一下你的评论吧 !