Hopp til innhold
Fagartikkel

RGB-sensor

En RGB-sensor er en allsidig sensor som gir Arduino-prosjekter evnen til å oppfatte farger og lysintensitet. Utforsk hvordan slike sensorer kan brukes til å skape innovative løsninger.

Beskrivelse

RGB-sensoren har fått navnet sitt fordi den leser fargene rødt, grønt og blått. Forkortinga RGB viser til første bokstavene i hver av de tre fargene.

RGB-sensoren består av lysfølsomme fotodioder som hver for seg oppfatter rødt, grønt og blått lys, og som kombinerer informasjonen for å bestemme en fargesammensetning. Denne informasjonen kan brukes til å identifisere og klassifisere farger i ulike omgivelser.

Sensorene varierer i nøyaktighet og funksjonalitet. Enkelte sensorer kan til og med skille mellom forskjellige nyanser av en farge.

Bruksområder

RGB-sensorer har et bredt av bruksområder. I industrien benyttes de til fargegjenkjenning i produksjonslinjer, blant annet til å sortere produkter etter farge eller kvalitet. To eksempler:

  • I matindustrien kan sensorene brukes til å sortere frukt og grønnsaker etter modenhet og kvalitet. På denne måten kan en få pakking og distribusjon.

  • I tekstil- og klesindustrien sikrer bruk av RGB-sensorer at fargene på tekstiler er like gjennom hele produksjonsprosessen. Eventuelle fargeavvik kan fanges opp tidlig, noe som gir mindre feilproduksjon og lavere kostnader totalt.

Lysdesignere kan bruke RGB-sensorer til dynamiske belysningsløsninger som tilpasser seg omgivelsene. Sensorene kan også brukes i for eksempel kunstinstallasjoner, spillkontrollere eller som en del av et smarthussystem.

Forslag til bruk

Fargegjenkjenning

Lag et Arduino-prosjekt som skiller mellom forskjellige farger, og som reagerer med forskjellige handlinger basert på registrert farge.

Dynamisk belysning

Bygg en belysningsenhet med RGB-lys som tilpasser seg lyset i omgivelsene ved å endre fargetone og lysstyrke basert på informasjon fra en RGB-sensor.

Fargesortering

Lag en sorteringsmaskin som bruker en RGB-sensor og styrte aktuatorer til å sortere objekter basert på fargen deres.

Hovedtyper

Vi skiller mellom tre hovedtyper RGB-sensorer ut fra typen signaler de sender fra seg: analoge signaler, digitale signaler og frekvenssignaler.

En analog sensor sender ut ei analog spenning basert på lysstyrken den registrerer. Dette er den enkleste versjonen av RGB-sensorer, og den er ikke så mye brukt i moderne industri fordi den ikke er veldig nøyaktig. Likevel er den fin å bruke til hobbyprosjekter og i opplæring.

En digital sensor sender ut digitale signaler som beskriver intensiteten til hver farge. Et eksempel på en slik RGB-sensor er ISL29125. De digitale RGB-sensorene fungerer i hovedsak på samme måten som analoge sensorer, men på en digital sensor blir de analoge signalene omdanna til digitale signaler ved hjelp av en mikrokontroller som er plassert på selve sensoren.

Den tredje sensortypen er også digital, men den sender ut et digitalt firkantsignal (square wave) med en frekvens som varierer etter intensiteten til den aktuelle fargen. TCS230 er en slik type sensor.

Funksjonsprinsipp

En analog RGB-sensor fungerer ved å registrere intensiteten av rødt, grønt og blått lys. Den består vanligvis av tre lysfølsomme elementer (fotodioder).

Fotodiodene er som oftest belagt med en film eller et filter som kun slipper gjennom lys av enten rød, grønn eller blå farge. Når lys treffer sensoren, registrerer hver av de tre fotodiodene sin spesifikke farge og produserer en elektrisk spenning som varierer ut fra fargeintensitet eller -mengde.

Disse elektriske signalene leses av en mikrokontroller, for eksempel en Arduino, gjennom analoge innganger. Deretter kan mikrokontrolleren behandle disse verdiene for å tolke hvilken farge sensoren registrerer.

Dette gjøres vanligvis ved å kombinere de tre fargeverdiene til én enkelt fargekode, eller ved å sammenlikne verdiene med forhåndsdefinerte terskler for å identifisere bestemte farger. På denne måten kan RGB-sensoren gi informasjon om fargen på et objekt eller om lysforholdene i et gitt miljø, og denne informasjonen kan deretter brukes til ulike formål.

Ulik nøyaktighet

Digitale sensorer kan ha mange flere fotodioder enn bare tre. Ofte har de 64 dioder fordelt på fargene rødt, grønt, blått og blankt. Disse sensorene er da mer nøyaktige og har en spesialtilpassa mikrokontroller som omdanner analoge signaler til digitale signaler på selve sensoren.

Billige sensorer er ikke alltid så nøyaktige, og avlesningene kan lett påvirkes av lyset i omgivelsene. Det kan derfor være smart å lese fargen i et rom der omgivelseslyset ikke endrer seg. Til enkle prosjekter er billige sensorer uansett fortsatt gode nok.

Eksempel på oppbygging og funksjon: digital RGB-sensor TCS230

TCS230 er en mye brukt RGB-sensor for tilkopling til Arduino og er en digital variant med innebygd mikroprosessor.

Oppbygning

TCS230 registrerer fargelys ved hjelp av et panel med 64 fotodioder i et kvadratisk mønster med 8 dioder i høyden og 8 i bredden. Ved hjelp av en strøm-til-frekvens-omformer konverteres avlesningene fra fotodiodene til ei firkantbølge med en frekvens som er direkte proporsjonal med lysintensiteten. Arduinoen kan da lese dette frekvenssignalet og angi hvilken farge som lyser på sensoren.

Fargeanalyse

Fotodiodene i TCS230 har tre forskjellige fargefiltre. 16 av diodene har røde filtre, 16 har grønne filtre og 16 har blå filtre. De siste 16 fotodiodene er blanke og uten filtre.

Hver serie på 16 fotodioder er kopla parallelt, og ved hjelp av sensorens kontrollpinner S2 og S3 kan du velge hvilken serie som skal leses. Vil du for eksempel oppdage rød farge, kan du sette de to pinnene til lavt logisk nivå, i henhold til tabellen. Da leses bare de 16 rødfiltrerte fotodiodene.

Sensoren har ytterligere to kontrollpinner, S0 og S1. De brukes til å skalere utgangsfrekvensen. Frekvensen kan skaleres til tre forskjellige forhåndsinnstilte verdier,
100 %, 20 % eller 2 %. Denne frekvensskaleringsfunksjonen gjør at sensorutgangen kan optimaliseres for forskjellige frekvenstellere eller mikrokontrollere.

Kopling

  • VCC og GND: strømforsyning

  • S0, S1, S2, S3: kontrollpinner for å velge følsomhetsområde og type fotodiode som skal aktiveres

  • OE: Output Enable (for å aktivere/deaktivere utgangen)

  • OUT: frekvensutgang der det frekvensbaserte signalet leses av

Programmering

For å lage et program som skal benytte en slik fargesensor, må du først definere pinnene som sensoren er kopla til, og definere en variabel for å lese frekvensen. I oppsettdelen må du definere de fire kontrollpinnene som utganger og sensorutgangen som en Arduino-inngang. Du må også sette frekvensskaleringa. Her kan du sette den til 20 % og starte seriell kommunikasjon for å vise resultatene i Serial Monitor.

I loop-delen begynner du med å lese de rødfiltrerte fotodiodene. Det gjør du ved å sette de to kontrollpinnene S2 og S3 til lavt logisk nivå. Deretter bruker du pulseIn()-funksjonen til å lese utgangsfrekvensen og sette den inn i variabelen frekvens. Ved hjelp av Serial.print()-funksjonen skriver Arduinoen ut resultatet på den serielle skjermen. Den samme prosedyren gjelder for de to andre fargene, du trenger bare å justere kontrollpinnene for ønska farge.

Tabellen under viser hvordan ei avlesning i seriell monitor kan se ut. Arduinoen leser hvor mye lys som treffer hver av de røde, grønne og blå fotodiodene, og angir dette som en tallverdi. Verdiene i linje 3 viser at sensoren leser kun rød farge.

Eksempel på avlesning i seriell monitor

Linje

Rødt

Grønt

Blått

1R = 77G = 97B = 79
2R = 70G = 96B = 78
3R = 255G = 0B = 0

Det fins ulike simulatorer på nett som du kan bruke til å lese ut tallverdi for en farge eller til å generere en farge ut fra tallverdier.

Verdiene for rødt, grønt og blått i rad 1 og 2 varierer noe fordi følsomheten i ulike fotodiodetyper kan variere. De tekniske dataene om følsomhet og presisjon finner du i databladet til sensoren.

Eksempelkode

#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 fotodioder med RØDT filter

digitalWrite(S2,LOW);

digitalWrite(S3,LOW);

// Les frekvensen til datasignalet

frequency = pulseIn(sensorOut, LOW);

// Skriv verdi i serial monitor

Serial.print("R= ");//Skriv fargenavn

Serial.print(frequency);//Skriv frekvensverdi for RØDt

Serial.print(" ");

delay(100);

// Aktiver lesing av fotodioder 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 fargenavn

Serial.print(frequency);//Skriv frekvensverdi for GRØNT

Serial.print(" ");

delay(100);

// Aktiver lesing av fotodioder 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 fargenavn

Serial.print(frequency);//Skriv frekvensverdi for BLÅTT

Serial.println(" ");

delay(100);

}

Elektrisk tilkopling

Vanligvis kopler du en RGB-sensor til Arduino ved å bruke tre analoge innganger som leser verdier fra de røde, grønne og blå lysfølsomme elementene. Pass på å bruke riktige motstander for å begrense strømstyrken og beskytte sensoren. Koplingene kan variere fra sensormodell til sensormodell, derfor er det viktig å følge dokumentasjonen fra produsenten.

Illustrasjonen under viser et eksempel på hvordan en digital frekvensbasert RGB-sensor av typen TCS230 kan kobles til en Arduino Mega.

Programmering

Når du vil programmere en Arduino til å lese signaler fra en RGB-sensor, må du vite om sensoren sender analoge eller digitale signaler. Dette avgjør om du skal benytte analoge eller digitale pinner på Arduinoen. I kode-eksemplene under er det brukt analoge pinner (A0, A1 og A2 for henholdsvis rødt, grønt og blått).

Arduinoen leser deretter de analoge verdiene fra hver av de tre pinnene og sender dem til den serielle monitoren, med en pause på 500 millisekunder mellom hver avlesning. Pass på å velge riktig COM-port og baud rate (9600) i den serielle monitoren i Arduino IDE for å se resultatene.

Eksempelkoder for analog RGB-sensor

De to eksemplene nedenfor viser deg enkle Arduino-koder som leser verdier fra en analog RGB-sensor og sender dem til den serielle monitoren.

Eksempel 1

Her får du ei Arduino-kodeskisse som leser verdier fra de enkelte fotodiodene på RGB-sensorer og sender dem til den serielle monitoren. Vi får da se hvor stor andel lyset har av hver enkelt farge:

// Definerer pinnene til RGB-sensoren

const int pinR = A0; // Rød

const int pinG = A1; // Grønn

const int pinB = A2; // Blå

void setup() {

// Åpner serieporten med baud rate 9600

Serial.begin(9600);

}

void loop() {

// Leser analoge verdier fra RGB-sensoren

int rValue = analogRead(pinR);

int gValue = analogRead(pinG);

int bValue = analogRead(pinB);

// Skriver verdier til den serielle monitoren

Serial.print("Rød: ");

Serial.print(rValue);

Serial.print(" Grønn: ");

Serial.print(gValue);

Serial.print(" Blå: ");

Serial.println(bValue);

// Venter litt før neste avlesning

delay(500);

}


Eksempel 2

Denne koden leser analoge verdier fra de tre tilkoplingene til RGB-sensoren og sender dem til serieporten for overvåking på datamaskinen.

int pinR = A0; // Rød tilkobling

int pinG = A1; // Grønn tilkobling

int pinB = A2; // Blå tilkobling

void setup() {

Serial.begin(9600);

}

void loop() {

int r = analogRead(pinR);

int g = analogRead(pinG);

int b = analogRead(pinB);

Serial.print("Rød: ");

Serial.print(r);

Serial.print(" Grønn: ");

Serial.print(g);

Serial.print(" Blå: ");

Serial.println(b);

delay(500);

}

Kontrollspørsmål

Velg riktig svaralternativ.

Relatert innhold

Fagstoff
Additiv fargeblanding - RGB

Additiv fargeblanding skapes ved å legge sammen lysfarger. Dette brukes til skjermfarger og i lyssetting. RGB står for grunnfargene: rød, grønn og blå.

Oppgaver og aktiviteter
RGB-dioder

I RGB-dioder er tre dioder satt sammen til en enhet, noe som gir oss spennende fargevalg.

CC BY-SA 4.0Skrevet av Roger Rosmo.
Sist faglig oppdatert 19.04.2024