Circuit de detecció de color amb codi Arduino

Proveu El Nostre Instrument Per Eliminar Problemes





En aquest post anem a construir un circuit que pugui detectar el color i activar els relés assignats respectius. Aquest projecte s’aconsegueix mitjançant el sensor de color TCS3200 i la placa Arduino.

Color Sensing per TCS3200

Si no heu llegit l’article anterior, consulteu-lo on hem parlat conceptes bàsics de la detecció de color mitjançant TCS3200



El projecte proposat pot ser útil si voleu que un circuit actuï en funció dels colors. Hi ha oceans d’aplicacions basades en la detecció de color en diversos camps industrials.

Aquest projecte donarà una idea de com podem programar el sensor de color per detectar diferents colors i activar els relés.



Considerarem els colors primaris: VERMELL, VERD i BLAU per a aquest projecte. Aquest projecte pot diferenciar aquests tres colors i activar els relés, cada relé per a cada color.

El TCS3200 pot detectar qualsevol nombre de colors, però per mantenir el projecte entenedor i per simplificar el codi del programa, només ens concentrem en els colors primaris.

Esquema de connexions:

interfície del sensor de color Arduino i TCS3200

L'esquema anterior és per a la interfície del sensor de color Arduino i TCS3200.

Connexions de relés:

connexions de relés del sensor de color Arduino i TCS3200

Alimenteu l'Arduino amb un adaptador de 9V amb 500 mA com a mínim. El transistor actua com a amplificador per al relé, ja que els pins GPIO d’Arduino no poden proporcionar corrent suficient per transmetre.

El díode 1N4007 absorbirà els pics d'alta tensió de la bobina del relé, protegint la resta de components semiconductors.

Això conclou el maquinari.

Ara veurem com penjar el codi i calibrar el sensor segons les vostres necessitats.
La sensibilitat del color pot variar de mòdul a mòdul i la llum ambiental pot alterar dràsticament la sensibilitat del color.

Tots els sensors TCS3200 presenten algunes variacions mentre es fabriquen; heu de mesurar els paràmetres de color del sensor que teniu actualment, de manera que aquests paràmetres es puguin utilitzar al codi per detectar el color amb més precisió.

Seguiu aquests passos per calibrar i optimitzar les lectures del sensor:

Pas 1: pengeu el codi següent amb la configuració de maquinari completa.

//-----Program Developed by R.GIRISH-----// 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 = redL1) { if(green = greenL1) { if(blue = blueL1) { Serial.println('Detected Colour: RED') Serial.println('') digitalWrite(Red_relay, HIGH) delay(1000) } } } if(red = redL2) { if(green = greenL2) { if(blue = blueL2) { Serial.println('Detected Colour: Green') Serial.println('') digitalWrite(Green_relay, HIGH) delay(1000) } } } if(red = redL3) { if(green = greenL3) { if(blue = blueL3) { Serial.println('Detected Colour: Blue') Serial.println('') digitalWrite(Blue_relay, HIGH) delay(1000) } } } } //------Program Developed by R.GIRISH--------//

Pas 2: obriu el monitor sèrie, trobareu els paràmetres de color com aquest:

Porteu l'objecte de color (es prefereix el paper de colors) vermell, blau i verd.

Pas 3:

• Col·loqueu el paper de color vermell a prop del sensor TCS3200.
• Anoteu les lectures R, G, B (els tres colors) mentre col·loqueu el paper de color vermell.
• Anoteu de manera similar la lectura R, G, B per a papers de color verd i blau.

• NOTA: quan col·loqueu qualsevol dels 3 colors davant del TCS3200, anoteu totes les lectures vermelles, blaves i verdes de cada paper de color, que heu d'introduir al programa principal de detecció de color.

Pas 4: llegiu el pas 5 i pengeu el codi principal següent (programa de detecció de color)

//-- -- -- -- 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 //-- -- -- -- -- -- -- -- -- -- -- //

Pas 5: Al codi anterior, substituïu els valors pels vostres valors que heu assenyalat recentment:

//--------Program Developed by 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() ') 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---------//

Quan col·loqueu el paper de color vermell al sensor, tindríeu tres lectures, per exemple R = 56 | G = 78 | B = 38.

Col·loqueu els valors 56, 78, 38 així:

// Per al color VERMELL:
int Rx1 = 56
int Gx1 = 78
int Bx1 = 38

De la mateixa manera, per a altres dos colors i pengeu el codi.

Pas 6:

• Obriu el monitor sèrie i col·loqueu qualsevol dels tres colors davant del sensor.
• Veureu la detecció de colors al monitor sèrie alhora que s'activa el relé de color corresponent.

• Heu premut el botó de restabliment de la placa Arduino per desactivar el relé.

NOTA 1: És possible que el circuit no detecti els colors, si col·loqueu una tonalitat / tonalitat lleugerament diferent a l’objecte / paper de color VERMELL, VERD, BLAU després de la calibració. En altres paraules, heu d’utilitzar exactament el mateix objecte / paper del mateix color per detectar els colors i activar el relé.

NOTA 2: La llum ambiental pot afectar la detecció del color, per tant, mantingueu una llum constant a prop del sensor mentre calibreu i també mentre detecteu els colors.

Prototip de l'autor:

Prototip de sensor de color Arduino

Si teniu cap pregunta sobre aquest projecte, expresseu-ho a la secció de comentaris, podreu rebre una resposta ràpida.




Anterior: Ús de sensors TSOP17XX amb freqüències personalitzades Següent: Circuit de carregador de bateria múltiple amb condensador de bolcat