Tutorial : RGB KA01

Bij de tutorial dat we een flowchart opstelde hebben we de flowchart voor een RGB sturing opgesteld. Bij deze moest er gekeken worden of het donker was, moest er een intensiteit ingesteld kunnen worden met een potentiometer en moet men de kleur kunnen kiezen met schakelaars. De KA EDU heeft maar een schakelaar dus bij deze realisatie gaan we gebruik maken van drukknoppen.

Omzetten van flowchart naar een programma.
Voor deze test heb je nodig :
1 Arduino Uno
1 STEM shield
1 RGB shield (KA01)

Niveau :
1e en 2de graad secundair (elektronica / engineering)

uitwerking :
Bij het RGB shield heb je geen keuze, je moet gebruik maken van pin 3,5 en 6 dit voor respectievelijk rood,groen en blauw. pin 3 is een rode led op het STEM shield, pin 5 is een groene led en pin 6 is de aansluiting voor servo. De LEDS mogen aangesloten blijven en een servo mag niet aangesloten worden.
De lichtsensor is aangesloten op A2
De potentiometer is aangesloten op A0
De drukknoppen die we gaan gebruiken zijn aangesloten op D12, D11 en D10

Alles wat we gaan gebruiken is nu bepaald dus we kunnen beginnen aan het gedeelte wat voor de setup geplaats moet worden en in de setup. Dit zal resulteren in volgende code.
int drukknop1 = 12;
int toestand1 = 0;
int drukknop2 = 11;
int toestand2 = 0;
int drukknop3 = 10;
int toestand3 = 0;
int rood = 3;
int groen = 5;
int blauw = 6;
int potentiometer = A0;
int lichtsensor = A2;

void setup() {
pinMode(drukknop1,INPUT);
pinMode(drukknop2,INPUT);
pinMode(drukknop3,INPUT);
pinMode(rood,OUTPUT);
pinMode(groen,OUTPUT);
pinMode(blauw,OUTPUT);
// voor analoge ingangen moet het niet expleciet vermeld worden dat het input is.
}

Dan moet je aan de code beginnen binnen loop, deze dient uiteraard afgeleid te worden uit de flowchart.
Om tijdens het programmeren zo min mogelijk problemen te hebben kan je best stukje bij beetje het programma opbouwen. Met andere woorden een klein stukje programmeren kijken of het werkt en zo beetje bij beetje aanvullen.

flowchart1

Het eerste stuk is het inlezen van de sensoren en kijken of er voldoende licht is. Je krijgt volgende code. Je zou moeten vaststellen dat er een rode LED brand als het donker is en geen enkele LED als er voldoende licht is. De vergelijking vergelijkt met 100 dus vanaf dat er een beetje licht valt op de sensor is het licht voldoende.

void loop() {
toestand1 = digitalRead(drukknop1);
toestand2 = digitalRead(drukknop2);
toestand3 = digitalRead(drukknop3);
int licht = analogRead(lichtsensor);
int intensiteit = (analogRead(potentiometer) / 4);
// het delen door 4 is omdat analogRead een getal geeft tussen 0 en 1024
// en omdat analogWrite een getal nodig heeft tussen 0 en 255.
if (licht > 100){
digitalWrite(rood,LOW);
digitalWrite(groen,LOW);
digitalWrite(blauw,LOW);
}
else {
digitalWrite(rood,HIGH); // enkel voor test.
}

Je weet nu dat het meten van het licht werkt dus we kunnen in plaats van de rode led te laten branden toevoegen om te kijken of rood mag branden en dan rood de juiste intensiteit te geven. Dit is wat we nu gaan doen. Eerst kijken we nog eens naar de flowchart. Daar zie je dat voor groen, rood en blauw het telksens dezelfde if else structuur is. Dit binnen de eerste else want het is pas nuttig om deze code uit te voeren als het donker is. Anders moeten de leds toch niet branden.

flowchart2

De laatste drie lijnen code van het voorbeeld worden nu verandert door volgende code.
else {
if(toestand1 == HIGH){
analogWrite(rood,intensiteit);
}
else {
analogWrite(rood,0);
}
if(toestand2 == HIGH){
analogWrite(groen,intensiteit);
}
else {
analogWrite(groen,0);
}
if(toestand3 == HIGH){
analogWrite(blauw,intensiteit);
}
else {
analogWrite(blauw,0);
}
}

Je zou nu bij het testen kunnen denken dat de schakeling niet werkt. Dit kan zijn omdat er teveel licht is want dan gaat er geen enkele uitgang actief zijn. Het kan ook doordat je potentiometer op 0 afgeregeld staat en dan gaat er ook geen LED branden. Voor de LEDS van een ledstrip te doen branden moet er ook nog eens voldoende voeding aanwezig zijn.

Doordat alle leds dezelfde intensiteit aannemen kan je niet alle kleuren vormen maar wel alle basiskleuren zoals je kan zien in de kleurencirkels.
RGB

Volgende les : Verdere uitleg van mogelijke controlestructuren

Bij de volgende les bespreken we de while en do while lus, deze lus hebben we tot nu toe niet gebruikt maar zal in de toekomst handig blijken.

Vorige les : Omzetten flowchart naar code (basis)

Deze tutorial die de link legt tussen flowchart en code is zeer belangrijk voor toekomstige projecten.

Post Author: admin

3 reacties op “Tutorial : RGB KA01

Geef een reactie