dinsdag 28 mei 2013

Opdracht Arduino


 

Opdracht:


Ontwerp en realiseer een LED-lamp waarbij met drie drukknoppen de LED in stapjes van kleur verandert: meer groen, meer blauw, meer rood. Zorg voor een gebruikersvriendelijke bediening.

Analyseer het probleem


Om deze opdracht uit te kunnen voeren hebben we eerst uitgezocht hoe een RGB nou eigenlijk precies werkt. Hieronder in de afbeelding is te zien dat de RGB 4 pootjes heeft met verschillende lengtes. Het langste pootje is de afvoer van de RGB. Deze zorgt ervoor dat de stroom niet in het ledje blijft zitten. Het eerste pootje (nummer 1) geeft de blauwe kleur van het ledje, pootje nummer 3 zorgt voor een groene kleur en het laatste pootje geeft een blauwe kleur.

De kleuren zijn natuurlijk belangrijk voor het instellen van de arduino.

 

 

Ontwerp de hardware

Hieronder is het elektrisch schema van onze opstelling getekend.



Berekening LED:

U=5V

Imax= 20 mA = 0,02A

R= U/I = 250Ω

Eigenlijk heb je daar de weerstand met rood-groen-bruin voor nodig, maar wij hebben bij gebrek aan deze weerstanden de weerstanden rood-rood-bruin van 220 Ω gebruikt.

U = I*R

U = 0,02 * 220 = 4,4V

4,4/5 *255 = 224 à dat is de maximale analog write.

 

Realiseer de hardware




 


 


Ontwerp de software


 

Realiseer de software


Arduino Software:

/* Eind opdracht kleur - Arduino Jopke Diepenbroek en Caro Schuitema

*/

 

int redled = 11;

int greenled = 10;

int blueled = 9;

 

int redswitch = 2;

int greenswitch = 3;

int blueswitch = 6;

int resetswitch = 0;

 

int powerred = 0;

int powergreen = 0;

int powerblue = 0;

 

void setup()

{ 

  pinMode(redled, OUTPUT);

  pinMode(greenled, OUTPUT); 

  pinMode(blueled, OUTPUT); 

 

  pinMode(redswitch, INPUT);

  pinMode(greenswitch, INPUT); 

  pinMode(blueswitch, INPUT); 

}

 

void loop()

{ 

  int bstatered = digitalRead(redswitch);

  int bstategreen = digitalRead(greenswitch);

  int bstateblue = digitalRead(blueswitch);

 

  if (bstatered == HIGH) {

    if(powerred<200)

    {

      powerred = powerred+10;

    }

    else powerred = 0;

  }

 

  if (bstategreen == HIGH) {

    if(powergreen<200)

    {

      powergreen = powergreen+10;

    }

    else powergreen = 0;

  }

 

  if (bstateblue == HIGH) {

    if(powerblue<200)

    {

      powerblue = powerblue+10;

    }

    else powerblue = 0;

  }

 

  analogWrite(redled, powerred);

  analogWrite(greenled, powergreen);

  analogWrite(blueled, powerblue);

 delay(100);

 

}

 Upload en test

 

Debuggen:

Eerst hebben een bug gevonden in het opstellen van het feller worden van het lampje. In plaats van voor het opstellen van een variabele voor het feller worden hebben we een if en else opgesteld.

Daarna hebben we een fout gemaakt in het laatste gedeelte van de void loop, we hadden namelijk eerst gekozen voor een digitalWrite, maar hierbij gingen de ledjes alleen maar aan en werden ze niet feller wanneer je er vaker op drukte.

Van de test is een filmpje gemaakt dat hieronder te zien is.
 
 

 

Geen opmerkingen:

Een reactie posten