Technologie klas 3: Een Arduino Licht Show!

Arduino licht show

De Arduino Lichtshow!

In dit project ga je bezig met een Arduino, knoppen en potmeters en maak je een eigen lichtshow! Dit is geen makkelijke opdracht, er komt van alles bij kijken. Je leert de hardware kennen en hoe je de verschillende onderdelen op elkaar aansluit. Ook leer je de software kennen, je programmeer de verschillende onderdelen zodat ze doen wat jij wilt. Hieronder staan de leerdoelen van dit project beschreven:

Leerdoelen, aan het einde van het project:

  • herkent de leerling de verschillende onderdelen op een Arduino en kan de leerling de functie van de onderdelen beschrijven
  • kan de leerling een breadboard gebruiken om snel elektronische onderdelen aan te sluiten op een Arduino
  • kan de leerling knoppen, potentio-meters en ledstrips aansluiten op, en aansturen met een Arduino
  • kan de leerling een vermogens-transistor gebruiken om de ledstrips aan te sturen met een aparte spanningsbron
  • kan de leerlingen de volgende elementen correct gebruiken in het programmeren van de Arduino:
    • variabelen: int en long
    • functies: void, setup en loop
    • if/else
    • for loops
    • digitalRead, digitalWrite, analogWrite

Hardware

De Arduino

Het breadboard

Snel werken met een Arduino doe je met een breadboard. Een breadboard is een klein stuk plastic met verschillende ingangen. De ingangen zijn met elkaar verbonden. Hierboven zie je groene vlakken. Alle gaten in hetzelfde vlak zijn met elkaar verbonden. Hieronder zie je verschillende voorbeelden waar onderdelen met elkaar verbonden zijn via een breadboard!

LED (strips)

Een lichtshow is niks zonder licht! Wij gaan gebruik maken van LED verlichting. Hierboven zie je aan de linkerkant hoe een standaard losse LED er uit ziet. Rechts zie je de symbolische weergave van een LED. In plaats van losse LED lichtjes zoals je hierboven zie, krijgen jullie een LED-strip. Dat zijn veel LED lichtjes naast elkaar.

Niet te veel stroom!

Een LED kan kapot, dit gebeurt bijvoorbeeld als er te veel stroom doorheen gaat. Om een LED te beschermen gebruik je een weerstand. Er zijn veel soorten weerstanden. Om uit te rekenen elke weerstand je nodig hebt gebruik je de volgende regel:

1 Volt = 50 Ω

Als je bijvoorbeeld een 9 Volt batterij wilt aansluiten op een LED, dan wil je een weerstand van 9 x 50 Ω. Dat is 450 Ω. Helaas bestaat die weerstand niet, dus we pakken de dichtsbijzijnde, dat is 470 Ω.

Rechts zie je hier een voorbeeld van.

Belangrijk:

Een LED heeft een + en - kant. Het is belangrijk dat je dit goed aansluit op de batterij of op de Arduino!

Knoppen

Een arduino kan veel dingen aansturen. Lampen, motoren en speakers bijvoorbeeld. Maar een Arduino kan ook juist informatie ontvangen. Uit bijvoorbeeld knoppen!

Hieronder staan een aantal knoppen die je op de Arduino kan aansluiten.

De pushbutton.

Dit kleine knopje wordt veel gebruikt met Arduino's. Bij het indrukken hoor je een duidelijke klik. Het is geen schakelaar die ingedrukt blijft wanneer je er niet meer op drukt.

Software

Een knipperend lampje (digitalWrite)

We beginnen met het aansluiten van 1 LED lampje op de Arduino. Hierboven zie je hoe de schakeling loopt van de Arduino (digitale poort 1), via een breadboard, met een weerstand (270 Ω) naar de LED en gaat vervolgens terug naar de GND van de Arduino.

De code.

int led = 0;

int wachten = 1000;

void setup(){
  pinMode(led, OUTPUT);
}

void loop(){
  digitalWrite(led, HIGH);
  delay(wachten);
  digitalWrite(led, LOW);
  delay(wachten);
}

De code die de LED laat knipperen staat hierboven geschreven. We gaan rustig langs elk onderdeel om te begrijpen wat er gebeurt.

Int en ;

De code begint met:

int led = 0;

int wachten = 1000;

Deze code maakt eigenlijk twee bakjes en schrijft op die bakjes een naam (led en wachten). In deze bakjes wordt een nummer gestopt (0 en 1000). Elke keer dat we een naam schrijven weet de Arduino dat het in het bakje moet kijken en het getal wat er in zit moet gebruiken. Deze getallen gaat de Arduino later gebruiken in de code!

Ook zie je na elke regel een ; staan. Dit teken (punt-komma) schrijf je na elke opdracht voor de Arduino. Zo weet de Arduino dat die regel klaar is en dat het naar de volgende regel kan.

void setup(){}

void setup(){
  pinMode(led, OUTPUT);
}

Elke Arduino code gebruikt void setup(){}. Deze code wordt 1 keer uitgevoerd als de Arduino wordt aangezet en komt maar 1 keer voor in de gehele code. Je ziet hier het volgende in staan:

pinMode(led, OUTPUT);

Omdat we een digitale pin gaan gebruiken op de Arduino moeten we bedenken wat die pin moet doen. De pin kan stroom geven (OUTPUT) of stroom ontvangen (INPUT). Maar niet beide. Omdat we een LED gaan aansturen zetten we de mode van de pin op OUTPUT en sluiten we de regel af met een. Ook wilt de Arduino weten welke pin wij bedoelen. Als je naar boven scrollt zie je dat de code begon met int led = 0;. De Arduino vervangt hier het woord 'led' met het getal 0.

void loop(){}

void loop(){
  digitalWrite(led, HIGH);
  delay(wachten);
  digitalWrite(led, LOW);
  delay(wachten);
}

Nu komt het echte programma in beeld. In de void loop(){} zet je de code neer die de Arduino eindeloos gaat herhalen. Wij willen dat de lamp aan gaat, en vervolgens weer uit gaat. Eerst zetten we de lamp aan:

digitalWrite(led, HIGH);

De Arduino herkent de code digitalWrite. We zeggen dat hij een digitale pin moet aan of uit moet zetten. Wij willen de pin aan zetten dus we schrijven HIGH. De Arduino wil natuurlijk weten ook welke pin dat moet zijn. Daarom staat er tussen haakjes eerst 'led'.

De code betekent dus letterlijk: zet pin 0 op HIGH (aan).

Nadat de lamp is aangezet laten we de Arduino 1 seconden wachten. Dat doen we met de volgende code:

delay(wachten);

Het woord delay betekent vertraging in het Engels. De Arduino wilt ook weten hoelang de wachttijd is. Helemaal boven in de code hebben we bepaald dat in het 'wachten' bakje het getal 1000 zit. De Arduino werkt heel snel. 1000 betekent 1 seconde! De Arduino wacht dus 1 seconde voor dat het de volgende regel code uitvoert.

digitalWrite(led, LOW);
delay(wachten);

Na het wachten moet de LED uitgezet worden. Dat doen we met code die we al eerder gebruikten, alleen gebruiken we nu LOW. Na het uitzetten wachten we weer 1 seconde.

Nu zijn alle 4 de regels code uitgevoerd, namelijk:

  1. Zet de lamp aan
  2. Wacht 1 seconde
  3. Zet de lamp uit
  4. Wacht 1 seconde

Nu begint de Arduino opnieuw met wat er in void loop(){} staat geschreven en begint het verhaal overnieuw.

2 Verkeerslichten

Je hebt in het vorige voorbeeld 1 lampje aangesloten en laten knipperen. Nu gaan we dat eens flink uitbreiden. Hierboven zie je 2 verkeerslichten. De bovenste lamp staat op groen, en de onderste staat op rood. Bij de bovenste gaat vervolgens groene uit en de oranje aan. Wanneer de bovenste lamp op rood springt gaat bij de onderste de rode lamp uit en de groene aan. De code om dit te laten werken vind je hieronder. Ook kan je op de afbeelding klikken en deze bewerken in TinkerCAD.

De code.

int rood1 = 13;
int oranje1 = 12;
int groen1 = 11;
int rood2 = 10;
int oranje2 = 9;
int groen2 = 8;

int wachten_lang = 5000;
int wachten_kort = 1500;

void setup(){
  pinMode(rood1, OUTPUT);
  pinMode(oranje1, OUTPUT);
  pinMode(groen1, OUTPUT);
  pinMode(rood2, OUTPUT);
  pinMode(oranje2, OUTPUT);
  pinMode(groen2, OUTPUT);
}

void loop(){
  digitalWrite(rood1, LOW);
  digitalWrite(oranje1, LOW);
  digitalWrite(groen1, HIGH);
  digitalWrite(rood2, HIGH);
  digitalWrite(oranje2, LOW);
  digitalWrite(groen2, LOW);


  delay(wachten_lang);

  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(rood2, HIGH);
  digitalWrite(oranje2, LOW);
  digitalWrite(groen2, LOW);

  delay(wachten_kort);

  digitalWrite(rood1, HIGH);
  digitalWrite(oranje1, LOW);
  digitalWrite(groen1, LOW);
  digitalWrite(rood2, LOW);
  digitalWrite(oranje2, LOW);
  digitalWrite(groen2, HIGH);

  delay(wachten_lang);

  digitalWrite(rood1, HIGH);
  digitalWrite(oranje1, LOW);
  digitalWrite(groen1, LOW);
  digitalWrite(rood2, LOW);
  digitalWrite(oranje2, HIGH);
  digitalWrite(groen2, LOW);

  delay(wachten_kort);

}

Controleren met if / else

Hierboven zie je weer een lampje knipperen. Maar de code die deze Arduino gebruikt is anders:

int led = 0;
int wachten = 500;

int waarde = 0;

void setup(){
  pinMode(led, OUTPUT);
}

void loop(){
  if(waarde == 0){
    digitalWrite(led, HIGH);
    delay(wachten);
    waarde = 1;
  }
  else{
    digitalWrite(led, LOW);
    delay(wachten);
    waarde = 0;
  }
}

De waarde controleren met if en else

Bovenin de code worden drie variablen (bakjes) aangemaakt, genaamd led, wachten en waarde. We gebruiken waarde om te controleren of een lamp aan of uit moet. Dat gebeurt in de loop met deze code:

if(waarde == 0){
  digitalWrite(led, HIGH);
  delay(wachten);
  waarde = 1;
}
else{
  digitalWrite(led, LOW);
  delay(wachten);
  waarde = 0;
}

Met de code if en else kan je een bakje controlleren. De eerste regel controleert of waarde gelijk is aan 0. Als dat zo is worden de volgende 3 regels uitgevoerd. Als dat niet zo is, dan worden de drie regels onder else uitgevoerd.

Willekeurig 3 lampjes aan en uit

https://www.tinkercad.com/things/dBUMRU9Lxs2

Besturen met een knop

We sluiten nu een knop aan op de Arduino. Het doel is om de lamp te laten branden wanneer de knop wordt ingedrukt. Laten we eerst kijken hoe de knop met de Arduino is verbonden:

De knop

Zoals je rechts ziet heeft de knop 4 aansluitingen. De aansluitingen zijn als volgt:

  • Linksonder: Aangesloten op de 5V uitgang van de Arduino
  • Rechtsboven: aangesloten op een Digitale Pin (in het voorbeeld hierboven gebruiken we pin 2)
  • Rechtsonder: Aangesloten, via een 10K weerstand, op de GND van de Arduino

De code:

int led = 0;
int wachten = 500;

int knop = 2;
int knop_waarde;

void setup(){
  pinMode(led, OUTPUT);
  pinMode(knop, INPUT);
}

void loop(){
  knop_waarde = digitalRead(knop);

  if(knop_waarde == 1){
    digitalWrite(led, HIGH);
    delay(wachten);
  }
  else{
    digitalWrite(led, LOW);
    delay(wachten);
  }
}

Uitleg van de code

We gaan niet alle stukken van de code bekijken. Veel regels zullen je inmiddels bekend voorkomen. Wel kijken we naar hoe de knop wordt bekeken door de Arduino.

Ten eerste hebben we een nieuw bakje, genaamd knop_waarde. Hierin gaan we de 'stand' van de knop bewaren.

Vervolgens schrijven we in de setup dat we de digitale pin als INPUT gaan gebruiken.

De knop uitlezen gebeurt met digitalRead.
Als de knop wordt ingedrukt krijg de Arduino een 1 binnen.
Als de knop niet ingedrukt wordt krijgt de Arduino een 0.

Deze regel: knop_waarde = digitalRead(knop); stopt dus een 1 of 0 in het bakje genaamd knopje_waarde.

Een for-loop

Soms wil je een nieuwe loop maken in de void loop. Dus iets wat een paar keer herhaalt en dan weer verder gaat. Dat kan met een for loop.

 

int aantal = 3;

void setup(){
  pinMode(0, OUTPUT);
}

void loop(){ 
  for(int i = 0; i < aantal; i++){
    digitalWrite(0, HIGH);
      delay(500);
      digitalWrite(0, LOW);
      delay(500);
  }
  for(int i = 0; i < 3; i++){
    lang();
  }
  for(int i = 0; i < 3; i++){
    kort();
  }
}

void kort(){
  digitalWrite(0, HIGH);
  delay(500);
  digitalWrite(0, LOW);
  delay(500);
}

void lang(){
  digitalWrite(0, HIGH);
  delay(1000);
  digitalWrite(0, LOW);
  delay(1000);
}

Opdrachten

Om te leren werken met de Arduino ga je verschillende oefeningen doen:

Omdat je op je chromebook geen programmas kan installeren gebruiken wij de website van edu.codebender.cc om de code te schrijven en te sturen naar je Arduino. Om deze website te gebruiken moet je ook een extensie voor Chrome installeren.

Maak van elk gemaakte les een foto en video en plaats deze op je Wix.

De afsluitende opdracht

De opdracht

Je sluit het Arduino project af met kleine opdrachten. Elke opdracht is een aantal punten waard. Om een opdracht correct in te leveren moet het aan een aantal voorwaarden voldoen:

  • De opdracht heeft in TinkerCAD de correcte naam en is gedeeld met de docent
  • Achter elke unieke regel code heb je met een opmerking ( // ) uitgelegd wat die regel code betekent

De opdrachten:

  • (1,5) 2 lampjes aansluiten op een Arduino met het gebruik van een breadboard (hoeven niet te knipperen)
  • (2) 2 lampjes een SOS signaal laten knipperen door middel van een Arduino en een breadboard
  • (2) 2 verkeerslichten (groen, rood, oranje) automatisch laten wisselen door middel van een Arduino en een breadboard
  • (1,5) 2 verkeerslichten aansturen met een knop door middel van een Arduino en een breadboard 
  • (2) meerdere lichten aansturen met een for-loop door middel van een Arduino en een breadboard
  • (1) Verbaas me!

Hoe lever je het in?

Het inleveren van de afsluitende opdrachten gaat op de volgende manier:

  • Per opdracht lever je een screenshot in en een bestand met de code
  • Geef deze 2 bestanden de volgende naam:
    • Voornaam_Achternaam_opdracht (bijvoorbeeld: Rogier_Jupijn_Verkeerslicht_Knop)
  • Voeg de bestanden aan een bericht toe via Magister en stuur deze naar mij (Jupijn)

Hoe je een screenshot en de code download wordt hieronder uitgelegd.

Screenshot.

Klik rechtsbovenin op 'share'.

Klik vervolgens op het download icoon.

Code.

Klik op het download icoon boven de code

  • Het arrangement Arduino licht show is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Auteur
    Techniek van ALC
    Laatst gewijzigd
    2019-03-26 16:20:09
    Licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding 4.0 Internationale licentie.

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld
  • Downloaden

    Het volledige arrangement is in de onderstaande formaten te downloaden.

    Metadata

    LTI

    Leeromgevingen die gebruik maken van LTI kunnen Wikiwijs arrangementen en toetsen afspelen en resultaten terugkoppelen. Hiervoor moet de leeromgeving wel bij Wikiwijs aangemeld zijn. Wil je gebruik maken van de LTI koppeling? Meld je aan via info@wikiwijs.nl met het verzoek om een LTI koppeling aan te gaan.

    Maak je al gebruik van LTI? Gebruik dan de onderstaande Launch URL’s.

    Arrangement

    IMSCC package

    Wil je de Launch URL’s niet los kopiëren, maar in één keer downloaden? Download dan de IMSCC package.

    Voor developers

    Wikiwijs lesmateriaal kan worden gebruikt in een externe leeromgeving. Er kunnen koppelingen worden gemaakt en het lesmateriaal kan op verschillende manieren worden geëxporteerd. Meer informatie hierover kun je vinden op onze Developers Wiki.