KKM: TCS230 SENZOR ZA PREPOZNAVANJE BOJA

KKM: TCS230 SENZOR ZA PREPOZNAVANJE BOJA-Uncategorized

Početnik si s Dasduinom. 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 tvrtke soldered 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 Dasduinom 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 DASDUINO

Prema datasheetu, pinove smo spojili kao na slici gore:

GND – gnd
OE – gnd, LOW aktivira OUT pin
OUT – PIN10 Dasduina, 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 Dasduina, kombiniramo s S3 kako bi mijenjali filtere prema tablici dolje
S3 – PIN6 Dasduina, 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      */
/* techsupport@e-radionica.com                                               */
/*                                                                           */
/*                                                                           */
/* 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);
}