在这篇文章中,我们将建设一个可以检测颜色并触发相应分配的继电器的电路。该项目采用TCS3200颜色传感器和Arduino板完成。
TCS3200彩色传感
如果您尚未阅读上一篇文章,请通过我们讨论的位置使用TCS3200的色彩传感基础知识
如果您希望基于颜色采取行动,则建议的项目可能很有用。基于各种工业领域的色彩检测有海洋。
该项目将介绍如何如何编程颜色传感器以检测不同颜色并触发继电器。
我们将考虑这个项目的原色:红、绿、蓝。该项目可以区分这三种颜色并触发继电器,每个继电器对应每种颜色。
TCS3200可以检测任意数量的颜色,但要保持项目可以理解并保持程序代码简单,我们仅集中在原色上。
电路图:
以上示意图是Arduino与TCS3200颜色传感器的接口图。
继电器连接:
使用9V适配器为Arduino供电,至少500mA。由于Arduino的GPIO引脚无法为继电器提供足够的电流,因此晶体管充当继电器的放大器。
二极管1N4007将吸收继电器线圈的高压尖峰,保护其余半导体元件。
结束了硬件。
现在让我们看看如何上传代码并为您的要求进行校准传感器。
颜色灵敏度可能因模块而异,环境光可能会大幅改变颜色灵敏度。
所有的TCS3200传感器在制作时都有一些变化,你必须测量你目前拥有的传感器的颜色参数,以便这些参数可以在代码中使用,以更准确地检测颜色。
要校准和优化传感器读数,请严格遵循以下步骤:
步骤1:使用已完成的硬件设置上传以下代码。
//-------- 项目由R.GIRISH -------// const int s0 = 4;Const int s1 = 5;Const int s2 = 6;Const int s3 = 7;Const int out = 8;Int frequency1 = 0;Int frequency2 = 0;Int frequency3 = 0;int state = LOW;int state1 = LOW; int state2 = HIGH; void setup() { Serial.begin(9600); pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); pinMode(s3, OUTPUT); pinMode(out, INPUT); //----Scaling Frequency 20%-----// digitalWrite(s0, state2); digitalWrite(s1, state1); //-----------------------------// } void loop() { //-----Sensing RED colour-----// digitalWrite(s2, state1); digitalWrite(s3, state1); frequency1 = pulseIn(out, state); Serial.print("RED = "); Serial.print(frequency1); Serial.print(" |"); delay(100); //------Sensing Green colour----// digitalWrite(s2, state2); digitalWrite(s3, state2); frequency2 = pulseIn(out, state); Serial.print(" Green = "); Serial.print(frequency2); Serial.print(" |"); delay(100); //------Sensing Blue colour----// digitalWrite(s2, state1); digitalWrite(s3, state2); frequency3 = pulseIn(out, state); Serial.print(" Blue = "); Serial.println(frequency3); delay(100); Serial.println("-----------------------------"); delay(400); } //---------Program Developed by R.GIRISH---------//
第2步:打开串行监视器,您将找到这样的颜色参数:
带上颜色对象(最好是彩色纸)红色、蓝色和绿色。
步骤3:
•将红色彩色纸张靠近TCS3200传感器。
•放置红色纸张时,记下R、G、B读数(所有三种颜色)。
•同样地,在绿色和蓝色的纸上记下R, G, B读数。
•注意:当您在TCS3200前面放置任何3种颜色时,请记下每个颜色纸张的所有红色,蓝色和绿色读数,您需要进入主色素检测程序。
步骤4:阅读步骤5并上传以下主要代码(颜色检测程序)
//-----Program Developed by r.g riish -----// const int Red_relay = 9;const int Green_relay = 10;const int Blue_relay = 11;Const int s0 = 4;Const int s1 = 5;Const int s2 = 6;Const int s3 = 7;Const int out = 8;Int var = 25;Int red = 0; int green = 0; int blue = 0; int state = LOW; int state1 = LOW; int state2 = HIGH; //-----------Enter Values--------// //For RED Colour: int Rx1 = 92; int Gx1 = 240; int Bx1 = 53; //For GREEN Colour: int Rx2 = 228; int Gx2 = 163; int Bx2 = 64; //For BLUE Colour: int Rx3 = 300; int Gx3 = 144; int Bx3 = 45; //----------------------------// void setup() { Serial.begin(9600); pinMode(Red_relay, OUTPUT); pinMode(Green_relay, OUTPUT); pinMode(Blue_relay, OUTPUT); digitalWrite(Red_relay, LOW); digitalWrite(Green_relay, LOW); digitalWrite(Blue_relay, LOW); pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); pinMode(s3, OUTPUT); pinMode(out, INPUT); //----Scaling Frequency 20%-----// digitalWrite(s0, state2); digitalWrite(s1, state1); //-----------------------------// } void loop() { int redH1 = Rx1 + var; int redL1 = Rx1 - var; int redH2 = Rx2 + var; int redL2 = Rx2 - var; int redH3 = Rx3 + var; int redL3 = Rx3 - var; int blueH1 = Bx1 + var; int blueL1 = Bx1 - var; int blueH2 = Bx2 + var; int blueL2 = Bx2 - var; int blueH3 = Bx3 + var; int blueL3 = Bx3 - var; int greenH1 = Gx1 + var; int greenL1 = Gx1 - var; int greenH2 = Gx2 + var; int greenL2 = Gx2 - var; int greenH3 = Gx3 + var; int greenL3 = Gx3 - var; //-----Sensing RED colour-----// digitalWrite(s2, state1); digitalWrite(s3, state1); red = pulseIn(out, state); delay(100); //------Sensing Green colour----// digitalWrite(s2, state2); digitalWrite(s3, state2); green = pulseIn(out, state); ; delay(100); //------Sensing Blue colour----// digitalWrite(s2, state1); digitalWrite(s3, state2); blue = pulseIn(out, state); delay(400); if(red <= redH1 && red >= redL1) { if(green <= greenH1 && green >= greenL1) { if(blue <= blueH1 && blue >= blueL1) { Serial.println("Detected Colour: RED"); Serial.println(""); digitalWrite(Red_relay, HIGH); delay(1000); } } } if(red <= redH2 && red >= redL2) { if(green <= greenH2 && green >= greenL2) { if(blue <= blueH2 && blue >= blueL2) { Serial.println("Detected Colour: Green"); Serial.println(""); digitalWrite(Green_relay, HIGH); delay(1000); } } } if(red <= redH3 && red >= redL3) { if(green <= greenH3 && green >= greenL3) { if(blue <= blueH3 && blue >= blueL3) { Serial.println("Detected Colour: Blue"); Serial.println(""); digitalWrite(Blue_relay, HIGH); delay(1000); } } } } //------Program Developed by R.GIRISH--------//
步骤5:在上面的代码中,替换您最近注明下注的值的值:
// - - - - 输入值 - - // //用于红色:int rx1 = 92;int Gx1 = 240;int Bx1 = 53;//For GREEN color: int Rx2 = 228;int Gx2 = 163;int Bx2 = 64;//为蓝色颜色:int Rx3 = 300;int Gx3 = 144;int Bx3 = 45;// - - - - - - - - - - - - - - //
当您在传感器上放置红色彩色纸张时,您将获得三个读数,例如R = 56 |G = 78 |B = 38。
按如下方式放置值56、78和38:
// for红颜色:
int Rx1 = 56;
int Gx1=78;
int Bx1 = 38;
同样,对于其他两种颜色并上传代码。
步骤6:
•打开串行监视器,将三种颜色中的任何一种置于传感器前面。
•您将看到串行监视器上的颜色的检测;同时相应的颜色继电器被激活。
•您在Arduino Board上按RESET按钮停用继电器。
注1:电路可能无法检测到颜色,如果您在校准后放置略微不同的阴影/色调,绿色,蓝色物体/纸张。换句话说,您必须使用完全相同的彩色对象/纸张来检测颜色并触发继电器。
注2:环境光会影响颜色检测,因此,在校准和检测颜色时,请在传感器附近保持一致的光线。
作者的原型:
如果你有任何关于这个项目的问题,请在评论部分表达,你可能会收到一个快速的回复。