Se hvordan vi fikk værvarselet inn på lampen
Ved hjelp av åpne data fra YR.no og litt koding laget vi en kjekk værvarslingslampe med Arduino.
Øyvind N. Dahl / Shutterstock
RGB-lysdiode
I dette prosjektet skal vi bruke en såkalt RGB-lysdiode. RGB står for fargene rød, grønn og blå, fordi dette er en lysdiode som består av en rød, en grønn og en blå lysdiode i samme pakning. Ved å styre intensiteten til hver av de tre diodene, kan man blande farger og i teorien få hvilken som helst farge. Det første vi skal gjøre er å få RGB-dioden til å fungere.
Test av RGB-dioden
RGB-lysdiode. Foto: oomlout [CC BY-SA 2.0]/Wikimedia Commons
En lysdiode har to sider – anode og katode – og disse må kobles riktig for at lysdioden skal fungere. Anoden kobles til positiv spenning og katoden til jord, men med en motstand koblet imellom for å sørge for at ikke alt for mye strøm går igjennom dioden. RGB-dioden vi skal bruke, er en såkalt «common anode» diode. Det betyr at anodene fra de tre lysdiodene er koblet sammen.
For å styre RGB-dioden fra Arduinoen, skal vi bruke «PWM»-utganger. Disse utgangene er merket med «~» (tilde) på Arduinoen, og kan brukes til å gi ut pulser som vi kan styre lysintensiteten til diodene med.
En enkel måte å teste om vi har koblet opp riktig på, er å skru på en og en diode. Siden vi har koblet felles-anoden til 5 volt, så vil lysdiodene bare lyse når den andre pinnen er koblet til jord. For å koble en pinne til jord, må vi sette den «lav» i Arduinokoden. Vi lager derfor en enkel testkode hvor vi setter én og én pinne lav, samtidig som vi holder de andre høye. Dette burde gi oss et resultat hvor lysdioden først er rød, så grønn og til slutt blå. For å unngå at for mye strøm går igjennom lysdioden, bruker vi tre 100-ohms motstander.
Oppkobling av RGB-lysdiode til Arduino. Foto: Øyvind N. Dahl
int red_pin = 11;
int green_pin = 10;
int blue_pin = 9;
void setup() {
pinMode(green_pin, OUTPUT);
pinMode(blue_pin, OUTPUT);
pinMode(red_pin, OUTPUT);
}
void loop() {
digitalWrite(red_pin, LOW);
digitalWrite(green_pin, HIGH);
digitalWrite(blue_pin, HIGH);
delay(1000);
digitalWrite(red_pin, HIGH);
digitalWrite(green_pin, LOW);
digitalWrite(blue_pin, HIGH);
delay(1000);
digitalWrite(red_pin, HIGH);
digitalWrite(green_pin, HIGH);
digitalWrite(blue_pin, LOW);
delay(1000);
}
RGB light testBlanding av farger
Det neste vi skal gjøre er å teste ut å blande farger ved å styre lysintensiteten til hver farge i lysdioden. For å gjøre dette skal vi bruke funksjonen «analogWrite()», som sender ut pulser på en pinne. Denne funksjonen tar inn en verdi mellom 0 og 255 som bestemmer bredden på pulsene som sendes ut. Dersom vi bruker verdien 0 vil pinnen alltid være lav, med verdien 128 vil pinnen 50% av tiden være høy, og 50% av tiden være lav – og dersom vi bruker 255 vil pinnen alltid være høy. Så ved å bestemme verdien vi legger med «analogWrite»-funksjonen, vil vi kunne styre intensiteten til en farge i lysdioden.
Siden våre lysdioder er koblet slik at de er PÅ når pinnen er lav, og AV når pinnen er høy, så vil vi få høyest intensitet når vi kaller «analogWrite()» med verdien 0, og ikke noe lys med verdien 255. For å forenkle, lager vi metoden «setColor()» som vi kan bruke til å blande farger.
int red_pin = 11;
int green_pin = 10;
int blue_pin = 9;
void setup() {
pinMode(green_pin, OUTPUT);
pinMode(blue_pin, OUTPUT);
pinMode(red_pin, OUTPUT);
}
void loop() {
setColor(255, 0, 0);
delay(1000);
setColor(0, 255, 0);
delay(1000);
setColor(0, 0, 255);
delay(1000);
setColor(255, 0, 255);
delay(1000);
setColor(0, 255, 255);
delay(1000);
setColor(255, 255, 0);
delay(1000);
setColor(255, 255, 255);
delay(1000);
}
void setColor(int red, int green, int blue)
{
analogWrite(red_pin, 255 - red);
analogWrite(green_pin, 255 - green);
analogWrite(blue_pin, 255 - blue);
}