V tomto projekte sa chystáme detekovať farby pomocou modulu farebných senzorov TCS3200 a Raspberry Pi. Tu sme použili kód Pythonu pre Raspberry Pi na detekciu farieb pomocou snímača TCS3200. Na demonštráciu detekcie farieb, ktorú sme použili RGB LED, bude táto RGB LED svietiť rovnakou farbou, ktorej objekt je prezentovaný v blízkosti snímača. V súčasnosti sme naprogramovali Raspberry Pi tak, aby detekoval iba červenú, zelenú a modrú farbu. Môžete ho ale naprogramovať tak, aby po získaní hodnôt RGB zistil akúkoľvek farbu, pretože každá farba je zložená z týchto komponentov RGB. Na konci si pozrite ukážkové video.
Predtým sme čítali a zobrazovali hodnoty RGB farieb pomocou rovnakého TCS3200 s Arduino. Predtým, ako pôjdete ďalej, dajte vedieť o farebnom senzore TCS3200.
Farebný senzor TCS3200:
TCS3200 je farebný senzor, ktorý dokáže správne programovať a detekovať ľubovoľný počet farieb. TCS3200 obsahuje polia RGB (červená zelená modrá). Ako je znázornené na obrázku na mikroskopickej úrovni, na snímači je vidieť štvorcové štvorčeky vo vnútri oka. Tieto štvorcové políčka sú poľami RGB matice. Každé z týchto boxov obsahuje tri senzory na snímanie intenzity červeného, zeleného a modrého svetla.
Takže máme červené, modré a zelené pole na rovnakej vrstve. Takže pri detekcii farby nemôžeme detekovať všetky tri prvky súčasne. Každé z týchto polí snímačov je potrebné zvoliť samostatne jeden po druhom, aby sa zistila farba. Modul je možné naprogramovať tak, aby snímal konkrétnu farbu a zanechával ostatné. Obsahuje piny na tento účel výberu, ktoré boli vysvetlené neskôr. Existuje štvrtý režim, ktorý nie je režimom filtra; bez režimu filtra senzor detekuje biele svetlo.
Tento snímač pripojíme k Raspberry Pi a naprogramujeme Raspberry Pi tak, aby poskytoval primeranú odozvu v závislosti od farby.
Požadované komponenty:
Tu používame Raspberry Pi 2 Model B s Raspbian Jessie OS. Všetky základné hardvérové a softvérové požiadavky sú už predtým diskutované. Môžete si ich vyhľadať v úvode Raspberry Pi a blikaní Raspberry PI LED, okrem toho, čo potrebujeme:
- Raspberry Pi s predinštalovaným OS
- Farebný snímač TCS3200
- Čip počítadla CD4040
- RGB LED
- 1KΩ rezistor (3 kusy)
- 1000uF kondenzátor
Schéma zapojenia a zapojenia:
Pripojenia, ktoré sa vykonávajú na pripojenie senzora farieb k Raspberry Pi, sú uvedené v nasledujúcej tabuľke:
Piny snímača |
Špendlíky maliny Pi |
Vcc |
+3,3 V |
GND |
zem |
S0 |
+3,3 V |
S1 |
+3,3 V |
S2 |
GPIO6 zo spoločnosti PI |
S3 |
GPIO5 zo spoločnosti PI |
OE |
GPIO22 zo spoločnosti PI |
VON |
CLK z CD4040 |
Pripojenia počítadla CD4040 s Raspberry Pi sú uvedené v nasledujúcej tabuľke:
Piny CD4040 |
Špendlíky maliny Pi |
Vcc16 |
+3,3 V |
Gnd8 |
GND |
Clk10 |
MIMO snímača |
Resetovať 11 |
GPIO26 zo spoločnosti PI |
Q0 |
GPIO21 zo spoločnosti PI |
Q1 |
GPIO20 z PI |
Q2 |
GPIO16 z PI |
Q3 |
GPIO12 zo spoločnosti PI |
Q4 |
GPIO25 zo spoločnosti PI |
Q5 |
GPIO24 zo spoločnosti PI |
Q6 |
GPIO23 zo spoločnosti PI |
Q7 |
GPIO18 zo spoločnosti PI |
Q8 |
Žiadne spojenie |
Q9 |
Žiadne spojenie |
Q10 |
Žiadne spojenie |
Q11 |
Žiadne spojenie |
Nižšie je uvedená úplná schéma zapojenia farebného senzora s rozhraním Raspberry Pi:
Pracovné vysvetlenie:
Každá farba sa skladá z troch farieb: červenej, zelenej a modrej (RGB). A ak poznáme intenzitu RGB v akejkoľvek farbe, potom túto farbu môžeme zistiť. Tieto hodnoty RGB sme predtým čítali pomocou Arduina.
Pomocou farebného snímača TCS3200 nemôžeme detekovať červené, zelené a modré svetlo súčasne, takže ich musíme kontrolovať jeden po druhom. Farbu, ktorú je potrebné snímať farebným senzorom, vyberajú dva piny S2 a S3. Pomocou týchto dvoch kolíkov môžeme snímaču povedať, ktorá intenzita farebného svetla sa má merať.
Povedzme, že ak potrebujeme vycítiť intenzitu červenej farby, musíme oba kolíky nastaviť na LOW. Po nameraní ČERVENÉHO svetla nastavíme S2 LOW a S3 HIGH na meranie modrého svetla. Postupnou zmenou logiky S2 a S3 môžeme merať intenzity červeného, modrého a zeleného svetla podľa nižšie uvedenej tabuľky:
S2 |
S3 |
Typ fotodiódy |
Nízka |
Nízka |
Červená |
Nízka |
Vysoký |
Modrá |
Vysoký |
Nízka |
Žiadny filter (biely) |
Vysoký |
Vysoký |
zelená |
Akonáhle senzor detekuje intenzitu RGB komponentov, hodnota sa odošle do riadiaceho systému vo vnútri modulu, ako je to znázornené na obrázku nižšie. Intenzita svetla meraná poľom sa posiela do prevodníka prúd na frekvenciu vo vnútri modulu. Frekvenčný menič generuje obdĺžnikovú vlnu, ktorej frekvencia je priamo úmerná hodnote vysielanej poľom. S vyššou hodnotou z ARRAY generuje prevodník prúdu na frekvenciu štvorcovú vlnu vyššej frekvencie.
Frekvencia výstupného signálu modulom farebného snímača sa dá nastaviť na štyri úrovne. Tieto úrovne sa vyberajú pomocou S0 a S1 modulu snímača, ako je znázornené na nasledujúcom obrázku.
S0 |
S1 |
Zmena výstupnej frekvencie (f0) |
Ľ |
Ľ |
Vypnut |
Ľ |
H |
2% |
H |
Ľ |
20% |
H |
H |
100% |
Táto funkcia sa hodí, keď prepájame tento modul so systémom s nízkymi hodinami. S Raspberry Pi vyberieme 100%. Pamätajte si tu, že v tieni generuje modul farebných snímačov výstup štvorcových vĺn, ktorých maximálna frekvencia je 2 500 Hz (100% zmena mierky) pre každú farbu.
Aj keď modul poskytuje výstupnú štvorcovú vlnu, ktorej frekvencia je priamo úmerná intenzite svetla dopadajúcej na jeho povrch, nie je možné týmto modulom ľahko vypočítať intenzitu svetla každej farby. Môžeme však povedať, či sa intenzita svetla pre každú farbu zvyšuje alebo znižuje. Tiež môžeme vypočítať a porovnať hodnoty červenej, zelenej a modrej na detekciu farby svetla alebo farby objektu prednastaveného na povrchu modulu. Toto je teda skôr modul farebného snímača ako modul snímača intenzity svetla.
Teraz budeme napájať tento výstup štvorcových vĺn na Raspberry Pi, ale nemôžeme ho dať priamo na PI, pretože Raspberry Pi nemá žiadne interné čítače. Najprv teda dáme tento výstup binárnemu čítaču CD4040 a naprogramujeme Raspberry Pi tak, aby z čítača v pravidelných intervaloch 100 ms bral hodnotu frekvencie.
Takže PI načíta hodnotu 2500/10 = 250 max pre každú ČERVENÚ, ZELENÚ a MODRÚ farbu. Naprogramovali sme tiež Raspberry Pi na tlač týchto hodnôt predstavujúcich intenzitu svetla na obrazovke, ako je uvedené nižšie. Hodnoty sa odčítajú od predvolených hodnôt, aby sa dosiahli nula. To sa hodí pri rozhodovaní o farbe.
Tu sú predvolené hodnoty hodnoty RGB, ktoré sa získali bez umiestnenia žiadneho predmetu pred snímač. Závisí to od okolitých svetelných podmienok a tieto hodnoty sa môžu líšiť podľa okolitého prostredia. V zásade kalibrujeme snímač na štandardné hodnoty. Najprv teda spustite program bez umiestnenia akéhokoľvek objektu a zaznamenajte hodnoty. Tieto hodnoty sa nebudú blížiť k nule, pretože na snímač vždy bude dopadať nejaké svetlo bez ohľadu na to, kam ho umiestnite. Potom odčítajte tieto hodnoty od údajov, ktoré získate po umiestnení objektu na testovanie. Týmto spôsobom môžeme získať štandardné hodnoty.
Raspberry Pi je tiež naprogramovaný na porovnanie hodnôt R, G a B s cieľom určiť farbu objektu umiestneného v blízkosti snímača. Tento výsledok ukazuje svietiaca RGB LED pripojená k Raspberry Pi.
Stručne povedané,
1. Modul detekuje svetlo odrážané objektom umiestneným v blízkosti povrchu.
2. Modul farebného senzora poskytuje výstupnú vlnu pre R alebo G alebo B, zvolenú postupne Raspberry Pi cez piny S2 a S3.
3. Počítadlo CD4040 berie vlnu a meria hodnotu frekvencie.
4. PI berie hodnotu frekvencie z počítadla pre každú farbu každých 100 ms. Po získaní hodnoty zakaždým PI vynuluje počítadlo, aby zistilo ďalšiu hodnotu.
5. Raspberry Pi vytlačí tieto hodnoty na obrazovku a porovná tieto hodnoty, aby zistil farbu objektu a nakoniec rozsvietil RGB LED príslušnou farbou v závislosti od farby objektu.
Vyššie uvedenú postupnosť sme sledovali v našom kóde Python. Celý program je uvedený nižšie s ukážkovým videom.
Tu je Raspberry Pi naprogramovaný tak, aby detekoval iba tri farby. Podľa toho môžete zodpovedať hodnotám R, G a B, aby ste zistili viac farieb podľa vašich predstáv.