V tomto projektu se chystáme detekovat barvy pomocí modulu barevných senzorů TCS3200 s Raspberry Pi. Zde jsme použili kód Pythonu pro Raspberry Pi k detekci barev pomocí senzoru TCS3200. Abychom demonstrovali detekci barev, kterou jsme použili RGB LED, bude tato RGB LED svítit stejnou barvou, jejíž objekt je zobrazen poblíž senzoru. V současné době jsme naprogramovali Raspberry Pi tak, aby detekoval pouze červenou, zelenou a modrou barvu. Můžete jej ale naprogramovat tak, aby po získání hodnot RGB detekoval jakoukoli barvu, protože každá barva je složena z těchto komponent RGB. Na konci zkontrolujte ukázkové video.
Dříve jsme četli a zobrazovali hodnoty RGB barev pomocí stejného TCS3200 s Arduino. Než půjdeme dále, dejte vědět o barevném senzoru TCS3200.
Barevný senzor TCS3200:
TCS3200 je barevný senzor, který dokáže detekovat libovolný počet barev pomocí správného programování. TCS3200 obsahuje pole RGB (červená zelená modrá). Jak je znázorněno na obrázku na mikroskopické úrovni, je možné vidět čtvercové rámečky uvnitř oka na senzoru. Tato čtvercová pole jsou pole matice RGB. Každý z těchto boxů obsahuje tři senzory pro snímání intenzity červeného, zeleného a modrého světla.
Takže máme pole červené, modré a zelené na stejné vrstvě. Takže při detekci barvy nemůžeme detekovat všechny tři prvky současně. Každé z těchto polí senzorů musí být vybráno samostatně jeden po druhém, aby se detekovala barva. Modul lze naprogramovat tak, aby snímal konkrétní barvu a opouštěl ostatní. Obsahuje piny pro tento účel výběru, které byly vysvětleny později. Existuje čtvrtý režim, který není režimem filtru; bez režimu filtru senzor detekuje bílé světlo.
Tento senzor připojíme k Raspberry Pi a naprogramujeme Raspberry Pi tak, aby poskytoval odpovídající odezvu v závislosti na barvě.
Požadované komponenty:
Zde používáme Raspberry Pi 2 Model B s Raspbian Jessie OS. Všechny základní hardwarové a softwarové požadavky jsou již dříve diskutovány, můžete si je vyhledat v Raspberry Pi Introduction a Raspberry PI LED Blinking pro začátek, kromě toho, co potřebujeme:
- Raspberry Pi s předinstalovaným operačním systémem
- Barevný snímač TCS3200
- Čip čítače CD4040
- RGB LED
- 1KΩ rezistor (3 kusy)
- 1000uF kondenzátor
Schéma zapojení a zapojení:
Připojení, která se provádějí pro připojení snímače barev s Raspberry Pi, jsou uvedena v následující tabulce:
Piny snímače |
Pinů Raspberry Pi |
Vcc |
+3,3 V |
GND |
přízemní |
S0 |
+3,3 V |
S1 |
+3,3 V |
S2 |
GPIO6 z PI |
S3 |
GPIO5 PI |
OE |
GPIO22 z PI |
VEN |
CLK z CD4040 |
Připojení čítače CD4040 s Raspberry Pi jsou uvedena v následující tabulce:
Kolíky CD4040 |
Pinů Raspberry Pi |
Vcc16 |
+3,3 V |
Gnd8 |
GND |
Clk10 |
MIMO senzor |
Resetovat 11 |
GPIO26 z PI |
Q0 |
GPIO21 z PI |
Q1 |
GPIO20 z PI |
Q2 |
GPIO16 z PI |
Q3 |
GPIO12 z PI |
Q4 |
GPIO25 z PI |
Q5 |
GPIO24 z PI |
Q6 |
GPIO23 z PI |
Q7 |
GPIO18 z PI |
Q8 |
Žádné připojení |
Q9 |
Žádné připojení |
Q10 |
Žádné připojení |
Q11 |
Žádné připojení |
Níže je uvedeno úplné schéma zapojení barevného senzoru rozhraní s Raspberry Pi:
Pracovní vysvětlení:
Každá barva se skládá ze tří barev: červené, zelené a modré (RGB). A pokud známe intenzitu RGB v jakékoli barvě, můžeme tuto barvu detekovat. Dříve jsme tyto hodnoty RGB načetli pomocí Arduina.
Pomocí barevného senzoru TCS3200 nemůžeme detekovat červené, zelené a modré světlo současně, takže je musíme kontrolovat jeden po druhém. Barva, kterou je třeba snímat snímačem barvy, se volí dvěma piny S2 a S3. S těmito dvěma kolíky můžeme říci senzoru, která intenzita barevného světla se má měřit.
Řekněme, že pokud potřebujeme cítit intenzitu červené barvy, musíme oba piny nastavit na LOW. Po měření červeného světla nastavíme S2 LOW a S3 HIGH pro měření modrého světla. Postupnou změnou logiky S2 a S3 můžeme měřit intenzity červeného, modrého a zeleného světla podle níže uvedené tabulky:
S2 |
S3 |
Typ fotodiody |
Nízký |
Nízký |
Červené |
Nízký |
Vysoký |
Modrý |
Vysoký |
Nízký |
Žádný filtr (bílý) |
Vysoký |
Vysoký |
Zelená |
Jakmile senzor detekuje intenzitu RGB komponent, je hodnota odeslána do řídicího systému uvnitř modulu, jak je znázorněno na obrázku níže. Intenzita světla měřená polem je odeslána do převodníku proudu na frekvenci uvnitř modulu. Frekvenční měnič generuje obdélníkovou vlnu, jejíž frekvence je přímo úměrná hodnotě poslané polem. S vyšší hodnotou z ARRAY generuje převodník proudu na frekvenci čtvercovou vlnu vyšší frekvence.
Frekvenci výstupního signálu modulem barevného snímače lze nastavit na čtyři úrovně. Tyto úrovně se volí pomocí S0 a S1 modulu snímače, jak je znázorněno na následujícím obrázku.
S0 |
S1 |
Škálování výstupní frekvence (f0) |
L |
L |
Vypnout |
L |
H |
2% |
H |
L |
20% |
H |
H |
100% |
Tato funkce se hodí, když propojujeme tento modul se systémem s nízkými hodinami. S Raspberry Pi vybereme 100%. Nezapomeňte zde, že ve stínu modul barevného senzoru generuje výstup obdélníkové vlny, jehož maximální frekvence je 2500 Hz (100% škálování) pro každou barvu.
Přestože modul poskytuje výstupní obdélníkovou vlnu, jejíž frekvence je přímo úměrná intenzitě světla dopadajícího na jeho povrch, neexistuje snadný způsob, jak tento modul vypočítat intenzitu světla každé barvy. Můžeme však říci, zda se intenzita světla u každé barvy zvyšuje nebo snižuje. Rovněž můžeme vypočítat a porovnat hodnoty červené, zelené a modré pro detekci barvy světla nebo barvy objektu přednastaveného na povrchu modulu. Jedná se tedy spíše o modul barevného senzoru než o modul senzoru intenzity světla.
Nyní budeme napájet tento výstup čtvercové vlny na Raspberry Pi, ale nemůžeme jej dát přímo PI, protože Raspberry Pi nemá žádné interní čítače. Nejprve tedy dáme tento výstup binárnímu čítači CD4040 a naprogramujeme Raspberry Pi tak, aby v pravidelných intervalech 100 ms odebíral z čítače hodnotu frekvence.
Takže PI čte hodnotu 2500/10 = 250 max pro každou RED, GREEN a BLUE barvu. Také jsme naprogramovali Raspberry Pi na tisk těchto hodnot představujících intenzitu světla na obrazovce, jak je uvedeno níže. Hodnoty se odečtou od výchozích hodnot, aby se dosáhly nuly. To se hodí při rozhodování o barvě.
Zde jsou výchozí hodnoty hodnoty RGB, které byly odebrány bez umístění jakéhokoli objektu před senzor. Závisí to na okolních světelných podmínkách a tyto hodnoty se mohou lišit podle okolí. V zásadě kalibrujeme senzor pro standardní hodnoty. Nejprve tedy spusťte program bez umístění jakéhokoli objektu a poznamenejte si hodnoty. Tyto hodnoty se nebudou blížit nule, protože na senzor vždy dopadne nějaké světlo bez ohledu na to, kam jej umístíte. Pak odečtěte tyto hodnoty odečty, které získáme po umístění objektu k testování. Tímto způsobem můžeme získat standardní hodnoty.
Raspberry Pi je také naprogramován tak, aby porovnával hodnoty R, G a B a určoval barvu objektu umístěného v blízkosti senzoru. Tento výsledek ukazuje zářící RGB LED připojená k Raspberry Pi.
Stručně řečeno,
1. Modul detekuje světlo odražené objektem umístěným v blízkosti povrchu.
2. Modul barevného senzoru poskytuje výstupní vlnu pro R nebo G nebo B, zvolenou postupně Raspberry Pi přes piny S2 a S3.
3. Čítač CD4040 vezme vlnu a změří hodnotu frekvence.
4. PI přebírá hodnotu frekvence z čítače pro každou barvu každých 100 ms. Po převzetí hodnoty pokaždé PI vynuluje čítač, aby detekoval další hodnotu.
5. Raspberry Pi vytiskne tyto hodnoty na obrazovku a porovná tyto hodnoty, aby detekoval barvu objektu a nakonec rozsvítil RGB LED v příslušné barvě v závislosti na barvě objektu.
Sledovali jsme výše uvedenou sekvenci v našem Python Code. Celý program je uveden níže s ukázkovým videem.
Zde je Raspberry Pi naprogramován tak, aby detekoval pouze tři barvy, můžete odpovídajícím způsobem porovnat hodnoty R, G a B a detekovat více barev podle vašich představ.