V tem projektu bomo odkrili barve z uporabo modula senzorja barv TCS3200 z Raspberry Pi. Tu smo uporabili kodo Python za Raspberry Pi za zaznavanje barv s pomočjo senzorja TCS3200. Za prikaz barvnega zaznavanja smo uporabili RGB LED, ta RGB LED bo svetila v isti barvi, katere predmet je predstavljen v bližini senzorja. Trenutno smo Raspberry Pi programirali tako, da zazna samo rdečo, zeleno in modro barvo. Lahko pa ga programirate tako, da zazna katero koli barvo po pridobivanju vrednosti RGB, saj je vsaka barva sestavljena iz teh komponent RGB. Preverite predstavitveni video na koncu.
Že prej smo prebrali in prikazali vrednosti RGB barv z uporabo istega TCS3200 z Arduino. Preden nadaljujete, nas obvestite o barvnem senzorju TCS3200.
TCS3200 barvni senzor:
TCS3200 je barvni senzor, ki lahko s pravim programiranjem zazna poljubno število barv. TCS3200 vsebuje matrike RGB (rdeče zeleno modra). Kot je prikazano na sliki na mikroskopski ravni, lahko na senzorju vidimo kvadratne škatle znotraj očesa. Ta kvadratna polja so nizi matrike RGB. Vsako od teh polj vsebuje tri senzorje za zaznavanje intenzivnosti rdeče, zelene in modre svetlobe.
Tako imamo na isti plasti rdeče, modre in zelene nize. Torej med zaznavanjem barve ne moremo zaznati vseh treh elementov hkrati. Vsak od teh nizov senzorjev je treba izbrati ločeno enega za drugim, da zazna barvo. Modul je mogoče programirati tako, da zazna določeno barvo in zapusti ostale. Vsebuje žebljičke za ta izbirni namen, kar je bilo pojasnjeno kasneje. Obstaja četrti način, ki ni način filtriranja; brez načina filtra senzor zazna belo svetlobo.
Ta senzor bomo povezali z Raspberry Pi in programirali Raspberry Pi, da bo zagotovil ustrezen odziv glede na barvo.
Potrebne komponente:
Tu uporabljamo model Raspberry Pi 2 Model B z OS Raspbian Jessie. Vse osnovne zahteve glede strojne in programske opreme so že obravnavane, za začetek si jih lahko ogledate v Uvodu Raspberry Pi in Utripajoči LED Raspberry PI, razen tistega, kar potrebujemo:
- Raspberry Pi s prednameščenim OS
- TCS3200 barvni senzor
- Števec CD4040
- RGB LED
- 1KΩ upor (3 kosi)
- 1000uF kondenzator
Shema vezja in povezave:
Povezave za povezavo barvnega senzorja z Raspberry Pi so podane v spodnji tabeli:
Zatiči senzorja |
Zatiči Raspberry Pi |
Vcc |
+ 3,3 v |
GND |
tla |
S0 |
+ 3,3 v |
S1 |
+ 3,3 v |
S2 |
GPIO6 od PI |
S3 |
GPIO5 od PI |
OE |
GPIO22 od PI |
OUT |
CLK CD4040 |
Povezave za števec CD4040 z Raspberry Pi so podane v spodnji tabeli:
Zatiči CD4040 |
Zatiči Raspberry Pi |
Vcc16 |
+ 3,3 v |
Gnd8 |
gnd |
Klk10 |
ZUNAJ senzorja |
Ponastavi 11 |
GPIO26 iz PI |
Q0 |
GPIO21 iz PI |
Q1 |
GPIO20 od PI |
Q2 |
GPIO16 od PI |
Q3 |
GPIO12 od PI |
V4 |
GPIO25 od PI |
V5 |
GPIO24 od PI |
V6 |
GPIO23 iz PI |
V7 |
GPIO18 od PI |
V8 |
Ni povezave |
V9 |
Ni povezave |
Q10 |
Ni povezave |
Q11 |
Ni povezave |
Spodaj je celoten diagram vezja barvnega senzorja za povezovanje z Raspberry Pi:
Delovna razlaga:
Vsaka barva je sestavljena iz treh barv: rdeče, zelene in modre (RGB). In če poznamo intenzivnost RGB v kateri koli barvi, potem lahko to barvo zaznamo. Te vrednosti RGB smo že prebrali z uporabo Arduina.
Z uporabo barvnega senzorja TCS3200 ne moremo zaznati rdeče, zelene in modre svetlobe hkrati, zato jih moramo preveriti enega za drugim. Barvo, ki jo mora zaznati barvni senzor, izbereta dva zatiča S2 in S3. S tema dvema zatičema lahko senzorju sporočimo, katero barvno intenzivnost svetlobe je treba izmeriti.
Recimo, če moramo zaznati intenzivnost rdeče barve, potem moramo oba zatiča nastaviti na LOW. Po merjenju RDEČE svetlobe nastavimo S2 LOW in S3 HIGH za merjenje modre svetlobe. Z zaporednim spreminjanjem logike S2 in S3 lahko merimo jakost rdeče, modre in zelene svetlobe v skladu s spodnjo tabelo:
S2 |
S3 |
Tip fotodiode |
Nizko |
Nizko |
rdeča |
Nizko |
Visoko |
Modra |
Visoko |
Nizko |
Brez filtra (bela) |
Visoko |
Visoko |
Zelena |
Ko senzor zazna intenzivnost komponent RGB, se vrednost pošlje krmilnemu sistemu znotraj modula, kot je prikazano na spodnji sliki. Intenzivnost svetlobe, izmerjena z matriko, se pošlje pretvorniku toka v frekvenco znotraj modula. Frekvenčni pretvornik generira kvadratni val, katerega frekvenca je neposredno sorazmerna z vrednostjo, ki jo pošlje matrika. Z višjo vrednostjo iz ARRAY pretvornik toka v frekvenco generira kvadratni val višje frekvence.
Frekvenco izhodnega signala modula barvnega senzorja lahko prilagodite na štiri ravni. Te ravni se izberejo s pomočjo S0 in S1 senzorskega modula, kot je prikazano na spodnji sliki.
S0 |
S1 |
Skaliranje izhodne frekvence (f0) |
L |
L |
Izklop |
L |
H |
2% |
H |
L |
20% |
H |
H |
100% |
Ta funkcija je priročna, ko ta modul povezujemo s sistemom z nizko uro. Z Raspberry Pi bomo izbrali 100%. Tukaj ne pozabite: pod senco modul barvnega senzorja generira kvadratni valovni izhod, katerega največja frekvenca je 2500Hz (100% skaliranje) za vsako barvo.
Čeprav modul zagotavlja izhodni kvadratni val, katerega frekvenca je v sorazmerju z jakostjo svetlobe, ki pada na njegovo površino, ta modul ne more enostavno izračunati intenzivnosti svetlobe posamezne barve. Lahko pa ugotovimo, ali se jakost svetlobe za vsako barvo povečuje ali zmanjšuje. Prav tako lahko izračunamo in primerjamo vrednosti rdeče, zelene, modre, da zaznamo barvo svetlobe ali barvo predmeta, ki je prednastavljen na površini modula. To je torej bolj modul barvnega senzorja kot modul senzorja intenzivnosti svetlobe.
Zdaj bomo ta kvadratni izhod napajali v Raspberry Pi, vendar ga ne moremo dati neposredno v PI, ker Raspberry Pi nima nobenih notranjih števcev. Torej bomo najprej dali ta izhod binarnemu števcu CD4040 in programirali bomo Raspberry Pi, da iz števca vzame frekvenčno vrednost v periodičnih intervalih 100 ms.
Torej PI odčita vrednost 2500/10 = 250 max za vsako RDEČO, ZELENO in MODRO barvo. Prav tako smo programirali Raspberry Pi za tiskanje teh vrednosti, ki predstavljajo jakost svetlobe na zaslon, kot je prikazano spodaj. Vrednosti se od privzetih vrednosti odštejejo, da dosežejo nič. To je priročno pri odločanju o barvi.
Tu so privzete vrednosti vrednosti RGB, ki so nastale, ne da bi pred senzor postavili kateri koli predmet. Odvisno od okoliških svetlobnih razmer in te vrednosti se lahko razlikujejo glede na okolico. V bistvu kalibriramo senzor za standardne odčitke. Torej, najprej zaženite program, ne da bi postavili kakršen koli predmet in si zabeležite odčitke. Te vrednosti ne bodo blizu nič, saj bo na senzor vedno padlo nekaj svetlobe, ne glede na to, kam ga postavite. Nato odštejte odčitke z odčitki, ki jih bomo dobili po namestitvi predmeta za testiranje. Tako lahko dobimo standardne odčitke.
Raspberry Pi je programiran tudi za primerjavo vrednosti R, G in B za določitev barve predmeta, nameščenega v bližini senzorja. Ta rezultat prikazuje žareča RGB LED, priključena na Raspberry Pi.
Torej na kratko,
1. Modul zazna svetlobo, ki jo odbije predmet, nameščen blizu površine.
2. Modul barvnega senzorja zagotavlja izhodni val za R ali G ali B, ki ga je zaporedno izbral Raspberry Pi prek nožic S2 in S3.
3. Števec CD4040 sprejme val in izmeri frekvenčno vrednost.
4. PI vzame frekvenčno vrednost iz števca za vsako barvo na vsakih 100 ms. Po prevzemu vrednosti PI ponastavi števec, da zazna naslednjo vrednost.
5. Raspberry Pi natisne te vrednosti na zaslon in jih primerja, da zazna barvo predmeta in na koncu zasveti RGB LED v ustrezni barvi, odvisno od barve predmeta.
Zgornjemu zaporedju smo sledili v naši Python Code. Celoten program je predstavljen spodaj z demonstracijskim videom.
Tu je Raspberry Pi programiran tako, da zazna samo tri barve, vrednosti R, G in B pa lahko ustrezno ujemate, da zaznate več barv po svojem okusu.