Okruh detektoru barev s kódem Arduino

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





V tomto příspěvku budeme konstruovat obvod, který dokáže detekovat barvu a spustit příslušná přiřazená relé. Tento projekt je realizován pomocí barevného senzoru TCS3200 a desky Arduino.

Color Sensing od TCS3200

Pokud jste si nepřečetli předchozí článek, projděte si jej, kde jsme diskutovali o základy snímání barev pomocí TCS3200



Navrhovaný projekt může být užitečný, pokud chcete, aby obvod provedl akci na základě barev. Existují oceány aplikací založených na detekci barev v různých průmyslových oblastech.

Tento projekt poskytne pohled na to, jak můžeme naprogramovat barevný senzor tak, aby detekoval různé barvy a spouštěl relé.



U tohoto projektu budeme uvažovat o základních barvách: ČERVENÉ, ZELENÉ a MODRÉ. Tento projekt může rozlišovat mezi těmito třemi barvami a spouštět relé, každé relé pro každou barvu.

TCS3200 dokáže detekovat libovolný počet barev, ale aby byl projekt srozumitelný a programový kód jednoduchý, soustředíme se pouze na primární barvy.

Kruhový diagram:

rozhraní mezi barevným senzorem Arduino a TCS3200

Výše uvedené schéma je pro propojení barevného senzoru Arduino a TCS3200.

Připojení relé:

reléová připojení barevného senzoru Arduino a TCS3200

Napájejte Arduino 9V adaptérem s minimálně 500mA. Tranzistor funguje jako zesilovač pro relé, protože GPIO piny Arduina nemohou poskytnout dostatečný proud pro relé.

Dioda 1N4007 absorbuje vysokonapěťové hroty z cívky relé a chrání zbytek polovodičových součástek.

Tím je hardware ukončen.

Nyní se podívejme, jak nahrát kód a kalibrovat senzor podle vašich požadavků.
Citlivost barev se může u jednotlivých modulů lišit a okolní světlo může drasticky měnit citlivost barev.

Všechny senzory TCS3200 mají při výrobě určité odchylky, musíte změřit barevné parametry senzoru, který aktuálně vlastníte, aby tyto parametry mohly být použity v kódu k přesnější detekci barvy.

Chcete-li kalibrovat a optimalizovat odečty pro váš senzor, postupujte přesně podle těchto kroků:

Krok 1: Nahrajte následující kód s dokončeným nastavením hardwaru.

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

Krok 2: Otevřete sériový monitor, najdete barevné parametry takto:

Přineste barevný předmět (upřednostňuje se barevný papír) červený, modrý a zelený.

Krok 3:

• Umístěte červeně zbarvený papír blízko snímače TCS3200.
• Poznamenejte si hodnoty R, G, B (všechny tři barvy), zatímco vkládáte papír červené barvy.
• Podobně si poznamenejte čtení R, G, B u papírů zelené a modré barvy.

• POZNÁMKA: Když umístíte kteroukoli ze 3 barev před TCS3200, poznamenejte si všechny červené, modré a zelené hodnoty pro každý barevný papír, které musíte zadat v hlavním programu detekce barev.

Krok 4: Přečtěte si krok 5 a nahrajte hlavní kód níže (program detekce barev)

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

Krok 5: Ve výše uvedeném kódu nahraďte hodnoty hodnotami, které jste si nedávno poznamenali:

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

Pokud byste na senzor umístili červeně zbarvený papír, dostali byste tři hodnoty, například R = 56 | G = 78 | B = 38.

Umístěte hodnoty 56, 78, 38 takto:

// U ČERVENÉ barvy:
int Rx1 = 56
int Gx1 = 78
int Bx1 = 38

Podobně pro další dvě barvy a nahrajte kód.

Krok 6:

• Otevřete sériový monitor a umístěte kteroukoli ze tří barev před senzor.
• Uvidíte detekci barev na sériovém monitoru současně s aktivací odpovídajícího barevného relé.

• Stisknutím tlačítka reset na desce Arduino deaktivujete relé.

POZNÁMKA 1: Obvod nemusí detekovat barvy, pokud po kalibraci umístíte mírně odlišný odstín / odstín ČERVENÉHO, ZELENÉHO, MODRÉHO barevného předmětu / papíru. Jinými slovy, k detekci barev a spuštění relé musíte použít přesně stejný barevný předmět / papír.

POZNÁMKA 2: Okolní světlo může ovlivnit detekci barev, proto udržujte konzistentní světlo v blízkosti senzoru při kalibraci a také při detekci barev.

Autorův prototyp:

Prototyp barevného senzoru Arduino

Máte-li jakékoli dotazy týkající se tohoto projektu, uveďte to prosím v sekci komentářů, můžete obdržet rychlou odpověď.




Předchozí: Použití senzorů TSOP17XX s přizpůsobenými frekvencemi Další: Obvod nabíječky více baterií pomocí kondenzátoru Dump