Ein RGB-sensor er ein allsidig sensor som gir Arduino-prosjekt evna til å oppfatte fargar og lysintensitet. Utforsk korleis slike sensorar kan brukast til å skape innovative løysingar.
Beskriving
RGB-sensoren har fått namnet sitt fordi han les fargane raudt, grønt og blått. Forkortinga RGB viser til dei første bokstavane i kvar av dei tre fargane.
RGB-sensoren består av lysfølsame fotodiodar som kvar for seg oppfattar raudt, grønt og blått lys, og som kombinerer informasjonen for å bestemme ei fargesamansetning. Denne informasjonen kan brukast til å identifisere og klassifisere fargar i ulike omgivnader.
Sensorane varierer i nøyaktigheit og funksjonalitet. Enkelte sensorar kan til og med skilje mellom ulike nyansar av ein farge.
Bruksområde
RGB-sensorar har eit breitt spekter av bruksområde. I industrien blir dei nytta til fargeattkjenning i produksjonslinjer, mellom anna til å sortere produkt etter farge eller kvalitet. To døme:
I matindustrien kan sensorane brukast til å sortere frukt og grønsaker etter modnad og kvalitet. På denne måten kan ein få optimalisert pakking og distribusjon.
I tekstil- og kledeindustrien sikrar bruk av RGB-sensorar at fargane på tekstil er like gjennom heile produksjonsprosessen. Eventuelle fargeavvik kan fangast opp tidleg, noko som gir mindre feilproduksjon og lågare kostnader totalt.
Lysdesignarar kan bruke RGB-sensorar til dynamiske lysløysingar som tilpassar seg omgivnadene. Sensorane kan også brukast i til dømes kunstinstallasjonar, spelkontrollarar eller som ein del av eit smarthussystem.
Forslag til bruk
Fargeattkjenning
Lag eit Arduino-prosjekt som skil mellom ulike fargar, og som reagerer med ulike handlingar basert på registrert farge.
Dynamisk lys
Bygg ei lyseining med RGB-lys som tilpassar seg lyset i omgivnadene ved å forandre fargetone og lysstyrke basert på informasjon frå ein RGB-sensor.
Fargesortering
Lag ei sorteringsmaskin som bruker ein RGB-sensor og styrte aktuatorar til å sortere objekt basert på fargen deira.
Hovudtypar
Vi skil mellom tre hovudtypar RGB-sensorar ut frå typen signal dei sender frå seg: analoge signal, digitale signal og frekvenssignal.
Ein analog sensor sender ut ei analog spenning basert på lysstyrken han registrerer. Dette er den enklaste versjonen av RGB-sensorar, og han er ikkje så mykje brukt i moderne industri fordi han ikkje er veldig nøyaktig. Likevel er den fin å bruke til hobbyprosjekt og i opplæring.
Ein digital sensor sender ut digitale signal som beskriv intensiteten til kvar farge. Eit døme på ein slik RGB-sensor er ISL29125. Dei digitale RGB-sensorane fungerer i hovudsak på same måten som analoge sensorar, men på ein digital sensor blir dei analoge signala omdanna til digitale signal ved hjelp av ein mikrokontrollar som er plassert på sjølve sensoren.
Den tredje sensortypen er også digital, men han sender ut eit digitalt firkantsignal (square wave) med ein frekvens som varierer etter intensiteten til den aktuelle fargen. TCS230 er ein slik type sensor.
Funksjonsprinsipp
Ein analog RGB-sensor fungerer ved å registrere intensiteten av raudt, grønt og blått lys. Han består vanlegvis av tre lysfølsame element (fotodiodar).
Fotodiodane er som oftast belagde med ein film eller eit filter som berre slepp gjennom lys av anten raud, grøn eller blå farge. Når lys treffer sensoren, registrerer kvar av dei tre fotodiodane den spesifikke fargen sin og produserer ei elektrisk spenning som varierer ut frå fargeintensitet eller -mengde.
Desse elektriske signala blir lesne av ein mikrokontrollar, til dømes ein Arduino, gjennom analoge inngangar. Deretter kan mikrokontrollaren behandle desse verdiane for å tolke kva farge sensoren registrerer.
Dette blir til vanleg gjort ved å kombinere dei tre fargeverdiane til éin enkelt fargekode, eller ved å samanlikne verdiane med førehandsdefinerte tersklar for å identifisere bestemde fargar. På denne måten kan RGB-sensoren gi informasjon om fargen på eit objekt eller om lysforholda i eit gitt miljø, og denne informasjonen kan deretter brukast til ulike formål.
Ulik nøyaktigheit
Digitale sensorar kan ha mange fleire fotodiodar enn berre tre. Ofte har dei 64 diodar fordelte på fargane raudt, grønt, blått og blankt. Desse sensorane er då meir nøyaktige og har ein spesialtilpassa mikrokontrollar som gjer om analoge signal til digitale signal på sjølve sensoren.
Billige sensorar er ikkje alltid så nøyaktige, og avlesingane kan lett påverkast av lyset i omgivnadene. Det kan derfor vere smart å lese fargen i eit rom der omgivnadslyset ikkje forandrar seg. Til enkle prosjekt er billige sensorar uansett framleis gode nok.
Døme på oppbygging og funksjon: digital RGB-sensor TCS230
TCS230 er ein mykje brukt RGB-sensor for tilkopling til Arduino og er ein digital variant med innebygd mikroprosessor.
Oppbygning
TCS230 registrerer fargelys ved hjelp av eit panel med 64 fotodiodar i eit kvadratisk mønster med 8 diodar i høgda og 8 i breidda. Ved hjelp av ein straum-til-frekvens-omformar blir avlesingane frå fotodiodane konverterte til ei firkantbølge med ein frekvens som er direkte proporsjonal med lysintensiteten. Arduinoen kan då lese dette frekvenssignalet og oppgi kva farge som lyser på sensoren.
Fargeanalyse
Fotodiodane i TCS230 har tre ulike fargefilter. 16 av diodane har raude filter, 16 har grøne filter og 16 har blå filter. Dei siste 16 fotodiodane er blanke og utan filter.
Kvar serie på 16 fotodiodar er kopla parallelt, og ved hjelp av kontrollpinnane til sensoren S2 og S3 kan du velje kva serie som skal lesast. Vil du til dømes oppdage raud farge, kan du sette dei to pinnane til lågt logisk nivå, i samsvar med tabellen. Då blir berre dei 16 raudfiltrerte fotodiodane lesne.
Sensoren har to kontrollpinnar til, S0 og S1. Dei blir brukte til å skalere utgangsfrekvensen. Frekvensen kan skalerast til tre ulike førehandsinnstilte verdiar, 100 %, 20 % eller 2 %. Denne frekvensskaleringsfunksjonen gjer at sensorutgangen kan optimaliserast for ulike frekvensteljarar eller mikrokontrollarar.
Kopling
VCC og GND: straumforsyning
S0, S1, S2, S3: kontrollpinnar for å velje sensibilitetsområde og type fotodiode som skal aktiverast
OE: Utputt Enable (for å aktivere/deaktivere utgangen)
OUT: frekvensutgang der det frekvensbaserte signalet blir lese av
Programmering
For å lage eit program som skal nytte ein slik fargesensor, må du først definere pinnane som sensoren er kopla til, og definere ein variabel for å lese frekvensen. I oppsettdelen må du definere dei fire kontrollpinnane som utgangar og sensorutgangen som ein Arduino-inngang. Du må òg sette frekvensskaleringa. Her kan du sette ho til 20 % og starte seriell kommunikasjon for å vise resultata i Serial Monitor.
I loop-delen begynner du med å lese dei raudfiltrerte fotodiodane. Det gjer du ved å sette dei to kontrollpinnane S2 og S3 til lågt logisk nivå. Deretter bruker du pulseIn()-funksjonen til å lese utgangsfrekvensen og setje han inn i variabelen frekvens. Ved hjelp av Serial.print()-funksjonen skriv Arduinoen ut resultatet på den serielle skjermen. Den same prosedyren gjeld for dei to andre fargane, du treng berre å justere kontrollpinnane for ønskt farge.
Tabellen under viser korleis ei avlesing i seriell monitor kan sjå ut. Arduinoen les kor mykje lys som treffer kvar av dei raude, grøne og blå fotodiodane, og oppgir dette som ein talverdi. Verdiane i linje 3 viser at sensoren les berre raud farge.
Døme på avlesing i seriell monitor
Linje
Raudt
Grønt
Blått
1
R = 77
G = 97
B = 79
2
R = 70
G = 96
B = 78
3
R = 255
G = 0
B = 0
Det finst ulike simulatorar på nett som du kan bruke til å lese ut talverdi for ein farge eller til å generere ein farge ut frå talverdiar.
Verdiane for raudt, grønt og blått i rad 1 og 2 varierer noko fordi sensibiliteten i ulike fotodiodetypar kan variere. Dei tekniske dataa om sensibilitet og presisjon finn du i databladet til sensoren.
Dømekode
#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);
// Sett frekvensskalering til 20 %
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
Serial.begin(9600);
}
void loop() {
// Aktiver lesing av fotodiodar med RAUDT filter
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Les frekvensen til datasignalet
frequency = pulseIn(sensorOut, LOW);
// Skriv verdi i serial monitor
Serial.print("R= ");//Skriv fargenamn
Serial.print(frequency);//Skriv frekvensverdi for RAUDT
Serial.print(" ");
delay(100);
// Aktiver lesing av fotodiodar med GRØNT filter
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Les frekvensen til datasignalet
frequency = pulseIn(sensorOut, LOW);
// Skriv verdi i serial monitor
Serial.print("G= ");//Skriv fargenamn
Serial.print(frequency);//Skriv frekvensverdi for GRØNT
Serial.print(" ");
delay(100);
// Aktiver lesing av fotodiodar med BLÅTT filter
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Les frekvensen til datasignalet
frequency = pulseIn(sensorOut, LOW);
// Skriv verdi i serial monitor
Serial.print("B= ");//Skriv fargenamn
Serial.print(frequency);//Skriv frekvensverdi for BLÅTT
Serial.println(" ");
delay(100);
}
Elektrisk tilkopling
Vanlegvis koplar du ein RGB-sensor til Arduino ved å bruke tre analoge inngangar som les verdiar frå dei raude, grøne og blåe lysfølsame elementa. Pass på å bruke rette motstandar for å avgrense straumstyrken og verne sensoren. Koplingane kan variere frå sensormodell til sensormodell, derfor er det viktig å følge dokumentasjonen frå produsenten.
Illustrasjonen under viser eit døme på korleis ein digital frekvensbasert RGB-sensor av typen TCS230 kan koplast til ein Arduino Mega.
Programmering
Når du vil programmere ein Arduino til å lese signal frå ein RGB-sensor, må du vite om sensoren sender analoge eller digitale signal. Dette avgjer om du skal nytte analoge eller digitale pinnar på Arduinoen. I kode-døma under er det brukt analoge pinnar (A0, A1 og A2 for høvesvis raudt, grønt og blått).
Arduinoen les deretter dei analoge verdiane frå kvar av dei tre pinnane og sender dei til den serielle monitoren, med ein pause på 500 millisekund mellom kvar avlesing. Pass på å velje rett COM-port og baud rate (9600) i den serielle monitoren i Arduino IDE for å sjå resultata.
Dømekodar for analog RGB-sensor
Dei to døma nedanfor viser deg enkle Arduino-kodar som les verdiar frå ein analog RGB-sensor og sender dei til den serielle monitoren.
Døme 1
Her får du ei Arduino-kodeskisse som les verdiar frå dei enkelte fotodiodane på RGB-sensorar og sender dei til den serielle monitoren. Vi får då sjå kor stor del lyset har av kvar enkelt farge:
// Definerer pinnane til RGB-sensoren
const int pinR = A0; // Raudt
const int pinG = A1; // Grønt
const int pinB = A2; // Blått
void setup() {
// Opnar serieporten med baud rate 9600
Serial.begin(9600);
}
void loop() {
// Les analoge verdiar frå RGB-sensoren
int rValue = analogRead(pinR);
int gValue = analogRead(pinG);
int bValue = analogRead(pinB);
// Skriv verdiar til den serielle monitoren
Serial.print("Raudt: ");
Serial.print(rValue);
Serial.print(" Grønt: ");
Serial.print(gValue);
Serial.print(" Blått: ");
Serial.println(bValue);
// Ventar litt før neste avlesing
delay(500);
}
Døme 2
Denne koden les analoge verdiar frå dei tre tilkoplingane til RGB-sensoren og sender dei til serieporten for overvaking på datamaskina.
Additiv fargeblanding skapast ved å leggje saman lysfargar. Dette brukast til skjermfargar og i lyssetjing. RGB står for grunnfargene raud, grøn og blå.