KKM: TCS230 SENZOR ZA PREPOZNAVANJE BOJA

KKM: TCS230 SENZOR ZA PREPOZNAVANJE BOJA-Uncategorized

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

UVOD

Ovaj modul senzora boja sadrži TCS230, programibilni konverter svjetlosti u frekvenciju. Može filtrirati RGB iz izvora svjetlosti i pretvoriti ga u pravokutne valove s frekvencijom direktno proporcionalnom s intenzitetom svjetlosti. Koristi se u robotici za prepoznavanje objekata, praćenje “linija”, u dizajnu za kameleon efekt i drugo.

Karakteristike:
Napon: 2.7 – 5.5V
Preciznost: 0.2% na 50kHz
Dimenzije: 29x21mm

KAKO RADI?

TCS230 kombinira fotodiode i napon-u-frekvenciju konverter. Sadrži 8×8 niz fotodioda, i to: 16 s plavim, 16 s zelenim, 16 s crvenim filterom i 16 bez filtera. Ako uzmete povećalo i naciljate centar čipa moći ćete vidjeti ove filtere. Veličine su 120x120um, a služe kako bi se filtrirala “slučajna” zračenja. Na modulu se nalaze 4 širokokutne 5mm hladno bijele LED diode kako bi se povećalo zračenje te ostale pasivne komponente koje su nužne za direktno čitanje izlaznog pina.

Pinout

GND – gnd
OE – Output enable, aktivan LOW
OUT – izlazna frekvencija (fo)
S0, S1 – pinovi za skaliranje izlazne frekvencije (0%, 2%, 20%, 100%)
S2, S3 – pinovi za odabir RGB filtera (crveni, plavi, zeleni, bez)
Vcc – 2.7 – 5.5 VDC

Za više pogledaj datasheet.

MODUL I CRODUINO

Prema datasheetu, pinove smo spojili kao na slici gore:

GND – gnd
OE – gnd, LOW aktivira OUT pin
OUT – PIN10 Croduina, jedini ulazni pin možemo koristiti bilo koji
S0, S1 – +5V, kombinacija kada su oba pina HIGH skalira nam izlazni pin na 100%. Za veću preciznost koristite manji [%]. U tom slučaju, uz Arduino, nužno je koristiti neku Timer library.
S2 – PIN7 Croduina, kombiniramo s S3 kako bi mijenjali filtere prema tablici dolje
S3 – PIN6 Croduina, kombiniramo s S2 kako bi mijenjali filtere prema tablici dolje
Vcc – +5V

Kombinacija S2/S3 za mijenjanje filtera :

NAPOMENA: kod ispod prikazuej princip rada modula, za preciznije podatke nužne su kalibracije i točnije mjerenja koja možete dobiti uz pomoć TimerOne librarya.

///////////////////////////////////////////////////////////////////////////////
/*                                                                           */
/*                                                                           */
/* (c) e-radionica.com 2015 - http://e-radionica.com/hr/faq/#privatnost      */
/* [email protected]                                               */
/*                                                                           */
/*                                                                           */
/* TCS230 - KKM tutorial                                                     */
///////////////////////////////////////////////////////////////////////////////
/*
  GND - GND, OE
  +5V - Vcc, S0, S1
  D10 - OUT
  D7  - S2
  D6  - S3
*/
const int s2 = 7;
const int s3 = 6;
const int out = 10;
byte crvena, zelena, plava;
void setup() {
  pinMode(s2, OUTPUT);
  pinMode(s3, OUTPUT);
  pinMode(out, INPUT);
  Serial.begin(9600);
}
void loop() {
  ProvjeriBoje();
  Serial.print("Crvena = " + String(crvena) + "\t");
  Serial.print("Zelena = " + String(zelena) + "\t");
  Serial.print("Plava = " + String(plava) + "\n");
  delay(100);
}
void ProvjeriBoje() {
  // bez crvenog filtera
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);
  crvena = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
  
  delay(10);
  // bez plavog filtera
  digitalWrite(s2, LOW);
  digitalWrite(s3, HIGH);
  plava = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
  
  delay(10);
  // bez zelenog filtera
  digitalWrite(s2, HIGH);
  digitalWrite(s3, HIGH);
  zelena = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}