I dette projekt skal vi detektere farverne ved hjælp af TCS3200 farvesensormodul med Raspberry Pi. Her brugte vi Python-kode til Raspberry Pi til at detektere farverne ved hjælp af TCS3200-sensoren. For at demonstrere farvedetekteringen har vi brugt en RGB LED, denne RGB LED vil lyse i samme farve, som objektet præsenteres i nærheden af sensoren. I øjeblikket har vi programmeret Raspberry Pi til kun at registrere røde, grønne og blå farver. Men du kan programmere den til at registrere enhver farve efter at have fået RGB-værdierne, da hver farve består af disse RGB-komponenter. Tjek demovideoen i slutningen.
Vi har tidligere læst og vist RGB-værdierne for farverne ved hjælp af den samme TCS3200 med Arduino. Før du går videre, skal du vide om TCS3200 farvesensor.
TCS3200 farvesensor:
TCS3200 er en farvesensor, der kan registrere et vilkårligt antal farver med korrekt programmering. TCS3200 indeholder RGB (rødgrønblå) arrays. Som vist i figur på mikroskopisk niveau kan man se de firkantede kasser inde i øjet på sensoren. Disse firkantede kasser er arrays af RGB-matrix. Hver af disse kasser indeholder tre sensorer til registrering af rød, grøn og blå lysintensitet.
Så vi har røde, blå og grønne arrays på samme lag. Så mens vi opdager farve, kan vi ikke registrere alle tre elementer samtidigt. Hver af disse sensorer arrays skal vælges separat efter hinanden for at detektere farven. Modulet kan programmeres til at mærke den bestemte farve og forlade de andre. Den indeholder ben til det valgte formål, hvilket er blevet forklaret senere. Der er fjerde tilstand, der ikke er nogen filtertilstand; uden filtertilstand registrerer sensoren hvidt lys.
Vi forbinder denne sensor til Raspberry Pi og programmerer Raspberry Pi til at give passende svar afhængigt af farve.
Nødvendige komponenter:
Her bruger vi Raspberry Pi 2 Model B med Raspbian Jessie OS. Alle de grundlæggende hardware- og softwarekrav er tidligere diskuteret, du kan slå det op i Raspberry Pi Introduktion og Raspberry PI LED Blinker for at komme i gang, bortset fra at vi har brug for:
- Raspberry Pi med forudinstalleret OS
- TCS3200 farvesensor
- CD4040 modchip
- RGB LED
- 1KΩ modstand (3 stykker)
- 1000uF kondensator
Kredsløbsdiagram og forbindelser:
Forbindelserne, der udføres for at forbinde farvesensoren med Raspberry Pi, er vist i nedenstående tabel:
Sensorstifter |
Hindbær Pi Pins |
Vcc |
+ 3,3v |
GND |
jord |
S0 |
+ 3,3v |
S1 |
+ 3,3v |
S2 |
GPIO6 af PI |
S3 |
GPIO5 af PI |
OE |
GPIO22 af PI |
UD |
CLK af CD4040 |
Forbindelserne til CD4040-tæller med Raspberry Pi er angivet i nedenstående tabel:
CD4040 Pins |
Hindbær Pi Pins |
Vcc16 |
+ 3,3v |
Gnd8 |
gnd |
Clk10 |
UD af sensoren |
Nulstil11 |
GPIO26 af PI |
Q0 |
GPIO21 af PI |
Q1 |
GPIO20 af PI |
Q2 |
GPIO16 af PI |
Q3 |
GPIO12 af PI |
Q4 |
GPIO25 af PI |
Q5 |
GPIO24 af PI |
Q6 |
GPIO23 af PI |
Q7 |
GPIO18 af PI |
Q8 |
Ingen forbindelse |
Q9 |
Ingen forbindelse |
Q10 |
Ingen forbindelse |
Q11 |
Ingen forbindelse |
Nedenfor er det fulde kredsløbsdiagram for interfacing farvesensor med Raspberry Pi:
Arbejdsforklaring:
Hver farve består af tre farver: Rød, grøn og blå (RGB). Og hvis vi kender intensiteten af RGB i en hvilken som helst farve, så kan vi registrere den farve. Vi har tidligere læst disse RGB-værdier ved hjælp af Arduino.
Ved hjælp af TCS3200 farvesensor kan vi ikke registrere rødt, grønt og blåt lys på samme tid, så vi skal kontrollere dem en efter en. Farven, der skal registreres af farvesensoren, vælges med to ben S2 og S3. Med disse to ben kan vi fortælle sensoren, hvilken farve lysintensitet der skal måles.
Sig, hvis vi har brug for at mærke den røde farveintensitet, så er vi nødt til at indstille begge ben til LAV. Efter at have målt det RØDE lys, indstiller vi S2 LAV og S3 HØJ til at måle det blå lys. Ved sekventielt at ændre logikken i S2 og S3 kan vi måle lysstyrkerne for rødt, blåt og grønt i henhold til nedenstående tabel:
S2 |
S3 |
Fotodiodetype |
Lav |
Lav |
Rød |
Lav |
Høj |
Blå |
Høj |
Lav |
Intet filter (hvid) |
Høj |
Høj |
Grøn |
Når sensoren registrerer intensiteten af RGB-komponenter, sendes værdien til kontrolsystemet inde i modulet som vist i nedenstående figur. Lysintensiteten målt ved matrix sendes til strøm til frekvensomformeren inde i modulet. Frekvensomformeren genererer en firkantbølge, hvis frekvens er direkte proportional med den værdi, der sendes af arrayet. Med højere værdi fra ARRAY genererer strøm til frekvensomformer firkantbølgen med højere frekvens.
Udgangssignalfrekvensen fra farvesensormodulet kan justeres til fire niveauer. Disse niveauer vælges ved hjælp af S0 og S1 i sensormodulet som vist i nedenstående figur.
S0 |
S1 |
Udgangsfrekvensskalering (f0) |
L |
L |
Sluk |
L |
H |
2% |
H |
L |
20% |
H |
H |
100% |
Denne funktion er praktisk, når vi bruger dette modul til systemet med lavt ur. Med Raspberry Pi vælger vi 100%. Husk her, under farven genererer farvesensormodulet en firkantbølgeoutput, hvis maksimale frekvens er 2500Hz (100% skalering) for hver farve.
Selvom modulet tilvejebringer en firkantet udgangsbølge, hvis frekvens er i direkte forhold til lysintensiteten, der falder på overfladen, er der ingen nem måde at beregne lysintensiteten for hver farve af dette modul på. Vi kan dog se, om lysintensiteten stiger eller falder for hver farve. Vi kan også beregne og sammenligne de røde, grønne, blå værdier for at detektere farven på lyset eller farven på objektet, der er forudindstillet på modulets overflade. Så dette er mere af farvesensormodulet snarere end lysintensitetssensormodulet.
Nu vil vi føje denne firkantbølgeoutput til Raspberry Pi, men vi kan ikke give den direkte til PI, fordi Raspberry Pi ikke har nogen interne tællere. Så først giver vi dette output til CD4040 binær tæller, og vi vil programmere Raspberry Pi til at tage frekvensværdien fra tælleren med periodiske intervaller på 100 msek.
Så PI læser en værdi på 2500/10 = 250 max for hver RØD, GRØN og BLÅ farve. Vi har også programmeret Raspberry Pi til at udskrive disse værdier, der repræsenterer lysintensiteterne på skærmen som vist nedenfor. Værdierne trækkes fra standardværdierne for at nå til nul. Dette er nyttigt, når du beslutter farven.
Her er standardværdierne værdierne for RGB, som er taget uden at placere et objekt foran sensoren. Det afhænger af de omgivende lysforhold, og disse værdier kan variere alt efter omgivelserne. Grundlæggende kalibrerer vi sensoren til standardaflæsninger. Så kør først programmet uden at placere et objekt, og bemærk aflæsningerne. Disse værdier vil ikke være nær nul, da der altid vil falde noget lys på sensoren, uanset hvor du placerer den. Træk derefter disse aflæsninger med de aflæsninger, som vi får, når vi har placeret et objekt, der skal testes. På denne måde kan vi få standardaflæsninger.
Raspberry Pi er også programmeret til at sammenligne R-, G- og B-værdierne for at bestemme farven på objektet placeret nær sensoren. Dette resultat vises ved glødende RGB LED tilsluttet Raspberry Pi.
Så i en nøddeskal,
1. Modulet registrerer det lys, der reflekteres af objektet placeret nær overfladen.
2. Farvesensormodulet giver outputbølge til R eller G eller B, valgt sekventielt af Raspberry Pi gennem pins S2 og S3.
3. CD4040 Counter tager bølgen og måler frekvensværdien.
4. PI tager frekvensværdien fra tælleren for hver farve for hver 100 ms. Efter optagelse af værdien hver gang PI nulstiller tælleren for at detektere den næste værdi.
5. Raspberry Pi udskriver disse værdier på skærmen og sammenligner disse værdier for at detektere objektfarven og til sidst lyser RGB-LED'en i passende farve afhængigt af objektets farve.
Vi har fulgt ovenstående sekvens i vores Python-kode. Det fulde program er angivet nedenfor med en demonstrationsvideo.
Her er Raspberry Pi programmeret til kun at detektere tre farver, du kan matche R-, G- og B-værdierne i overensstemmelse hermed for at detektere flere farver efter din smag.