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

Objectkleuren detecteren met Arduino Nano en TCS3200-sensor

Onderdelen en benodigdheden

Arduino Nano R3 1
TCS3200 Kleurensensor Module 1
16x2 I2C LCD-scherm (wit op blauw) 1
Breadboard 1
Jumper-kabels Verschillende

Apps en online diensten

  • Arduino IDE - voor het programmeren van de Arduino

Over dit project

In deze tutorial laten we zien hoe je kleuren kunt uitlezen met een Arduino en de TCS3200-sensor. Het doel is om de kleur van een object te detecteren en deze weer te geven op een LCD-scherm. Dit project is onderdeel van een groter project: een robotarm die acties uitvoert op basis van de gekleurde objecten die hij detecteert.

Objectkleuren detecteren met Arduino Nano en TCS3200-sensor
Hoofdcomponenten van het project

Stap 1: Stuklijst (BoM)

De onderstaande links en prijzen zijn alleen ter indicatie:

  • Arduino Nano (VS$ 8,00)
  • TCS3200 Kleurensensor Module (VS$ 9,00)
  • I2C 1602 Seriële Blauwe Backlight LCD Module (VS$ 8,00)
  • Breadboard (VS$ 2,00)
  • Kabels

Stap 2: De TCS3200 Kleurensensor

Objectkleuren detecteren met Arduino Nano en TCS3200-sensor
TCS3200 kleurensensor module

Volgens de datasheet is de TCS3200 een programmeerbare kleur-licht-naar-frequentie converter die configureerbare silicium-fotodioden en een stroom-naar-frequentie converter combineert op een enkele monolithische CMOS geïntegreerde schakeling.

De uitgang is een blokgolf (50% duty cycle) met een frequentie recht evenredig aan de lichtintensiteit (bestraling). De full-scale uitgangsfrequentie kan worden geschaald door een van drie vooraf ingestelde waarden via twee controle-ingangspinnen (S0 en S1). Digitale in- en uitgangen staan directe interfacing met een microcontroller of andere logische schakelingen toe.

Objectkleuren detecteren met Arduino Nano en TCS3200-sensor
Pinout en fotodiode-indeling van de TCS3200

Output Enable (OE) zet de uitgang in de hoog-impedantie toestand voor het delen van een microcontroller-ingangslijn door meerdere eenheden. In de TCS3200 leest de licht-naar-frequentie converter een 8x8 array van fotodioden:

  • 16 fotodioden hebben blauwe filters
  • 16 fotodioden hebben groene filters
  • 16 fotodioden hebben rode filters
  • 16 fotodioden zijn helder (geen filters)

Pinnen S2 en S3 worden gebruikt om te selecteren welke groep fotodioden (rood, groen, blauw, helder) actief is. De fotodioden zijn 110 μm x 110 μm in grootte en liggen op 134-μm centers.

De OE (Enable) pin moet worden aangesloten op GND (LAAG).

De sensor is geencapsuleerd en moet worden gevoed met 2,7 tot 5,5 VDC. We gebruiken de 5V-uitgang van de Arduino om de sensor te voeden. Om de sensor correct te gebruiken, monteren we een kleine rubberen ring om de sensor te isoleren van zijdelings licht. Ik heb hiervoor lijm gebruikt.

Objectkleuren detecteren met Arduino Nano en TCS3200-sensor
Sensor met rubberen ring voor isolatie van zijdelings licht

Stap 3: Hardware aansluiten

Objectkleuren detecteren met Arduino Nano en TCS3200-sensor
Aansluitschema op breadboard

TCS3200 Sensor aansluiten:

  • S0 → Nano pin D4
  • S1 → Nano pin D5
  • S2 → Nano pin D6
  • S3 → Nano pin D7
  • OUT → Nano pin D8
  • EN → GND
  • VCC → +5V
  • GND → GND

I2C LCD 16x2 Serial Display aansluiten:

  • SDA → Nano pin A4
  • SCL → Nano pin A5

Plaats de Arduino Nano op het breadboard. Verbind de 5V-uitgang en GND van de Nano met beide voedingsrails.

Stap 4: De Arduino Code

Objectkleuren detecteren met Arduino Nano en TCS3200-sensor
Overzicht van de code structuur

Allereerst definiëren we de frequentieschaling zoals getoond in de tabel hierboven. Pinnen S0 en S1 worden hiervoor gebruikt. Het schalen van de uitgangsfrequentie is nuttig om de sensorwaarden te optimaliseren voor verschillende frequentietellers of microcontrollers. We zetten S0 en S1 beide op HIGH (100%):

digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);

Vervolgens selecteren we de kleur die door de fotodioden moet worden gelezen (Rood, Groen of Blauw) met de controle-pinnen S2 en S3. Omdat de fotodioden parallel zijn aangesloten, kun je door S2 en S3 in verschillende combinaties LAAG en HOOG te zetten, verschillende fotodioden selecteren zoals in de tabel getoond.

digitalWrite(s2, LOW); digitalWrite(s3, LOW);
red = pulseIn(outPin, LOW); // Rood component lezen

digitalWrite(s2, HIGH); digitalWrite(s3, HIGH);
grn = pulseIn(outPin, LOW); // Groen component lezen

digitalWrite(s2, LOW); digitalWrite(s3, HIGH);
blu = pulseIn(outPin, LOW); // Blauw component lezen

In de finale code lezen we elke RGB-component meerdere keren en nemen we het gemiddelde, zodat we fouten door slechte metingen minimaliseren.

Zodra we de drie componenten (RGB) hebben, moeten we bepalen welke kleur het is. Hiervoor kalibreer je het project vooraf. Je kunt een bekende gekleurde testkaart of object gebruiken en de drie gegenereerde componenten uitlezen.

Je kunt beginnen met mijn waardes, en de parameters aanpassen aan je omgevingslicht:

void getColor() {
  readRGB();
  if (red > 8 && red < 18 && grn > 9 && grn < 19 && blu > 8 && blu < 16)
    color = "WIT";
  else if (red > 80 && red < 125 && grn > 90 && grn < 125 && blu > 80 && blu < 125)
    color = "ZWART";
  else if (red > 12 && red < 30 && grn > 40 && grn < 70 && blu > 33 && blu < 70)
    color = "ROOD";
  else if (red > 50 && red < 95 && grn > 35 && grn < 70 && blu > 45 && blu < 85)
    color = "GROEN";
  else if (red > 10 && red < 20 && grn > 10 && grn < 25 && blu > 20 && blu < 38)
    color = "GEEL";
  else if (red > 65 && red < 125 && grn > 65 && grn < 115 && blu > 32 && blu < 65)
    color = "BLAUW";
  else
    color = "GEEN_KLEUR";
}

Zoals je ziet heb ik 6 kleuren vooraf gedefinieerd: wit, zwart, rood, groen, geel en blauw. Naarmate het omgevingslicht afneemt, neigen de parameterwaarden om hoger te worden.

In de loop() functie laat ik de metingen elke seconde op het LCD-scherm zien.

De complete code is te vinden op mijn GitHub.

Stap 5: Conclusie

Objectkleuren detecteren met Arduino Nano en TCS3200-sensor
Het werkende project

Zoals altijd hoop ik dat dit project anderen helpt om hun weg te vinden in de spannende wereld van electronica, robotica en IoT!

Bezoek mijn GitHub voor bijgewerkte bestanden: Color Detector

Voor meer projecten, bezoek mijn blog: MJRoBot.org

Groeten uit het zuiden van de wereld!

Tot de volgende tutorial!

Dank je,

Marcelo

Productieproces

  1. Bouw een indrukwekkend monitor Ambilight-systeem met Arduino
  2. Bouw een Klassiek Pong-spel op Arduino UNO met OLED-display – Stap-voor-stap Tutorial
  3. Arduino Audio Frequentie Detector – Meet de luidste geluidspieken met hoge gevoeligheid
  4. Bouw Je Eigen Arduino Tamagotchi: Een Digitale Huisdier DIY Project
  5. Slimme Draadloze Lichtschakelaar Controller: Arduino-gebaseerde Remote Switch Manipulator
  6. Arduino Boter-Kaas-Eieren met MAX7219 LED Matrix en Kartonnen Behuizing
  7. Slimme beweegactiverde waterpistool gebouwd met Arduino Nano
  8. Bouw een Betrouwbare Arduino Afteltimer met SparkFun 7‑Segment Display
  9. Arduino RGB LED Kleurmixer – Beginner-vriendelijk DIY-project
  10. Arduino Zonnebloem: Bouw een elektronische zon-volgende zonnebloem
  11. Bouw je eigen RC Porsche-auto met Arduino: Stap-voor-stap handleiding