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:
Výše uvedené schéma je pro propojení barevného senzoru Arduino a TCS3200.
Připojení relé:
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:
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