Ebben a projektben a színek detektálását a Raspberry Pi-vel ellátott TCS3200 színérzékelő modul segítségével végezzük. Itt a Raspberry Pi Python kódját használtuk a színek TCS3200 szenzor segítségével történő detektálására. A színfelismerés bemutatásához RGB LED-et használtunk, ez az RGB LED ugyanabban a színben fog világítani, amelynek tárgya az érzékelő közelében található. Jelenleg úgy programoztuk a Raspberry Pi-t, hogy csak a vörös, a zöld és a kék színt érzékelje. De beprogramozhatja bármilyen szín észlelésére az RGB-értékek megszerzése után, mivel minden szín ezekből az RGB-összetevőkből áll. Ellenőrizze a bemutató videót a végén.
Korábban a színek RGB-értékeit olvastuk és jelenítettük meg ugyanazzal a TCS3200-zal az Arduinóval. Mielőtt továbblépne, tudassa a TCS3200 színes érzékelővel.
TCS3200 színérzékelő:
A TCS3200 egy olyan színérzékelő, amely tetszőleges számú színt képes felismerni a megfelelő programozással. A TCS3200 RGB (piros zöld kék) tömböt tartalmaz. Miként az ábra mikroszkopikus szinten látható, láthatók az érzékelő négyzet alakú négyzetei a szem belsejében. Ezek a négyzet alakú dobozok RGB mátrix tömbök. Mindegyik doboz három érzékelőt tartalmaz a vörös, zöld és kék fény intenzitásának érzékelésére.
Tehát ugyanazon a rétegen piros, kék és zöld tömbök vannak. Tehát a szín észlelése közben mind a három elemet nem tudjuk egyszerre észlelni. Ezen érzékelő tömbök mindegyikét külön kell kiválasztani egymás után a szín érzékeléséhez. A modul beprogramozható az adott szín érzékelésére és a többiek elhagyására. Tűket tartalmaz a kiválasztás céljára, amelyet később elmagyaráztunk. Van olyan negyedik mód, amely nem szűrő mód; szűrő nélküli üzemmódban az érzékelő fehér fényt érzékel.
Csatlakoztatjuk ezt az érzékelőt a Raspberry Pi-hez, és programozzuk a Raspberry Pi-t a színtől függő megfelelő válasz biztosítására.
Szükséges alkatrészek:
Itt a Raspberry Pi 2 Model B-t használjuk Raspbian Jessie operációs rendszerrel. Az összes alapvető hardver- és szoftverkövetelményt korábban megbeszéltük. Megtekintheti a Raspberry Pi bevezetőjében és a Raspberry PI LED villog a kezdéshez, azon kívül, amire szükségünk van:
- Raspberry Pi előre telepített operációs rendszerrel
- TCS3200 színes érzékelő
- CD4040 számláló chip
- RGB LED
- 1KΩ ellenállás (3 db)
- 1000uF kondenzátor
Áramkör és kapcsolatok:
A színérzékelő és a Raspberry Pi csatlakoztatásához szükséges csatlakozásokat az alábbi táblázat tartalmazza:
Érzékelő csapok |
Raspberry Pi Pins |
Vcc |
+ 3,3v |
GND |
talaj |
S0 |
+ 3,3v |
S1 |
+ 3,3v |
S2 |
PI PIIO6 |
S3 |
PI PIIO5 |
OE |
PI PIIO22 |
KI |
A CD4040 CLK-ja |
A CD4040 számláló és a Raspberry Pi csatlakozóit az alábbi táblázat tartalmazza:
CD4040 csapok |
Raspberry Pi Pins |
Vcc16 |
+ 3,3v |
Gnd8 |
gnd |
Clk10 |
OUT érzékelő |
Visszaállítás11 |
PI PIIO26 |
Q0 |
PI PIIO21 |
Q1 |
A PI GPIO20 |
Q2 |
PI PIIO16 |
Q3 |
PI PIIO12 |
Q4 |
PI PIIO25 |
Q5 |
PI PIIO24 |
Q6 |
PI PIIO23 |
Q7 |
PI GPIO18 |
Q8 |
Nincs kapcsolat |
Q9 |
Nincs kapcsolat |
Q10 |
Nincs kapcsolat |
Q11 |
Nincs kapcsolat |
Az alábbiakban bemutatjuk az Interfacing Color Sensor with Raspberry Pi teljes kapcsolási rajzát:
Munka magyarázat:
Minden szín három színből áll: piros, zöld és kék (RGB). És ha bármilyen színben ismerjük az RGB intenzitását, akkor észlelhetjük ezt a színt. Korábban ezeket az RGB értékeket olvastuk az Arduino használatával.
A TCS3200 színérzékelővel nem tudjuk egyszerre észlelni a piros, a zöld és a kék fényt, ezért egyenként ellenőriznünk kell őket. A színérzékelő által érzékelendő színt két S2 és S3 csap választja meg. Ezzel a két csap segítségével meg tudjuk mondani az érzékelőnek, hogy melyik szín fényintenzitását kell mérni.
Mondjuk, ha érzékelnünk kell a vörös szín intenzitását, akkor mindkét csapot LOW-ra kell állítanunk. Miután megmérte a RED fényt, az S2 LOW és S3 HIGH értékeket állítjuk be a kék fény mérésére. Az S2 és S3 logikájának egymás utáni megváltoztatásával mérhetjük a piros, a kék és a zöld fényintenzitást az alábbi táblázat szerint:
S2 |
S3 |
Fotodióda típus |
Alacsony |
Alacsony |
Piros |
Alacsony |
Magas |
Kék |
Magas |
Alacsony |
Nincs szűrő (fehér) |
Magas |
Magas |
Zöld |
Amint az érzékelő észleli az RGB komponensek intenzitását, az értéket elküldi a modul belsejében lévő vezérlő rendszernek, az alábbi ábra szerint. A tömb által mért fényintenzitás a modul belsejében lévő áram-frekvencia átalakítóhoz kerül. A frekvenciaváltó olyan négyzethullámot generál, amelynek frekvenciája egyenesen arányos a tömb által küldött értékkel. Az ARRAY-tól nagyobb értéknél az Áram-frekvencia átalakító nagyobb frekvencia négyzethullámot generál.
A színérzékelő modul kimeneti jelének frekvenciája négy szintre állítható. Ezeket a szinteket az érzékelőmodul S0 és S1 segítségével választhatja ki, az alábbi ábra szerint.
S0 |
S1 |
Kimeneti frekvencia méretezése (f0) |
L |
L |
Kikapcsolás |
L |
H |
2% |
H |
L |
20% |
H |
H |
100% |
Ez a funkció jól jön, ha ezt a modult alacsony órajel mellett csatlakoztatjuk a rendszerhez. A Raspberry Pi-vel 100% -ot választunk. Ne feledje, hogy a színérzékelő modul árnyékban négyzethullámú kimenetet generál, amelynek maximális frekvenciája 2500 Hz (100% -os méretezés) minden színhez.
Bár a modul olyan kimeneti négyzethullámot biztosít, amelynek frekvenciája egyenesen arányos a felületére eső fényintenzitással, nincs egyszerű módszer kiszámítani az egyes színek fényintenzitását ezzel a modullal. Megállapíthatjuk azonban, hogy az egyes színeknél növekszik vagy csökken a fényintenzitás. Kiszámíthatjuk és összehasonlíthatjuk a Piros, Zöld, Kék értékeket, hogy érzékeljük a fény színét vagy a modul felületén előre beállított tárgy színét. Tehát ez inkább a Color Sensor modul, nem pedig a Light Intensity Sensor modul.
Most ezt a négyzethullámú kimenetet tápláljuk a Raspberry Pi-hez, de nem adhatjuk közvetlenül a PI-nek, mert a Raspberry Pi-nek nincsenek belső számlálói. Tehát először ezt a kimenetet adjuk a CD4040 bináris számlálónak, és programozzuk a Raspberry Pi-t, hogy 100 ms-os időközönként vegye ki a frekvencia értékét a számlálóból.
Tehát a PI minden egyes VÖRÖS, ZÖLD és KÉK szín esetén 2500/10 = 250 max értéket olvas. Azt is programoztuk a Raspberry Pi-t, hogy ezeket a fényintenzitást képviselő értékeket kinyomtassa a képernyőn, az alábbiak szerint. Az értékeket kivonjuk az alapértelmezett értékekből, hogy elérjük a nullát. Ez jól jön a szín eldöntése közben.
Itt az alapértelmezett értékek az RGB értékei, amelyeket úgy vettünk fel, hogy semmilyen tárgyat nem tettünk az érzékelő elé. Ez a környező fényviszonyoktól függ, és ezek az értékek a környezettől függően eltérőek lehetnek. Alapvetően az érzékelőt kalibráljuk a standard leolvasásokhoz. Tehát először futtassa a programot tárgyak elhelyezése nélkül, és jegyezze fel az olvasmányokat. Ezek az értékek nem lesznek nulla közelében, mivel mindig lesz némi fény az érzékelőre, függetlenül attól, hogy hova helyezi. Ezután vonja le ezeket az olvasmányokat azokkal az értékekkel, amelyeket kapunk, miután egy tárgyat teszteltünk. Így standard olvasmányokat kaphatunk.
A Raspberry Pi programozva van az R, G és B értékek összehasonlítására is, hogy meghatározza az érzékelő közelében elhelyezett tárgy színét. Ezt az eredményt a Raspberry Pi-hez csatlakoztatott izzó RGB LED mutatja.
Tehát dióhéjban
1. A modul érzékeli a felület közelében elhelyezett tárgy által visszavert fényt.
2. A színérzékelő modul kimeneti hullámot szolgáltat R vagy G vagy B számára, amelyet a Raspberry Pi választott egymás után az S2 és S3 csapokon keresztül.
3. A CD4040 számláló veszi a hullámot és megméri a frekvencia értékét.
4. A PI elveszi a számlálótól a frekvenciaértéket minden színre 100 ms-onként. Az érték felvétele után a PI minden alkalommal visszaállítja a számlálót a következő érték észlelésére.
5. A Raspberry Pi kinyomtatja ezeket az értékeket a képernyőn, és összehasonlítja ezeket az értékeket az objektum színének észleléséhez, és végül az RGB LED megfelelő színben világít az objektum színétől függően.
A fenti sorrendet követtük Python kódunkban. A teljes program alább látható, bemutató videóval.
Itt a Raspberry Pi csak három szín észlelésére van programozva, ennek megfelelően illesztheti az R, G és B értékeket, hogy több színt felismerhessen.