Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino Kleurwaarneming Tutorial – TCS230 TCS3200 Kleursensor

In deze Arduino-zelfstudie leren we hoe we kleuren kunnen detecteren met behulp van Arduino en de TCS230 / TCS3200-kleursensor. Je kunt de volgende video bekijken of de schriftelijke tutorial hieronder lezen voor meer details.

Hoe de TCS230/TCS3200-kleurensensor werkt

De TCS230 detecteert gekleurd licht met behulp van 8 x 8 fotodiodes. Vervolgens worden met behulp van een stroom-naar-frequentie-omzetter de meetwaarden van de fotodiodes omgezet in een blokgolf met een frequentie die recht evenredig is met de lichtintensiteit. Ten slotte kunnen we met behulp van het Arduino-bord de blokgolfuitvoer lezen en de resultaten voor de kleur krijgen.

Als we de sensor van dichterbij bekijken, kunnen we zien hoe deze verschillende kleuren detecteert. De fotodiodes hebben drie verschillende kleurfilters. Zestien van hen hebben rode filters, nog eens 16 hebben groene filters, nog eens 16 hebben blauwe filters en de andere 16 fotodiodes zijn helder zonder filters.

Elke 16 fotodiodes zijn parallel geschakeld, dus met behulp van de twee besturingspinnen S2 en S3 kunnen we selecteren welke van hen zal worden gelezen. Dus als we bijvoorbeeld rode kleur willen detecteren, kunnen we gewoon de 16 roodgefilterde fotodiodes gebruiken door de twee pinnen in te stellen op een laag logisch niveau volgens de tabel.

De sensor heeft nog twee stuurpennen, S0 en S1 die worden gebruikt voor het schalen van de uitgangsfrequentie. De frequentie kan worden geschaald naar drie verschillende vooraf ingestelde waarden van 100 %, 20 % of 2%. Met deze frequentieschaalfunctie kan de output van de sensor worden geoptimaliseerd voor verschillende frequentietellers of microcontrollers.

Nu zijn we klaar om verder te gaan en de TCS230-sensor op het Arduino-bord aan te sluiten. Hier zijn de circuitschema's.

U kunt de benodigde componenten voor deze Arduino-tutorial vinden via de onderstaande links:

  • TCS230 TCS3200 kleurensensor…….
  • Arduino-bord …………………………
  • Broodplank en springdraden ……… 
  •  

TCS230-broncode kleursensor

Beschrijving: Eerst moeten we de pinnen definiëren waarmee de sensor is verbonden en een variabele definiëren voor het lezen van de frequentie. In de setup-sectie moeten we de vier besturingspinnen definiëren als uitgangen en de sensoruitgang als een Arduino-ingang. Hier moeten we ook de frequentieschaling instellen, voor dit voorbeeld zal ik deze op 20% zetten en de seriële communicatie starten om de resultaten in de seriële monitor weer te geven.

In het lusgedeelte beginnen we met het lezen van de rode gefilterde fotodiodes. Daartoe zullen we de twee stuurpennen S2 en S3 op laag logisch niveau zetten. Vervolgens gebruiken we de functie "pulseIn()" om de uitgangsfrequentie te lezen en deze in de variabele "frequentie" te plaatsen. Met behulp van de functie Serial.print() zullen we het resultaat op de seriële monitor afdrukken. Dezelfde procedure geldt voor de twee andere kleuren, we hoeven alleen de controlepinnen aan te passen voor de juiste kleur.

/*     Arduino Color Sensing Tutorial
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
 
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

int frequency = 0;

void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);
  
  // Setting frequency-scaling to 20%
  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
  
  Serial.begin(9600);
}

void loop() {
  // Setting red filtered photodiodes to be read
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  // Printing the value on the serial monitor
  Serial.print("R= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(100);

  // Setting Green filtered photodiodes to be read
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  // Printing the value on the serial monitor
  Serial.print("G= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(100);

  // Setting Blue filtered photodiodes to be read
  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  // Printing the value on the serial monitor
  Serial.print("B= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.println("  ");
  delay(100);
}Code language: Arduino (arduino)

Als we nu de seriële monitor uitvoeren, krijgen we enkele waarden. Deze waarden zijn afhankelijk van de geselecteerde frequentieschaal en van de omgevingsverlichting.

Merk hier op dat drie waarden verschillen vanwege de verschillende gevoeligheid van elk fotodiodetype, zoals blijkt uit het spectrale responsiviteitsdiagram van de fotodiode uit het gegevensblad van de sensor.

Laten we echter nu eens kijken hoe de waarden reageren wanneer we verschillende kleuren voor de sensor brengen. Dus als we bijvoorbeeld rode kleur brengen, zal de beginwaarde dalen, in mijn geval van ongeveer 70 tot ongeveer 25.

Dus als we nu de gedetecteerde kleuren willen weergeven met het RGB-model met waarden van 0 tot 255, zullen we de functie map() gebruiken om de waarden in kaart te brengen of om te zetten naar de waarden van 0 tot 255.

//Remaping the value of the frequency to the RGB Model of 0 to 255
  frequency = map(frequency, 25,70,255,0);

De waarde van 70 wordt toegewezen aan 0 en de waarde van 25 aan 255. Dezelfde procedure geldt voor de twee andere kleuren.

Dit is de uiteindelijke broncode voor dit voorbeeld:

/*     Arduino Color Sensing Tutorial
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
 
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

int frequency = 0;

void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);
  
  // Setting frequency-scaling to 20%
  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
  
  Serial.begin(9600);
}

void loop() {
  // Setting red filtered photodiodes to be read
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  //Remaping the value of the frequency to the RGB Model of 0 to 255
  frequency = map(frequency, 25,72,255,0);
  // Printing the value on the serial monitor
  Serial.print("R= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(100);

  // Setting Green filtered photodiodes to be read
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  //Remaping the value of the frequency to the RGB Model of 0 to 255
  frequency = map(frequency, 30,90,255,0);
  // Printing the value on the serial monitor
  Serial.print("G= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(100);

  // Setting Blue filtered photodiodes to be read
  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  //Remaping the value of the frequency to the RGB Model of 0 to 255
  frequency = map(frequency, 25,70,255,0);
  // Printing the value on the serial monitor
  Serial.print("B= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.println("  ");
  delay(100);
}Code language: Arduino (arduino)

Merk op dat de kleuren niet zo nauwkeurig zijn, maar ze zijn nog steeds goed genoeg voor eenvoudige projecten. Als een ander voorbeeld van de TCS230-kleurensensor in mijn volgende video zullen we leren hoe we een Arduino Automatic Color Sorting Machine kunnen maken.

Stel gerust een vraag in de opmerkingen hieronder en vergeet niet mijn verzameling Arduino-projecten te bekijken.


Productieproces

  1. Raspberry Pi-lichtsensor:een eenvoudige LDR-zelfstudie
  2. Arduino RFID Lock-zelfstudie
  3. CO2-monitoring met K30-sensor
  4. Hoe lang ben je?
  5. Capacitieve vingerafdruksensor met een Arduino of ESP8266
  6. Arduino Cloud Sensor Tower
  7. Arduino RGB-kleurenmixer
  8. Arduino kleurenmixer
  9. Muziekkleur
  10. Tutorial Arduino-vingerafdruksensor
  11. Arduino-zelfstudie 01:Aan de slag