Oefeningen basis 1

Maak een schakeling waarbij met een schuifregister (74HCT595) een 8-bit looplicht gemaakt wordt. Maak het programma zo kort en efficiënt mogelijk.

 

Oefeningen basis 2

Breid oefening 1 uit naar 16 bit met behulp van een extra schuifregister.

Oefeningen gevorderd 1

Maak een schakeling waarbij de stand van een potentiometer op een analoge ingang wordt gelezen, en geef afhankelijk van de waarde een patroon weer op een schuifregister-ledbar.

0-127         : 1 LED
128-255       : 2 LED
256-383       : 3 LED
384-511       : 4 LED
512-639       : 5 LED
640-767       : 6 LED
768-895       : 7 LED
896-1023      : 8 LED

Maak ook dit programma zo kort en efficiënt mogelijk.

Oefeningen gevorderd 2

Maak een universeel programma waarbij de ledbar op het schuifregister een sequentie van patronen doorloopt die gedefinieerd zijn in een array.

De patronen moeten kunnen worden aangepast door enkel de inhoud van de array te wijzigen. Verwerking van de patronen in de array moet automatisch gebeuren.

De snelheid waarmee de patronen na elkaar op de ledbar verschijnen moet kunnen worden ingesteld met een potentiometer.

Opmerkingen

Wanneer je met aparte bits aan de slag moet gaan kun je natuurlijk gebruik maken van de logische functies, maar er bestaan ook een aantal functies voor bitmanipulatie zoals bitRead(), bitWrite(), bitSet() en bitClear().

Meer info over deze functies is te vinden op www.arduino.cc

 

Labo 2

Oefeningen basis 1: analoge waarden lezen

Maak een schakeling waarbij de waarde op een potentiometer ingelezen wordt, en stuur de waarde naar de PC via seriële communicatie.

Gebruik de analogRead() instructie om een analoge waarde te lezen.

vragen

  • kan men op elke pin van de Leonardo een analoge spanning inlezen? Indien niet, op welke dan wel?
  • Tussen welke spanningen mag de in te lezen spanning liggen?
  • Welke waarden krijgt men terug in het programma?
  • Uitgaande van een voedingsspanning van 5V, met welke waarde moet ik gelezen waarde vermenigvuldigen om de werkelijke spanning te bekomen?
  • Uitgaande van een voedingsspanning van 5V, met welke spanning komt een waarde = 255 overeen?

Oefeningen basis 2: analoge waarden schrijven

Maak een programma waarbij een LED langzaam van gedoofd naar volle sterkte gaat, en terug naar gedoofd.

Gebruik de analogWrite() instructie om een analoge waarde op de pin te zetten.

vragen

  • Kan men naar elke pin van de Arduino een analoge spanning sturen?
  • Wordt op de pin echt een analoge spanning aangeboden?
  • Verloopt het dimmen lineair? Hoe zou dat komen?
  • Wat is de maximale spanning die men op een pin kan plaatsen?
  • Welke spanning zal er op de pin staan wanneer ik de waarde 128 gebruik in een analogWrite?
  • Hoe kan men de bekomen spanning stabieler maken?
  • Wat als de analoge pin meer dan 40mA moet leveren aan de aan te sturen schakeling?

Oefeningen basis 3:

Maak een dimmer waarbij de potentiometer de LED regelt. Plaats ook hier een weerstand in serie met potentiometer.

Oefeningen basis 4:

Voeg een schakelaar toe aan vorige schakeling en pas het programma aan zodat de gedimde led ook in- en uitgeschakeld kan worden.

Oefeningen basis 5:

Gebruik een LDR is serie met een weerstand om een lichtmeting te doen, en laat de led meer oplichten naarmate het donkerder wordt.

Oefeningen basis 6:

Maak een nachtlamp, die een LED zal inschakelen zodra het donker(der) wordt, maar na een minuut de LED terug zal uitschakelen.

Oefeningen gevorderd 1:

Gebruik de TMP36GT9Z om de temperatuur uit te lezen, en stuur deze naar de PC.
Gebruik de RGB-LED om een toestand aan te duiden:

  • Rood: temperatuur is te hoog (>30°C)
  • Groen:temperauur is OK
  • Blauw:temperatuur is te laag (<25°C)

Oefeningen gevorderd 2:

Maak de temperatuur zichtbaar op het dual 7-segment display.

 

communiceren met de Arduino

Het programmeren van de Arduino gebeurt via een USB->serieel omzetter die ingebouwd zit in het systeem. Datzelfde kanaal kunnen we in het programma gebruiken om communicatie tot stand te brengen tussen de Arduino en de aangesloten PC/laptop.

Het gebruik is super eenvoudig. Het begint met het initialiseren van het Serial-object in de setup() functie. De enige parameter die moet meegegeven worden is de baudrate (zie theorie). Een veelgebruikte baudrate is 9600, maar we kunnen gaan tot 115200. De initialisatie gebeurt dus als volgt:

Serial.begin(115200);

Daarna kan in de loop-functie gebruik worden gemaakt van het Serial-object om bijvoorbeeld via de instructie

Serial.println("Hello World");

de tekst "hello world" naar de PC/laptop te sturen.

Uiteraard kunnen ook waarden van variabelen geprint worden, en kan zelfs gebruik gemaakt worden van een extra parameter om de waarde in een bepaald formaat weer te geven.

Zo zal

Serial.println(100,HEX);

de waarde 100 (decimaal) in hexadecimale vorm doorsturen via het serieel kanaal.

hoe te zien?

Hoe kunnen we op de PC/laptop zien wat de Arduino ons stuurt? Dat kan via het terminal venster van de Arduino software. Rechtsboven staat een knop met een vergrootglas. Wanneer je daarop klikt opent het terminalvenster, en wordt verbinding gemaakt met dezelfde seriële poort als deze die ingesteld staat om mee te programmeren.


 

In dit venster zal de tekst die door de Arduino gestuurd wordt zichtbaar worden in het grote venster. In de bovenste invoerregel kan tekst geplaatst worden. Wanneer men op de knop "verzenden" drukt zal deze tekst door de PC/laptop naar de Arduino gezonden worden. Ook voor het lezen van data heeft het Serial-object een aantal functies.

opgelet!

communiceren kost tijd! Kort door de bocht gerekend kunnen we aan een baudrate van 115200 baud 11520 karakters/seconde doorsturen. Dat wil zeggen dat een simpele boodschap als "Hello World" dat uit 11 karakters bestaat, zal aangevuld worden met een carriage return en een linefeed karakter (nieuwe regel en naar het begin van de regel opschuiven) waardoor het totaal te verzenden bytes op 13 komt. Dit zal dus minstens 13/11520 = 1,128ms tijd in beslag nemen, waardoor de timing van het ganse programma gewijzigd wordt.

Hou dus altijd rekening met de vertraging door communicatie.

Meer info en voorbeelden over het Serial-object vind je uiteraard op https://www.arduino.cc/en/Reference/Serial
 

artikel under construction

Deze pagina wordt nog aangevuld.

Oplossing looplicht

Voor deze oefening bestaan verschillende oplossingen. Hier volgt één van de meest eenvoudige.

De toepassing die hier gedemonstreerd wordt is dat je binnen een lus de waarde van de teller kunt gebruiken als variabele om op een elegante manier code te schrijven.

de setup

In de setup moeten we pinnen 3 tot 10 als output definiëren. We kunnen dit door 8 regels na elkaar met elke keer de pinMode instructie, maar dit is ook met een for-loop op te lossen.

void setup() {
  for(int i=3; i<=10;i++) {
    pinMode(i,OUTPUT);
  }
}

We initialiseren de teller op 3, en laten hem lopen tot en met 10. Voor elk van deze waarden voeren we een pinMode instructie uit, waarbij i de te configureren pin is.

Op dezelfde manier laten we nu de opeenvolgende leds aan- en uitgaan.

void loop() {
  for(int i=3; i<=10;i++) {
    digitalWrite(i,HIGH);
    delay(250);
    digitalWrite(i,LOW);
  }
}

De delay(250) zorgt voor een vertraging van 250ms, waardoor het looplicht 4 stappen per seconde neemt, en de gevraagde 4Hz frequentie bereikt wordt.

Een simulatie kun je vinden via deze link.