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 kleurdetectie

Componenten en benodigdheden

Arduino Nano R3
× 1
Kleursensormodule Kleurherkenning
× 1
Adafruit Standaard LCD - 16x2 Wit op Blauw
× 1
Broodplank (algemeen)
× 1

Apps en online services

Arduino IDE

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-Detector

Schema's

Hw
https://github.com/Mjrovai/Color-Detector/blob/master/Color%20Detector.fzz

Productieproces

  1. Maak Monitor Ambilight met Arduino
  2. Arduino Pong Game - OLED-scherm
  3. Audiofrequentiedetector
  4. Arduino Tamagotchi Clone - Digital Pet
  5. Draadloze lichtschakelaarmanipulator
  6. Tech-TicTacToe
  7. Bewegingssensor-waterpistool
  8. Arduino Countdown Timer
  9. Arduino RGB-kleurenmixer
  10. Arduino-zonnebloem:een elektronische zonnedanser
  11. RC Porsche Car (Arduino Project)