Krug detektora boja s Arduino kodom

Isprobajte Naš Instrument Za Uklanjanje Problema





U ovom ćemo postu konstruirati sklop koji može prepoznati boju i aktivirati odgovarajuće dodijeljene releje. Ovaj projekt ostvaren je pomoću senzora u boji TCS3200 i Arduino ploče.

Osjetnik boje TCS3200

Ako niste pročitali prethodni članak, prođite ga tamo gdje smo razgovarali o osnove osjetljivosti boja pomoću TCS3200



Predloženi projekt može biti koristan ako želite da krug poduzme akciju na temelju boja. Postoje oceani aplikacija koje se temelje na detekciji boja u raznim industrijskim poljima.

Ovaj će projekt dati uvid u to kako možemo programirati senzor u boji za otkrivanje različitih boja i pokretanje releja.



Razmotrit ćemo primarne boje: CRVENU, ZELENU i PLAVO za ovaj projekt. Ovaj projekt može razlikovati ove tri boje i pokrenuti releje, svaki relej za svaku boju.

TCS3200 može otkriti bilo koji broj boja, no kako bi projekt bio razumljiv i kako bi programski kod bio jednostavan, koncentriramo se samo na primarne boje.

Kružni dijagram:

povezivanje senzora u boji Arduino i TCS3200

Gornja shema je za povezivanje senzora u boji Arduino i TCS3200.

Relejni priključci:

relejni spojevi Arduino i TCS3200 senzor u boji

Napajajte Arduino pomoću adaptera od 9 V s najmanje 500 mA. Tranzistor djeluje kao pojačalo za relej, jer Arduinoovi GPIO pinovi ne mogu pružiti dovoljnu struju za relej.

Dioda 1N4007 će apsorbirati visokonaponske šiljke iz zavojnice releja, štiteći ostale dijelove poluvodiča.

To zaključuje hardver.

Sada da vidimo kako prenijeti kod i kalibrirati senzor prema vašim zahtjevima.
Osjetljivost boje može se razlikovati od modula do modula, a okolno svjetlo može drastično promijeniti osjetljivost boje.

Svi TCS3200 senzori imaju neke varijacije tijekom izrade, morate izmjeriti parametre boje za senzor koji trenutno posjedujete, tako da se ti parametri mogu koristiti u kodu za preciznije otkrivanje boje.

Da biste kalibrirali i optimizirali očitanja vašeg senzora, slijedite precizno korake:

Korak 1: Učitajte sljedeći kod s dovršenim postavljanjem hardvera.

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

Korak 2: Otvorite serijski monitor, naći ćete parametre boje poput ovog:

Donesite predmet u boji (poželjan je papir u boji) crvenu, plavu i zelenu.

Korak 3:

• Stavite papir u crvenoj boji blizu senzora TCS3200.
• Zabilježite očitanja R, G, B (sve tri boje) dok postavljate papir u crvenoj boji.
• Na sličan način zabilježite R, G, B očitanje za papire u zelenoj i plavoj boji.

• NAPOMENA: kada stavite bilo koju od 3 boje ispred TCS3200, zabilježite sve crvene, plave i zelene očitke za svaki papir u boji, koje trebate unijeti u glavni program za otkrivanje boja.

Korak 4: Pročitajte korak 5 i prenesite glavni donji kod (program za otkrivanje boja)

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

Korak 5: U gornjem kodu zamijenite vrijednosti svojim vrijednostima koje ste nedavno zabilježili:

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

Kada biste na senzor stavili papir crvene boje, dobili biste tri očitanja, na primjer R = 56 | G = 78 | B = 38.

Vrijednosti 56, 78, 38 smjestite ovako:

// Za CRVENU boju:
int Rx1 = 56
int Gx1 = 78
int Bx1 = 38

Slično tome, za ostale dvije boje i prenesite kôd.

Korak 6:

• Otvorite serijski monitor i stavite bilo koju od tri boje ispred senzora.
• Vidjet ćete otkrivanje boja na serijskom monitoru istovremeno kada se aktivira odgovarajući relej boja.

• Pritisnite tipku za resetiranje na ploči Arduino da biste deaktivirali relej.

NAPOMENA 1: Strujni krug možda neće prepoznati boje ako nakon kalibracije stavite malo drugačiju nijansu / nijansu CRVENE, ZELENE, PLAVE boje predmeta / papira. Drugim riječima, morate koristiti potpuno iste predmete / papir u istoj boji kako biste otkrili boje i aktivirali relej.

NAPOMENA 2: Ambijentalno svjetlo može utjecati na detekciju boja, zato održavajte postojano svjetlo u blizini senzora tijekom kalibriranja i također dok detektirate boje.

Autorski prototip:

Prototip arduino senzora u boji

Ako imate bilo kakvih pitanja u vezi s ovim projektom, iznesite u odjeljku za komentare, možda ćete dobiti brzi odgovor.




Prethodno: Korištenje TSOP17XX senzora s prilagođenim frekvencijama Dalje: Višestruki krug punjača baterija pomoću istosmjernog kondenzatora