Arduino kleurdetectie
Componenten en benodigdheden
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Apps en online services
![]() |
|
Over dit project

Project
Dit is een eenvoudige zelfstudie waarin we zullen onderzoeken hoe we kleuren kunnen lezen met Arduino en sensoren zoals de TCS 3200. Het idee is om een objectkleur te detecteren en deze op een LCD weer te geven. Dit project is een onderdeel van een groter project dat een robotarm zal zijn die een juiste actie selecteert op basis van de kleur van een object. Het bovenstaande blokschema toont de belangrijkste componenten.
De video hieronder laat zien hoe het uiteindelijke project werkt:
Stap 1:BoM
De onderstaande links en prijs zijn alleen ter referentie.
- Arduino Nano (US$ 8,00)
- TCS3200 kleurensensormodule (US$ 9,00)
- IIC/I2C/TWI 1602 seriële blauwe achtergrondverlichting LCD-module (US$ 8,00)
- Broodplankje (US$ 2,00)
- Kabels
Stap 2:De TSC 3200 kleurensensor

Zoals beschreven in het gegevensblad, is de TCS3200 een programmeerbare kleurenlicht-naar-frequentie-omzetter die configureerbare silicium-fotodiodes en een stroom-naar-frequentie-omzetter combineert op een enkele monolithische CMOS-geïntegreerde schakeling.
De output is een blokgolf (50% inschakelduur) met een frequentie die recht evenredig is met de lichtintensiteit (instraling). De uitgangsfrequentie op volledige schaal kan worden geschaald met een van de drie vooraf ingestelde waarden via twee besturingsingangspinnen (S0 en S1). Digitale ingangen en digitale uitgangen maken een directe interface naar een microcontroller of andere logische schakelingen mogelijk.

Uitgang inschakelen (OE) plaatst de uitgang in de staat met hoge impedantie voor het delen van meerdere eenheden van een microcontroller-ingangslijn. In de TCS3200 leest de licht-naar-frequentie-omzetter een reeks van 8 x 8 fotodiodes.
- Zestien fotodiodes hebben blauwe filters
- 16 fotodiodes hebben groene filters
- 16 fotodiodes hebben rode filters
- 16 fotodiodes zijn helder zonder filters.
Pinnen S2 en S3 worden gebruikt om te selecteren welke groep fotodiodes (rood, groen, blauw, helder) actief is. Fotodiodes zijn 110 m x 110 m groot en bevinden zich op 134 μm centra.
De OE (Enable) moet worden aangesloten op GND (LOW).
De sensor is ingekapseld en moet worden gevoed tussen 2,7 en 5,5 VDC. We zullen de 5V Arduino-uitgang gebruiken om de sensor van stroom te voorzien. Om de sensor goed te kunnen gebruiken, installeren we een kleine rubberen ring om de sensor te isoleren van zijdelings licht. Ik heb hete lijm gebruikt om het te repareren.

Stap 3:De HW aansluiten

Sluit de TSC3200-sensor aan zoals hieronder:
- S0 ==> Nano-pin D4
- S1 ==> Nano-pin D5
- S2 ==> Nano-pin D6
- S3 ==> Nano-pin D7
- OUT ==> Nano-pin D8
- NL ==> GND
- VCC ==> +5V
- GND ==> GND
Sluit het I2C LCD 2/16 seriële display aan:
- SDA ==> Nano-pin A4
- SCL ==> Nano-pin A5
Installeer de Arduino Nano op het BreadBoard. Sluit de Nano 5V-uitgang en GND aan op beide stroomrails.
Stap 4:De Arduino-code

Het eerste dat u moet definiëren, is de frequentieschaling zoals gedefinieerd in de bovenstaande tabel. Daarvoor worden pinnen S0 en S1 gebruikt. Het schalen van de uitgangsfrequentie is handig om de sensormetingen voor verschillende frequentietellers of microcontrollers te optimaliseren. We zetten S0 en S1, beide op HOOG (100%):
digitalWrite(s0,HIGH); digitalWrite(s1,HIGH);
Het volgende dat u moet doen, is de kleur selecteren die door de fotodiode moet worden gelezen (rood, groen of blauw), daarvoor gebruiken we de besturingspinnen S2 en S3. Omdat de fotodiodes parallel zijn aangesloten, kunt u door de S2 en S3 LAAG en HOOG in verschillende combinaties in te stellen, verschillende fotodiodes selecteren, zoals weergegeven in de bovenstaande tabel.
digitalWrite(s2, LAAG); digitalWrite(s3, LAAG); rood =pulseIn (outPin, LAAG); // ROOD component van kleur digitalWrite(s2, HIGH) lezen; digitalWrite(s3, HOOG); grn =pulseIn(outPin, LAAG); // GROENE component van kleur digitalWrite(s2, LOW) lezen; digitalWrite(s3, HOOG); blu =pulseIn (outPin, LAAG); // BLAUWE kleurcomponent lezen
Bij de laatste code zullen we een paar keer elk van de RGB-componenten lezen en een gemiddelde nemen, zodat we de fout kunnen verminderen als een van de metingen slecht is.
Zodra we de 3 componenten (RGB) hebben, moeten we bepalen welke kleur dat is. De manier om dit te doen om het project eerder te kalibreren. U kunt een bekend gekleurd testpapier of object gebruiken en de 3 gegenereerde componenten lezen.
Je kunt met de mijne beginnen en de parameters voor je lichtniveau wijzigen:
void getColor(){ readRGB(); if (rood> 8 &&rood <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) kleur ="WIT"; anders if (rood> 80 &&rood <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) kleur ="ZWART"; anders if (rood> 12 &&rood <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; anders if (rood> 50 &&rood <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="GROEN"; anders if (rood> 10 &&rood <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) kleur ="GEEL"; anders if (rood> 65 &&rood <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) kleur ="BLAUW"; anders kleur ="NO_COLOR";}
Zoals je hierboven kunt zien, heb ik vooraf 6 kleuren gedefinieerd:wit, zwart, rood, groen, geel en blauw. Naarmate het omgevingslicht afneemt, worden de parameters meestal hoger.
Binnen de lus(), definieer ik de display-uitlezingen op LCD elke 1 seconde.
De volledige code is te vinden op mijn GitHub.
Stap 5:Conclusie

Zoals altijd hoop ik dat dit project anderen kan helpen hun weg te vinden in de spannende wereld van elektronica, robotica en IoT!
Bezoek mijn GitHub voor bijgewerkte bestanden:Kleurdetector
Ga voor meer projecten naar mijn blog:MJRoBot.org
Saludos uit het zuiden van de wereld!
Tot ziens bij mijn volgende tutorial!
Bedankt,
Marcelo
Code
- Codefragment #2
- Codefragment #3
Codefragment #2Platte tekst
digitalWrite(s2, LAAG); digitalWrite(s3, LAAG); rood =pulseIn (outPin, LAAG); // ROOD component van kleur digitalWrite(s2, HIGH) lezen; digitalWrite(s3, HOOG); grn =pulseIn(outPin, LAAG); // GROENE component van kleur digitalWrite(s2, LOW) lezen; digitalWrite(s3, HOOG); blu =pulseIn (outPin, LAAG); // BLAUWE kleurcomponent lezen
Codefragment #3Platte tekst
ongeldig getColor(){ readRGB(); if (rood> 8 &&rood <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) kleur ="WIT"; anders if (rood> 80 &&rood <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) kleur ="ZWART"; anders if (rood> 12 &&rood <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; anders if (rood> 50 &&rood <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="GROEN"; anders if (rood> 10 &&rood <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) kleur ="GEEL"; anders if (rood> 65 &&rood <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) kleur ="BLAUW"; anders kleur ="NO_COLOR";}
Github
https://github.com/Mjrovai/Color-Detectorhttps://github.com/Mjrovai/Color-DetectorSchema's
Hw
https://github.com/Mjrovai/Color-Detector/blob/master/Color%20Detector.fzzProductieproces
- Maak Monitor Ambilight met Arduino
- Arduino Pong Game - OLED-scherm
- Audiofrequentiedetector
- Arduino Tamagotchi Clone - Digital Pet
- Draadloze lichtschakelaarmanipulator
- Tech-TicTacToe
- Bewegingssensor-waterpistool
- Arduino Countdown Timer
- Arduino RGB-kleurenmixer
- Arduino-zonnebloem:een elektronische zonnedanser
- RC Porsche Car (Arduino Project)