In dit project gaan we de kleuren detecteren met behulp van de TCS3200 Color Sensor Module met Raspberry Pi. Hier hebben we Python-code voor Raspberry Pi gebruikt om de kleuren te detecteren met behulp van de TCS3200-sensor. Om de kleurdetectie te demonstreren hebben we een RGB LED gebruikt, deze RGB LED licht op in dezelfde kleur waarvan het object bij de sensor wordt gepresenteerd. Momenteel hebben we Raspberry Pi geprogrammeerd om alleen rode, groene en blauwe kleuren te detecteren. Maar je kunt het programmeren om elke kleur te detecteren nadat je de RGB-waarden hebt opgehaald, omdat elke kleur uit deze RGB-componenten bestaat. Bekijk de demo-video aan het einde.
We hebben eerder de RGB-waarden van de kleuren gelezen en weergegeven met dezelfde TCS3200 met Arduino. Voordat u verder gaat, moet u de TCS3200-kleursensor weten.
TCS3200 kleurensensor:
TCS3200 is een kleursensor die met de juiste programmering een willekeurig aantal kleuren kan detecteren. TCS3200 bevat RGB-arrays (rood groen blauw). Zoals weergegeven in de afbeelding op microscopisch niveau, kan men de vierkante dozen in het oog op de sensor zien. Deze vierkante dozen zijn arrays van RGB-matrix. Elk van deze dozen bevat drie sensoren voor het detecteren van de intensiteit van rood, groen en blauw licht.
We hebben dus rode, blauwe en groene arrays op dezelfde laag. Dus terwijl we kleur detecteren, kunnen we niet alle drie de elementen tegelijkertijd detecteren. Elk van deze sensoren-arrays moeten afzonderlijk na elkaar worden geselecteerd om de kleur te detecteren. De module kan worden geprogrammeerd om de specifieke kleur aan te voelen en de andere te verlaten. Het bevat pinnen voor dat selectiedoeleinden, dat later wordt uitgelegd. Er is een vierde modus die geen filtermodus is; zonder filtermodus detecteert de sensor wit licht.
We zullen deze sensor verbinden met Raspberry Pi en de Raspberry Pi programmeren om de juiste respons te geven, afhankelijk van de kleur.
Vereiste componenten:
Hier gebruiken we Raspberry Pi 2 Model B met Raspbian Jessie OS. Alle basis hardware- en softwarevereisten zijn eerder besproken, je kunt het opzoeken in de Raspberry Pi Introductie en Raspberry PI LED Knipperend om aan de slag te gaan, behalve dat we nodig hebben:
- Raspberry Pi met vooraf geïnstalleerd besturingssysteem
- TCS3200 kleurensensor
- CD4040 teller chip
- RGB-led
- 1KΩ weerstand (3 stuks)
- 1000uF condensator
Schakelschema en aansluitingen:
De verbindingen die worden gemaakt om de kleursensor met Raspberry Pi te verbinden, worden in onderstaande tabel weergegeven:
Sensor pinnen |
Raspberry Pi-pinnen |
Vcc |
+ 3.3v |
GND |
grond |
S0 |
+ 3.3v |
S1 |
+ 3.3v |
S2 |
GPIO6 van PI |
S3 |
GPIO5 van PI |
OE |
GPIO22 van PI |
UIT |
CLK van CD4040 |
De aansluitingen voor de CD4040-teller met Raspberry Pi staan in onderstaande tabel:
CD4040-pinnen |
Raspberry Pi-pinnen |
Vcc16 |
+ 3.3v |
GND8 |
gnd |
Clk10 |
UIT sensor |
Reset 11 |
GPIO26 van PI |
Q0 |
GPIO21 van PI |
V1 |
GPIO20 van PI |
Q2 |
GPIO16 van PI |
Q3 |
GPIO12 van PI |
V4 |
GPIO25 van PI |
V5 |
GPIO24 van PI |
V6 |
GPIO23 van PI |
V7 |
GPIO18 van PI |
V8 |
Geen connectie |
V9 |
Geen connectie |
V10 |
Geen connectie |
V11 |
Geen connectie |
Hieronder vindt u het volledige schakelschema van Interfacing Color Sensor met Raspberry Pi:
Werkende uitleg:
Elke kleur is opgebouwd uit drie kleuren: rood, groen en blauw (RGB). En als we de intensiteit van RGB in welke kleur dan ook kennen, kunnen we die kleur detecteren. We hebben deze RGB-waarden eerder met Arduino gelezen.
Met de TCS3200-kleursensor kunnen we niet tegelijkertijd rood, groen en blauw licht detecteren, dus we moeten ze een voor een controleren. De kleur die door de kleursensor moet worden gedetecteerd, wordt geselecteerd door twee pinnen S2 en S3. Met deze twee pinnen kunnen we de sensor vertellen welke kleur lichtintensiteit gemeten moet worden.
Stel dat als we de intensiteit van de rode kleur moeten voelen, we beide pinnen op LAAG moeten zetten. Nadat we het RODE licht hebben gemeten, zullen we S2 LAAG en S3 HOOG instellen om het blauwe licht te meten. Door achtereenvolgens de logica van S2 en S3 te wijzigen, kunnen we de intensiteit van rood, blauw en groen licht meten, volgens de onderstaande tabel:
S2 |
S3 |
Fotodiode Type |
Laag |
Laag |
Rood |
Laag |
Hoog |
Blauw |
Hoog |
Laag |
Geen filter (wit) |
Hoog |
Hoog |
Groen |
Zodra de sensor de intensiteiten van RGB-componenten detecteert, wordt de waarde naar het controlesysteem in de module gestuurd, zoals weergegeven in de onderstaande afbeelding. De door de array gemeten lichtintensiteit wordt naar de stroom-naar-frequentieomvormer in de module gestuurd. De frequentieomvormer genereert een blokgolf waarvan de frequentie recht evenredig is met de waarde die door de array wordt verzonden. Met een hogere waarde van de ARRAY, genereert de stroom-naar-frequentieomvormer de blokgolf met een hogere frequentie.
De uitgangssignaalfrequentie van de kleurensensormodule kan op vier niveaus worden ingesteld. Deze niveaus worden geselecteerd met behulp van S0 en S1 van de sensormodule, zoals weergegeven in onderstaande afbeelding.
S0 |
S1 |
Uitgangsfrequentieschaling (f0) |
L. |
L. |
Stroomstoring |
L. |
H. |
2% |
H. |
L. |
20% |
H. |
H. |
100% |
Deze functie is handig wanneer we deze module met het systeem verbinden met een lage klok. Met Raspberry Pi zullen we 100% selecteren. Onthoud hier dat onder de schaduw de kleursensormodule een blokgolfuitgang genereert waarvan de maximale frequentie 2500Hz is (100% schaalverdeling) voor elke kleur.
Hoewel de module een vierkante uitgangsgolf levert waarvan de frequentie recht evenredig is met de lichtintensiteit die op het oppervlak valt, is er geen gemakkelijke manier om de lichtintensiteit van elke kleur door deze module te berekenen. We kunnen echter voor elke kleur zien of de lichtintensiteit toeneemt of afneemt. We kunnen ook de rode, groene en blauwe waarden berekenen en vergelijken om de kleur van het licht of de kleur van het object op het oppervlak van de module te detecteren. Dit is dus meer een kleursensormodule dan een lichtintensiteitssensormodule.
Nu zullen we deze Square wave-uitgang naar de Raspberry Pi sturen, maar we kunnen deze niet rechtstreeks aan PI geven, omdat Raspberry Pi geen interne tellers heeft. Dus eerst geven we deze uitvoer aan CD4040 Binary Counter en we zullen de Raspberry Pi programmeren om de frequentiewaarde van de teller op te nemen met periodieke intervallen van 100 msec.
Dus de PI leest een waarde van 2500/10 = 250 max voor elke RODE, GROENE en BLAUWE kleur. We hebben ook de Raspberry Pi geprogrammeerd om deze waarden af te drukken die de lichtintensiteiten op het scherm vertegenwoordigen, zoals hieronder weergegeven. De waarden worden afgetrokken van de standaardwaarden om tot nul te komen. Dit is handig bij het bepalen van de kleur.
Hier zijn de standaardwaarden de waarden van RGB, die zijn genomen zonder een object voor de sensor te plaatsen. Het hangt af van de omgevingslichtomstandigheden en deze waarden kunnen verschillen naargelang de omgeving. In principe kalibreren we de sensor voor standaardmetingen. Start dus eerst het programma zonder een object te plaatsen en noteer de meetwaarden. Deze waarden zullen niet in de buurt van nul zijn, omdat er altijd wat licht op de sensor valt, ongeacht waar u deze plaatst. Trek vervolgens die metingen af van de metingen die we zullen krijgen nadat we een te testen object hebben geplaatst. Op deze manier kunnen we standaard metingen krijgen.
Raspberry Pi is ook geprogrammeerd om de R-, G- en B-waarden te vergelijken om de kleur te bepalen van het object dat in de buurt van de sensor is geplaatst. Dit resultaat wordt weergegeven door een gloeiende RGB-led die is aangesloten op de Raspberry Pi.
Dus in een notendop,
1. De module detecteert het licht dat wordt gereflecteerd door het object dat zich nabij het oppervlak bevindt.
2. De kleursensormodule levert een outputgolf voor R of G of B, opeenvolgend gekozen door Raspberry Pi via de pinnen S2 en S3.
3. CD4040 Counter neemt de golf en meet de frequentiewaarde.
4. PI haalt de frequentiewaarde van de teller voor elke kleur voor elke 100 ms. Na het nemen van de waarde reset PI elke keer de teller om de volgende waarde te detecteren.
5. Raspberry Pi drukt deze waarden op het scherm af en vergelijkt deze waarden om de objectkleur te detecteren en tenslotte de RGB-LED in de juiste kleur te laten gloeien, afhankelijk van de kleur van het object.
We hebben de bovenstaande volgorde gevolgd in onze Python-code. Het volledige programma wordt hieronder gegeven met een demonstratievideo.
Hier is Raspberry Pi geprogrammeerd om slechts drie kleuren te detecteren, u kunt de R-, G- en B-waarden dienovereenkomstig aanpassen om meer kleuren van uw voorkeur te detecteren.