Met behulp van een RGB-LED te detecteren kleuren (4 / 6 stap)

Stap 4: Code de Arduino

Open de Arduino omgeving, en een nieuwe schets maken door te klikken op bestand - nieuw. Voor degenen die niet willen volgen, heb ik ook de code als een tekstbestand. Copy/Paste het in een nieuwe schets in Arduino, en u bent goed om te gaan.

Verklaringen

Het begin van een schets is waar wij onze verklaringen, dus typt u de volgende code in het venster van de omgeving.

/ / Definiëren colour sensor LED pinnen
int ledArray [] = {2,3,4};

Boole-waarde om te weten als het saldo is vastgesteld
Boole balanceSet = false;

plaats houders voor kleur gedetecteerd
int rood = 0;
int groen = 0;
int blauw = 0;

praalwagens te houden kleur arrays
zweven [colourArray] = {0,0,0};
zweven [whiteArray] = {0,0,0};
zweven [blackArray] = {0,0,0};

place holder voor gemiddelde
int avgRead;

' / /' is voorbehouden voor aangeduid met opmerkingen, dus u hoeft niet de tekst op de regels die met beginnen ' / /' voor de sketch om te werken.

De rest van het zijn een aantal namen die we geven aan sommige tijdelijke aanduidingen, alsmede de verklaringen voor wat voor soort gegevens bevatten.

Zoals u zien kunt, starten we door het opzetten van een matrix te houden van de pin-codes. Deze komen overeen met de pennen die op de verschillende kleur LEDs zijn aangesloten op de Arduino.

Volgende verklaart een Boole-waarde om te controleren of of niet balancing is verricht. Een Booleaanse waarde is iets dat geeft als waar of Onwaar resultaat.

We gaan op sommige houders van de plaats voor de waarden van de kleur, en sommige reeksen te gebruiken voor bewaartermijnen van de gegevens van de scan en het evenwicht van de gedetecteerde kleur te creëren.

Hoewel we nog niet klaar bent, ga je gang en sla uw schets. Geef het een naam die betekenis voor u, zoiets als coloursensor.pde misschien.

Setup

De volgende stap in het creëren van een Arduino schets is te schrijven van de setup-functie. Setup wordt uitgevoerd wanneer de Arduino eerst opstart, dus dit is waar we de Arduino vertellen wat hoe we willen gebruiken van de pinnen en instellen van andere functies die we zoals seriële communicatie wellicht.

Typ het volgende onder de code die u zojuist hebt ingevoerd.

ongeldig Setup {}

opstelling van de uitgangen voor de kleur sensor
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);

beginnen met seriële communicatie
Serial.begin(9600);

}

Niet veel aan dit onderdeel. Hier zijn we gewoon de Arduino vertellen dat we van plan over het gebruik van pin 2,3, en 4 als uitgangen. Dit is nodig als wij willen licht onze LEDs... en we doen, al was het maar heel kort.

Het volgende deel is te vertellen de Arduino die we gebruik maken van de seriële poort willen, en dat het moet worden geopend en gereed is voor communicatie op de baud-rate opgegeven (tussen haakjes).

Loop

De lus functie is meestal waar de magie gebeurt in een Arduino. Het is de code die over en weer wordt uitgevoerd zodra de Arduino is opgestart en vervolgens setup heeft gepasseerd. Zet de volgende beetje van code onder uw setup-functie.
ongeldig loop {}

checkBalance();
checkColour();
printColour();
}

Oke lijkt op het eerste gezicht het alsof er echt er niet veel. Maar deze zijn elke oproepen naar privébijeenkomsten. Voor sommige projecten vind ik dit soort aanpak werkt goed. Het maakt het gemakkelijker te lezen (denk ik) als elk blok van code is gescheiden met een herkenbare naam, en we kunnen zien wat de schets gaat doen in één oogopslag.

Controleer het saldo, zal het eerst vervolgens de kleur zal controleren, en vervolgens zal het de kleur op de seriële poort afdrukken, zodat we kunnen zien dat de waarden die het lezen.

Laten we verkennen de eerste prive-functie, checkBalance, en toe te voegen aan onze code. Typ het volgende onder uw lus functie.
nietig checkBalance() {}
Controleer als het evenwicht heeft zijn ingesteld, zoniet, instellen
if(balanceSet == false) {}
setBalance();
}
}

Zoals u zien kunt, als de waarde van de balanceSet (een Boole-waarde) is ingesteld op false, dan maakt het een aanroep naar een secundaire functie genaamd setBalance, waar we de witte en de zwarte balancing lezingen instellen. Dit zal alleen gebeuren wanneer u opwaarts naar de arduino de ene keer schoen.
nietig setBalance() {}
Stel wit balans in
delay(5000);                              vertraging gedurende vijf seconden, dit geeft ons de tijd om een witte monster voor onze sensor
Scan het witte monster.
Ga door elk licht, krijgen een lezing, de base lezen voor elke kleur rood, groen en blauw aan de witte matrix instellen
for (int i = 0; ik < = 2; i ++) {}
digitalWrite(ledArray[i],HIGH);
delay(100);
getReading(5);          getal is het getal van scans voor gemiddelde te nemen, deze hele functie is overbodig, een lezing werkt net zo goed.
whiteArray [i] = avgRead;
digitalWrite(ledArray[i],LOW);
delay(100);
}
scannen wit gedaan, zal nu het pulse blauw om u te vertellen dat het is tijd voor het monster zwart (of grijs).
Stel zwarte balans
delay(5000);              Wacht vijf seconden zodat we onze zwarte monster kunt plaatsen
Ga je gang en scannen, stelt de kleur waarden voor rood, groen en blauw wanneer blootgesteld aan zwart
for (int i = 0; ik < = 2; i ++) {}
digitalWrite(ledArray[i],HIGH);
delay(100);
getReading(5);

blackArray [i] = avgRead;
blackArray [i] = analogRead(2);
digitalWrite(ledArray[i],LOW);
delay(100);
}
Boole-waarde ingesteld, zodat we weten dat evenwicht is ingesteld
balanceSet = true;
delay(5000);     een andere 5 seconden vertraging te laten inhalen
}
Als u gemerkt, maakte we nog een oproep tot een functie getReading.  Dat recht zullen wij toevoegen nadat we in de checkColour functie gezet.

Zodra onze taakverdeling nummers hebben vastgesteld, gaan we op naar Lees ten slotte de kleur. De functie is in principe hetzelfde als setBalance,, met de toevoeging van de wiskunde dat de lezing balanceert. Laten we nu toevoegen '.
nietig checkColour() {}
for (int i = 0; ik < = 2; i ++) {}
digitalWrite(ledArray[i],HIGH);  beurt of de LED, rood, groen of blauw, afhankelijk van welke iteratie
delay(100);                      vertraging zodat stabalize-cd's, ze zijn traag
getReading(5);                  Neem een lezing echter vele malen
colourArray [i] = avgRead;        instellen van de huidige kleur in de array berekend als het gemiddelde lezen
zweven greyDiff = whiteArray [i] - blackArray [i];                    het hoogst mogelijke rendement minus de laagste retourneert de ruimte voor waarden tussen
colourArray [i] = (colourArray [i] - blackArray [i]) / (greyDiff) * 255; de lezing terug minus de laagste waarde, gedeeld door het mogelijke bereik van de 255 vermenigvuldigd met zal geven ons een waarde ongeveer tussen 0-255 vertegenwoordigen van de waarde voor de huidige reflectiviteit (voor de kleur die het is blootgesteld aan) van wat wordt gescand
digitalWrite(ledArray[i],LOW);   de huidige LED uitschakelen
delay(100);
}


}

We zullen ook moeten toevoegen onze functie getReading, anders onze schets hoeft niet echte waarden. Deze functie kan alleen ons gemiddelde hen uit te nemen van een paar lezingen. Dit zorgt voor een iets soepeler lezing.
void getReading (int keer) {}
int lezen;
int tally = 0;
Neem de lezing echter vele malen werd gevraagd en ze optellen
voor (int i = 0; ik < keer; i ++) {}
lezen = analogRead(0);
Tally = lezing + tally;
delay(10);
}
het gemiddelde berekenen en stel deze
avgRead = (tally) / times;
}

Nu hebben we een kleur lezen in onze kleur bedrijf array, alles wat we moeten doen is nu output naar het scherm. Vergeet niet dat wij seriële communicatie terug in de setup-functie setup, alles wat we moeten doen is nu de seriële poort gebruiken voor het verzenden van onze gegevens. De Arduino omgeving bevat een seriële monitor, die u toelaten zal om de gegevens te bekijken zoals deze wordt doorgegeven van de Arduino. Dus laten we Voeg de laatste functie aan de schets.
//prints de kleur in de array van kleur, in de volgende stap, wij sturen dit naar verwerking om te zien hoe goed de sensor werkt.
ongeldig printColour() {}
Serial.Print ("R =");
Serial.println(int(colourArray[0]));
Serial.Print ("G =");
Serial.println(int(colourArray[1]));
Serial.Print ("B =");
Serial.println(int(colourArray[2]));
delay(2000);
}

Dit zal printen enkele gegevens die er als volgt ziet
R = 231
G = 71
B = 0
dat zou het equivalent aan een rood-oranje kleur.   Ik heb deze schets super eenvoudig. U kunt aankleden zoals u goeddunkt. Het idee is om te tonen hoe te maken en gebruiken van de sensor, creatieve uitvoering is aan jou.

U kunt nu het bestand weer opslaan en uploaden naar de Arduino. Je Arduino moet beginnen lopen de sketch, de kleine lampjes flikkeren moeten worden.

De schets is erg basic. Ik heb het aangeboden als een bouwsteen en u tonen hoe te gebruiken van de sensor.

Gerelateerde Artikelen

Geketend mood light met behulp van krachtige RGB LED's

Geketend mood light met behulp van krachtige RGB LED's

ik heb gestart: dit project meer dan een jaar geleden en werken op het aan en uit sindsdien. Nu is het eindelijk gedaan.Het doel was om een mooi uitziende mood light voor mijn woonkamer, geïnspireerd door een standaard verlichting console een vriend
Met behulp van een RPi een RGB LED

Met behulp van een RPi een RGB LED

Als rahulkar vermeld in zijn tutorial, lijkt LED controle te zijn van de "Hello World" van elektronica. Het is gemakkelijk aan opstelling, leer je veel over de werking van elektronica, en in het einde, heb je een handig stukje hardware te pronke
Een LED dobbelsteen met behulp van een PIC 16F84 (of 16F88)

Een LED dobbelsteen met behulp van een PIC 16F84 (of 16F88)

Dit is een opnieuw afdrukken van een project dat ik een aantal jaren geleden maakte-ik was trawlvisserij het web, en ontdekte dat anderen had geboekt, dus heb ik besloten om de details hier op instructables.com - zodat anderen kunnen profiteren.Veel
Met behulp van een LED voor een lichtsensor

Met behulp van een LED voor een lichtsensor

tot voor kort, CdS (Cadmium Sulfide) foto-weerstanden zijn vaak gebruikt voor licht sensing toepassingen. Helaas, ze hebben problemen. Omdat cd's cellen cadmium een giftig zwaar metaal bevatten, presenteren ze een probleem van de verwijdering. Daardo
RGB LED Tutorial (met behulp van een Arduino) (RGBL)

RGB LED Tutorial (met behulp van een Arduino) (RGBL)

LED's zijn geweldig. Maar er een punt waar het opvlammen eenvoudigweg niet voldoende is bij elk project komt. Voor deze gevallen een RGB (rood, groen, blauw) is LED het antwoord.Elke kleur gloed met een RGB LED zult u kunnen tot uw hartje begeert.Bij
555 RGB Rainbow LED Driver (niet met behulp van een 4029)

555 RGB Rainbow LED Driver (niet met behulp van een 4029)

| A_Teacher |OK, is dus voor zover ik kan vertellen, dit een uniek merk Nieuw ontwerp.Alle ruimte Cadets bellen: Als een manier van motiveren mensen om het project te maken, ik ben momenteel weggeven een 3 maand Instructables Pro lidmaatschap aan de
Met behulp van een enkele RGB LED (of een LED-strip) om informatie te tonen: klok, thermometer en een rare communicator

Met behulp van een enkele RGB LED (of een LED-strip) om informatie te tonen: klok, thermometer en een rare communicator

Een van de eerste projecten die ik deed met een Arduino was een Christmas lights garland. In feite, was gemaakt van een eenvoudige RGB LED-strip snijd doormidden, zoals Arduino slechts 6 hardware PWM outputs heeft. Ik wilde niet het aan vertoning tri
Beheersing van een RGB LED met de HC-06 Bluetooth-Module met behulp van Android OS(Arduino)

Beheersing van een RGB LED met de HC-06 Bluetooth-Module met behulp van Android OS(Arduino)

Dit leerprogramma zal verklaren het proces van een Bluetooth-Module van de HC-06 verbinden met een Arduino en beheersen van de kleur van een RGB LED met behulp van de ArduDroid-app op het Android besturingssysteem. Deze instelling zal zeer waarschijn
Het maken van een RGB-LED kleur Slider met blote Paint

Het maken van een RGB-LED kleur Slider met blote Paint

In deze tutorial zullen we een fysieke RGB (rood, groen en blauw) LED (light emitting diode) kleur mixer met Blote geleidende Paintbouwen. Elke RGB LED heeft drie interne light emitting diodes (LED's) voor elk van de kleuren - rood, groen en blauw. V
Multi-Color LED Lamp met behulp van een 8-kanaals LED Controller v.3

Multi-Color LED Lamp met behulp van een 8-kanaals LED Controller v.3

ik wilde om te experimenteren met het gebruik van verschillende kleuren LEDs, dan de standaard RGB, Multi-Color om effecten te creëren in een functionele lamp.Deze lamp maakt gebruik van cyaan, Magenta, geel, roze, Aqua-groen, en blauw 5mm LED's same
Met behulp van een Dot Matrix LED met een Arduino en Shift Register

Met behulp van een Dot Matrix LED met een Arduino en Shift Register

de Siemens DLO7135 Dot matrix LED is een verbazingwekkend stukje opto-elektronica. Het is gefactureerd als een 5 x 7 Dot Matrix intelligente Display (r) met geheugen/Decoder/Driver. Samen met dat het geheugen, het heeft een 96-ASCII karakterdisplay s
Hoe maak je een enkele LED knipperen met behulp van een Arduino Uno Board

Hoe maak je een enkele LED knipperen met behulp van een Arduino Uno Board

Vandaag, we zullen worden ter illustratie van hoe maak je een enkele LED knipperen met behulp van een Arduino Uno-board. Door elke stap te volgen, zal je dit doel bereiken.U zal het volgende nodig:Een Arduino BoardBrood bordUSB-connectorkabelEEN LED3
LED licht met behulp van een Arduino

LED licht met behulp van een Arduino

Een Arduino is een open-source van de computerhardware, open-source software en microcontroller-gebaseerde kits voor het bouwen van digitale apparaten en interactieve objecten die kunnen voelen en aansturen van fysieke apparaten. Er zijn verschillend
5 x 4 LED weergave matrix met behulp van een Basic Stamp 2 (bs2) en Charlieplexing

5 x 4 LED weergave matrix met behulp van een Basic Stamp 2 (bs2) en Charlieplexing

hebben een Basic Stamp 2 en sommige extra LEDs rondhangen? Waarom niet spelen rond met het concept van charlieplexing en maak een uitvoer met behulp van slechts 5 pinnen.Voor dit instructable ik zal worden met behulp van de BS2e maar lid van de famil