Sunteți pe pagina 1din 4

Proiect senzor de culoare TCS 230

https://howtomechatronics.com/tutorials/arduino/arduino-color-sensing-tutorial-tcs230-tcs3200-
color-sensor/

Tensiune de alimentare: 2.7V - 5.5V;


Consum curent: 3mA;
Modulul va genera la ieșire un semnal dreptunghiular cu o frecvență dependentă de culoare.

Modulul dispune de 4 led-uri de culori diferite ce pot fi folosite separat. Circuitul integrat
dispune si de un pin de enable. În momentul în care circuitul este în modul sleep, consumul
scade până la 15 µA.

Modulul TCS230 folosește o matrice de fotodiode. Acestea sunt elemente de circuit ce permit
trecerea curentului în prezența unei radiații luminoase de o anumită frecvență (culoarea este
dependentă de frecvență).

TCS230 conține o matrice de 8x8 fotodiode, folosind câte 16 diode ce se deschid în prezența
luminii roșu, 16 pentru albastru, 16 pentru verde și 16 pentru lumina albă (lumina alba se
obține combinând toate culorile).

O fotodiodă este pur și simplu un dispozitiv semiconductor care convertește lumina în curent.
Senzorul are:

16 fotodiode cu filtru roșu - sensibil la lungimea de undă roșie


16 fotodiode cu filtru verde - sensibil la lungimea de undă verde

16 fotodiode cu filtru albastru - sensibil la lungimea de undă albastră

16 fotodiode fără filtru

Alegerea selectivă a citirilor filtrului fotodiodă va permite să detectam intensitatea diferitelor


culori. Senzorul are un convertor de curent-frecvență care convertește citirile fotodiodelor
într-un val pătrat cu o frecvență care este proporțională cu intensitatea luminii culorii alese.

Această frecvență este apoi citită de Arduino - aceasta este prezentată în figura de mai jos.

Conectarea pinilor senzorului TCS230 cu placa Arduino Uno a fost făcută conform
specificațiilor tehnice indicate în manualul de utilizare al senzorului.

Frecvența de ieșire este controlată de două intrări logice, S0 și S1. Convertorul intern între
lumina și frecvență generează un tren de impulsuri cu impulsuri fixe.

Regiștrii de contorizare a scării de ieșire sunt șterși la următorul impuls al frecvenței


principale după orice trecerea liniilor S0, S1, S2, S3 și OE. Ieșirea este ridicată la următorul
impuls ulterior al frecvenței principale, începând o nouă perioadă validă.

Acest lucru minimizează întârzierea dintre o modificare pe intrare și noua perioadă de ieșire
rezultată.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3f,16,2);

int red = 0;
int green = 0;
int blue = 0;

void setup()
{
Serial.begin(9600);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, INPUT);
// Setam scalarea frecvenței la 20%:
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);

lcd.init();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
}

void loop()
{
digitalWrite(12, LOW);
digitalWrite(11, LOW);
red = pulseIn(10, digitalRead(10) == HIGH ? LOW : HIGH);
digitalWrite(11, HIGH);
blue = pulseIn(10, digitalRead(10) == HIGH ? LOW : HIGH);
digitalWrite(12, HIGH);
green = pulseIn(10, digitalRead(10) == HIGH ? LOW : HIGH);
Serial.println("Rosu = ");
Serial.println( red);
Serial.println("Verde = ");
Serial.println( green);
Serial.println("Albastru = ");
Serial.println( blue);
lcd.clear();
if (red < blue && red < green && red < 20)
{
Serial.println(" Culoarea Rosie");
lcd.print("Culoarea Rosie");
}

else if (blue < red && blue < green)


{
Serial.println(" Culoarea Albastra");
lcd.print("Culoarea Albastra");
}

else if (green < red && green < blue)


{
Serial.println(" Culoarea Verde");
lcd.print("Culoarea Verde");
}
delay(500);
}