01: Cursus Arduino

Voor we ons op de eerste Arduino onderdeel storten, hebben we het volgende nodig:

  • Arduino (UNO)
  • USB kabeltjes
  • Arduino software

Arduino (UNO)

Wij gaan beginnen met de Arduino UNO.

Voor degen die sneller of meer willen zijn er ook andere Arduino variante, zoals Arduino Mega, Arduino nano, uit te proberen in deze cursus.

Je kunt zeer goedkope Arduino versies kopen, het is de vraag ben je ook goed koper uit. De prijs moet ergens vandaan komen.

Arduino UNO: Standaard (links) versus SMD (rechts)

Beide versies werken verder 100% identiek, maar zoals je in bovenstaande afbeelding kunt zien, is de microcontroller (een standaard Atmel ATMEGA328) in de SMD versie (rechts) stukken kleiner dan in de standaard (DIL) versie. In de kwaliteit zit hier niet veel verschil.

Plaatsen van het Arduino board

Wanneer je aan de slag gaat met de Arduino, zeker als je er spanning op zet via de voeding stekker of de USB gebruikt, is het zaak dat de Arduino op materiaal geplaatst staat welke niet stroom geleid.

USB Kabeltje

Voor een Arduino Uno hebben we een USB kabel nodig met een type A connector aan de ene kant en een type B connector aan de andere kant. Dit is een typisch kabeltje wat gebruikt wordt om USB printers of scanner aan te sluiten op de PC.

De nieuwere Arduino varianten willen weleens verkocht worden met een micro usb aansluiting

USB Kabeltje met een Type-A en Type-B aansluiting

Arduino Software

De benodigde Arduino software kun je gratis downloaden van de Arduino Website en is beschikbaar voor Windows, MacOS X en Linux (32- en 64-bit versies).
Merk op dat Linux Debian smaak ook sudo get install kunnen gebruiken om de Arduino software te installeren: Dit wil niet zeggen dat je de nieuwste versie krijgt maar wel een stabiele versie voor je linux bak.

sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y && sudo apt autoremove -y

sudo apt install arduino arduino-core

Na download en installatie van de software, start de Arduino applicatie – onder elke besturingssysteem ziet het er een klein beetje anders uit, maar de verschillen zijn minimaal.

Verbind nu de Arduino via de USB kabel met de laptop!

Merk op : Onder Windows moet je meermaals toestemming geven om drivers te installeren, bij de Mac en linux hoeft dat niet.

Arduino onder MacOS X, Linux en Windows

Windows gebruikers:

Als eerste moeten we de verbinding instellen.
Open het menu “Tools” “Serial Port” en kies de juiste “Com” poort (USB apparaat), dit hangt natuurlijk sterk af van jouw computer en de geschikte poort kan dus b.v. COM4 zijn. Tegenwoordig hebben de normale laptops/desktops geen COM poorten meer maar wel de zelfde manier van verbinding en wel een RS232 verbinding.

Vervolgens moeten we opgeven welk Arduino board we gebruiken.
Ga naar het menu “Tools” “Board” en selecteer jouw Arduino board, in mijn geval de “Arduino Uno“.

Linux gebuikers:

We moeten eerst de verbinding instellen.
Open het menu “Tools” “Serial Port” en selecteer de USB verbinding naar de Arduino (onder Ubuntu had ik /dev/ttyMCA0 , maar ook dit is weer verschillend per computer).

Hierna moet je het Arduino board kiezen.
Ga naar het menu “Tools” “Board” en kies jouw Arduino board, wat in mijn geval de “Arduino Uno” was.

MacOS X gebruikers:

Mac’s hebben geen com-poorten, dus net als onder Linux moeten we hier het juiste device voor de verbinding kiezen.
In het menu “Tools” “Port” kies je het juiste USB device. Zoek naar zoiets als (als je een Uno hebt): /dev/cu.usbmodem1421 (Arduino Uno) en selecteer het.

Ook onder MacOS X moeten we het board type kiezen in het “Tools” “Board” menu, in in mijn geval was dat dus de “Arduino Uno“.

Nu dat we dat allemaal hebben ingesteld, tijd voor ons eerste programma …

Mijn Eerste Arduino Project

Voor we beginnen: voor de Arduino noemt men een “programma” een Sketch en een Sketch is een programma geschreven in een Arduino programmeertaal.

Snelkoppelingen …

Een paar snelkoppeling die handig zijn, zie je hieronder.

Arduino Software – Handige snelkoppelingen

Handige Arduino Snelkoppelingen

Snelkoppeling Doel van de knop
A Verify – Code verificatie (of: compileer code)
B Upload – Compileer en Upload het programma naar de Arduino
C New – Maak een nieuwe Sketch
D Open – Open een bestaande Sketch
E Save – Sketch opslaan

Na het invoeren of wijzigen van code, kun je de “Verify” (A) knop gebruiken om fouten te vinden. In principe compileert deze functie jouw code en laat je eventuele fouten zien.
Om het programma op de Arduino te draaien, moet de gecompileerde code naar de Arduino gestuurd worden. Hiervoor gebruiken we de “Upload” knop (B) welke de code compileert en als alles goed ging verstuurd naar de Arduino. Je kunt dat dus zien als op de “Verify” knop drukken en vervolgens het uploaden naar de Arduino als een enkele klik.

De Sketch kun je in verschillende basis onderdelen opdelen.

Opmerkingen (Optioneel)

Het is een goede gewoonte om opmerkingen in jouw code te zetten. Het bespaard jou en anderen een hoop uitzoek werk als we de code willen lezen of veranderen.
Opmerkingen beginnen met twee schuine streepjes voorwaarts (//) en alles na deze twee karakters wordt als opmerking gezien.
Opmerkingen worden door de compiler genegeerd en maken het eind programma niet groter of kleiner, maar leesbaarheid wordt stukken beter.

Je kunt als alternatief een opmerking tussen ‘/*’ en ‘*/’ zetten – zelfs over meerdere regels.
Opmerking worden ook vaak gebruikt om snel even stukjes code uit te schakelen zonder dat je de code hoeft te verwijderen.

Eigenlijk zou je altijd commentaarregels moeten schrijven tussen de code. De beste gewoonte is dan ook dit gelijk aan te leren bij het beginnen van coden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Enkele regel opmerking

int led = 13; // opmerking aan het einde van de regel

// De volgende code doet niets omdat het een opmerking is
// int led = 14;

/* Dit is een opmerking blok */

/* Maar opmerking blokken
kunnen over meerdere
regels gaan */

/* Opmerking kunnen ook gebruikt worden om meerdere code regels uit te schakelen
int led = 13;
int MyVariable = 8;
*/

Hekje statements (optioneel)

Hash (Hekje, “#” of “Pound” zoals Amerikanen het noemen) statements zijn zogenaamde compiler directives (specifieke opdrachten voor de compiler) – welke we in ons eerste project niet gebruiken maar welke je in veel andere projecten tegen zult komen. De compiler is het programma welke jouw tekst (code) omzet in binair formaat zodat de microcontroller er mee overweg kan.

Merk op : Compiler directives hebben geen punt-komma (;) aan het einde van de regel, dit in tegenstelling tot normale C code.

We hebben compiler directives niet altijd nodig, maar dit zijn de twee meest gebruikte …

LIBRARY INCLUDES

#include <MijnFile.h>

Deze directive vertelt de compiler dat het een bestand met de naam “MijnFile.h” moet toevoegen aan jouw code. Dit is een zogenaamde C include bestand of library. Een Library of Include file bevatten vaak code welke vaak hergebruikt kan worden in andere Sketches. Vaak zijn libraries (bibliotheken) een verzameling samenhangende functies gericht op een bepaalde toepassing. Bijvoorbeeld om een strip met LEDjes aan te sturen, speciale wiskundige functies of bijvoorbeeld om een LCD schermpje aan te sturen.

CONSTANTEN

#define MijnConstante 6

Deze directive definieert een constante met de naam “MijnConstante” als de waarde “6”, welke de compiler eigenlijk de opdracht geeft om elk voorkomen van “MijnConstante” te vervangen door het nummer “6”.
Het doel van dit soort constanten is dat jouw code veel beter leesbaar wordt (slechts een nummer zegt niet veel) en het zorgt ervoor dat als je dit nummer moet veranderen dat je dit maar op 1 plaats hoeft te doen i.p.v. door de hele code te zoeken waar je het allemaal moet veranderen. Constanten worden vaak in het begin van de code gedefinieerd.

Definitie van globale variabelen (optioneel)

Buiten de functies die we zo meteen gaan bespreken, kunnen we zogenaamde “globale variabelen” definiëren. Dat wil zeggen: variabelen die gelezen en veranderd kunnen worden op welke locatie in de Sketch dan ook. Zo’n variabele kan dus ook benaderd worden in de functies setup() en loop() – dit in tegenstelling to de eerder genoemde constanten (#define) tijdens de afloop van het programma NIET kunnen veranderen.

In onderstaand voorbeeld definiëren we de variabele “MijnVariable”, welke een geheel nummer is (int = Integer = geheel nummer), met een initiële waarde van 8.

int MijnVariable = 8;

Functie: Setup()

Deze functie is verplicht in iedere Sketch die je voor de Arduino schrijft – het is dat deel van het programma dat initiële initialisatie stappen uitvoert voor het werkelijk “programma” gaat draaien. Hier kun je bijvoorbeeld definiëren dat een bepaalde pin een OUTPUT (uitgang) is.
De term “void” voor de functie naam is een standaard C kreet die aangeeft dat er geen waarde terug verwacht wordt.

1
2
3
void setup() {

}

Functie: Loop()

Ook deze functie is verplicht in iedere Sketch en is het deel dat blijft herhalen in de microcontroller – in tegen stelling tot een PC, blijft een microcontroller het programma aflopen tot je de stroom naar de microcontroller verwijdert.
In dit deel zul je zien dat we in ons eerste Arduino project een LEDje AAN en UIT schakelen.

1
2
3
void loop() {

}

Onze eerste Sketch

Merk op : dit voorbeeld kan in de Arduino software gevonden worden onder “Examples”.

In ons eerste Arduino projectje laten we een LEDje knipperen.
In ons voorbeeld kunnen we gebruik maken van een LED dat op de meeste Arduino boards gevonden kan worden: Het LEDje dat aan PIN 13 zit.
Je kunt er ook voor kiezen om een LED toe te voegen en dat laten we in de laatste stap zien.

De code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
Blink
Schakelt een LED 1 seconde aan, en dan 1 seconde uit, en blijft dit herhalen.

Dit voorbeeld is uit het public domain.
*/

// Pin 13 heeft een LED op de meeste Arduino boards.
// Geef het een naam:
int led = 13;

// de setup routine draait 1x als we de Arduino aanzetten of op Reset drukken:
void setup() {
// initialiseer de pin als digitale uitgang.
pinMode(led, OUTPUT);
}

// de loop routine blijft zich oneindig herhalen:
void loop() {
digitalWrite(led, HIGH); // schakel LED AAN (HIGH is het voltage level)
delay(1000); // wacht een seconde
digitalWrite(led, LOW); // schakel LED UIT door voltage op LOW te zetten
delay(1000); // wacht een seconde
}

Zoals je ziet, zowel setup() als loop() bestaan in deze Sketch.

Voor we een functie starten zien we de regel met int led = 13; welke een globale variabele definieert (zichtbaar in setup() en loop()) met de naam “led” en de initiële waard “13”. De waarde van deze variabele zou men later in setup() of loop() kunnen veranderen, maar in ons voorbeeld lezen we alleen maar de waarde uit en had een constante ook prima gewerkt (#define led 13).

In setup() zetten we pin 13 (de variable led) als OUTPUT (uitgang). Output hoeft niet alleen maar voor LEDs gebruikt te worden maar kan bijvoorbeeld gebruikt worden voor een zoemertje of bijvoorbeeld een servo motor, een LCD schermpje, etc. Dit in tegenstelling tot een INPUT (ingang) welke gebruikt kan worden voor een schakelaar, een licht sensor, etc.

Als de setup() functie is afgerond, zal de Arduino het “programma” in de loop() functie starten en blijven herhalen.

De volgende stappen vinden we in de loop:

Steps of our First Arduino Project

Code Actie
digitalWrite
(led, HIGH);
Zet pin 13 (led) op HIGH – zet +5V op de pin zodat de LED AAN gaat
delay(1000); Wacht tijd in milliseconden, hier 1 seconde (1000 milliseconden = 1
seconde)
digitalWrite
(led, LOW)
Zet pin 13 (led) op LOW – de voltage wordt nu 0V en het LED gaat UIT
delay(1000); Wacht tijd in milliseconden, hier 1 seconde (1000 milliseconden =
1 seconde)

Aanvulling: er wordt veel delay() gebruikt bij het coden van de Arduino. Het nadeel van delay() is dat het gehele programma wacht tot de delay() afgelopen is en dan verder gaat. Dit is niet handig als je wat complexere codes hebt. Later kom ik hier op terug.

OK nu dat we weten wat we kunnen verwachten, kun je de code handmatig intypen (zie hieronder een versie zonder opmerkingen) of je kunt het inladen omdat het bij de Arduino software onder “Examples” zit (“Files” “Example” “01.Basics” “Blink“):

1
2
3
4
5
6
7
8
9
10
11
12
int led = 13;

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

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

Als je even kijkt naar de eerder genoemde snelkoppelingen: na het invoeren van de code, klik op de “Upload” knop.

Als je geen rode foutmeldingen ziet in het zwarte veld onderin het Arduino Software venstertje, dan zul je zien dat het LEDje gaat knipperen …
(tijdens de upload knipperen twee ledjes kort, onder de LED die aan pin 13 zit)

Arduino Uno – Het LEDje dat aan pin 13 zit

Wat extra “Hardware” voor ons eerste Arduino Project

Nu kunnen we dit ook doen met een externe LED. De toepassing die ik hier laat zien is niet helemaal volgens de regels, maar het houdt alles eenvoudig en we hebben geen breadboard nodig.

Pas Op …!

Onder normale omstandigheden gebruiken we een extra weerstand (advies 330Ω) tussen het LEDje en de stroomvoorziening (pin 13), voor een kort testje kunnen we dat achterwege laten, maar neem dit zeker niet als een voorbeeld hoe het correct gedaan moet worden.
Zie het Hoe gebruik je een Breadboard artikel voor een correctere aansluiting van een LED.

Pak een LEDje en bestudeer het Arduino board. Vindt pin 13 (links bovenin in bovenstaande afbeelding) die als plus gaat functioneren. Je zult zien dat het pinnetje ernaast GND (Ground of the wel aarde) is. Simpel gezegd: de min.

Kijk vervolgens goed naar het LEDje dat je net gepakt hebt. Bepaalde de Kathode pin en plaats deze boven de GND pin. De andere pin, Anode, schuiven we vervolgens in het gaatje van pin 13.

LED pinout

Je kunt dit zelfs doen terwijl de microcontroller draait, maar het is een goede gewoonte om eerst de stroom uit te zetten (voeding loskoppelen).
Let er op dat we dit maar voor een korte tijd doen, we willen voorkomen dat het LEDje uitbrandt. Zoals je in onderstaande foto ziet: het LEDje brandt best fel.
Klik op de foto om een grotere afbeelding te zien zodat je de pinnetjes in detail kunt zien.

Arduino UNO met extra LED.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd.