2 tags edited
| link
    Bumped by Community user
    Bumped by Community user
    Bumped by Community user
    Bumped by Community user
    Bumped by Community user
    Bumped by Community user
    Bumped by Community user
    Bumped by Community user
    Bumped by Community user
    Bumped by Community user
    Bumped by Community user
    Bumped by Community user
    Post Migrated Here from electronics.stackexchange.com
1
source | link

TCS230 Low Pulse Length with Arduino

My son and I are attempting to connect a TCS230 Color Sensor to an Arduino Nano using the tutorial at TopTechBoy.com (http://www.toptechboy.com/arduino/lesson-15-super-cool-arduino-color-sensor-project/) as guidance.

Everything seems to be working except that the conversion from pulseIn to RGB used on TopTechBoy is expecting a maximum pulse count of 102,400. Instead I am receiving pulseIn readings with a maximum of 2000.

Our Wiring

S0 - GND
S1 - 5V OE - No Connection (Tried GND)
GND - GND
S2 - D8
S3 - D7
OUT - D4
VCC - 5V

Our Code:

int S2 = 8;
int S3 = 7;
int OUT = 4;

void setup() {

Serial.begin(9600);
pinMode (S2, OUTPUT);
pinMode (S3, OUTPUT);
pinMode (OUT, INPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  int red , green, blue; 

  red = getRed(); 
  Serial.print("Red : "); Serial.println(red); 
  Serial.println("**********************");
  Serial.println();

  blue = getBlue(); 
  Serial.print("Blue : "); Serial.println(blue); 
  Serial.println("**********************");
  Serial.println();

  green = getGreen(); 
  Serial.print("Green : "); Serial.println(green); 
  Serial.println("**********************");
  Serial.println();

  delay(3000);

}


int getRed(void){ return getColor(0, 0, 19000, 24000); }


int getGreen(void){return getColor(1, 1, 13600, 19200);}


int getBlue(void){return getColor (0, 1, 16400, 21600);}


int getColor(int s2Value, int s3Value , int typicalPulseWidth, int maxPulseWidth){

  long divideForScale = typicalPulseWidth / 255 ;

  digitalWrite(S2, s2Value); 
  digitalWrite(S3, s3Value);

  unsigned int pulseWidth = pulseIn(OUT,LOW);

  Serial.print("Pulse Width : "); Serial.println(pulseWidth);

  unsigned int rColor = pulseWidth / divideForScale ; //401.5686274509804
  Serial.print("Response Color - Inverted : "); Serial.println(rColor);

  rColor = 255 - rColor ; 
  Serial.print("Response Color - Final : "); Serial.println(rColor);

  delay(500);

  return rColor ; 

}

The pulses appear correct, just out of scale. Red items produce short Red pulses and so on.

I tried to correct for the shorter pulses by using the Typical Output Frequency (f0) found on page 4 of the data sheet. I'm not sure if this is the right use of this frequency output spec.

http://www.unihedron.com/projects/darksky/tcs230-e33.pdf

Lowering the max possible pulses per second from 100,400 to around 20,000 gave us a little more variation between RGB values, but still the output is nothing like the expected color.

Can anybody offer some insight as to why the TCS230 pulse count is far fewer than the TTB code expects and what can I do to fix either the pulse count or the scale? Kind regards.

Output from Measuring a Blue RFID Keyfob: divideForScale : 74 Pulse Width : 673 Response Color - Inverted : 9 Respponse Color - Final : 246 Red : 246 **********************

divideForScale : 64
Pulse Width : 376
Response Color - Inverted : 5
Respponse Color - Final : 250
Blue : 250
**********************

divideForScale : 53
Pulse Width : 737
Response Color - Inverted : 13
Respponse Color - Final : 242
Green : 242
**********************