Arduino Zomerproject 2020
Op maandag 27 juli verzorg ik een zomerworkshop in Vught en op woensdag 29 en donderdag 30 juli ben ik bij de Bossche Talentschool.
De Arduino is een computerbordje (microcontroller) dat je zelf kan programmeren. Op de pinnen van de Arduino kan je van alles aansluiten.
In dit zomerproject sluiten we een ledstrip en een schakelaar aan. Daarna gaan we die programmeren.
Solderen
Je krijgt deze onderdelen:
Arduino Nano | Ledstrip | Schakelaar | USB-kabel |
Aan de ledstrip en de schakelaar zitten al gekleurde draden die op de Arduino Nano moeten worden gesoldeerd.
Oefenen
Chris laat je eerst oefenen op een oefenprintje met wat losse onderdelen.
Ledstrip en schakelaar aan Arduino solderen
Hieronder zie je hoe de schakelaar en de ledstrip op de Arduino Nano worden gesoldeerd.
Schakelaar solderen
- De zwarte draad komt op pin GND
- De groene draad komt op pin D3.
Ledstrip solderen
- De zwarte draad gaat naar de andere GND-pin
- De rode draad naar 5V
- De gele draad naar pin D5
Programmeren in twee stappen
Op de laptops die we in dit zomerproject gebruiken zijn het Arduinoprogramma (IDE), de Adafruit Neopixel bibliotheek en de CH340 driver al geïnstalleerd. Als je op een eigen laptop werkt dan staat hier hoe je deze programma’s zelf kunt installeren en instellen. |
- Stap 1: Het programma (schets/sketch) voor jouw Arduino Nano schrijven we eerst in een programma dat Arduino IDE wordt genoemd.
- Stap 2: Als je de schets hebt geschreven dan wordt deze via de USB-kabel naar de Arduino Nano geüpload.
We gaan dit nu oefenen met een schets die led L op de Arduino Nano laat knipperen. Deze led is intern verbonden met pin D13 en wordt vaak gebruikt om te testen of de Nano het doet.
Stap 1: Schets schrijven/kopiëren
- Start Arduino IDE op jouw laptop
- Kopieer de schets hieronder en plak dit in de Arduino IDE.
1 2 3 4 5 6 7 8 9 10 |
void setup() { pinMode(13, OUTPUT); // Pin 13 wordt als Output gebruikt } void loop() { digitalWrite(13, HIGH); // Zet de led op de Nano AAN delay(1000); // Wacht 1 seconde (= 1000 milliseconde) digitalWrite(13, LOW); // Zet de led op de Nano UIT delay(1000); // Wacht 1 seconde (= 1000 milliseconde) } |
ZP00_knipper
Het ziet er nu zo uit:
Stap 2: Schets uploaden naar Arduino Nano
Voordat we de schets kunnen uploaden moeten we uitzoeken wat het nummer is van de USB-poort waarop de Nano is aangesloten.
Check poortnummer
- Zorg ervoor dat de Nano NIET op de laptop is aangesloten.
- Ga in het menu naar Hulpmiddelen – Poort en kijk welke poortnummers er worden herkend. In dit voorbeeld zijn dat COM20 en COM21.
- Sluit de Nano nu aan op een USB-poort en kijk nogmaals in het menu Hulpmiddelen – Poort. Er is nu één poortnummer bijgekomen. In dit voorbeeld is dit COM6.
Selecteer deze poort.
Schets uploaden
Klik op de knop met het pijltje. Jouw schets wordt nu eerst omgezet in code die de Nano begrijpt (dit heet compileren) en daarna geüpload naar de Arduino Nano.
Als de schets is geüpload zie je dat led L op de Nano langzaam knippert.
Uitdaging: Lukt het jou om de schets zo aan te passen dat de led sneller knippert?
Als je zelf een schets schrijft let dan op …
- hoofdletters en kleine letters die in de opdrachten worden gebruikt. Als je kleine letter gebruikt in plaats van een hoofdletter dan krijg je een foutmelding;
- dat je overzicht houdt. Hier staan een paar handige tips;
- je in het menu Help – Naslagwerk een overzicht hebt van alle opdrachten in de Arduino programmeertaal:
Als het niet werkt …
- controleer dan of je geen fout hebt gemaakt met hoofdletters en kleine letters
- controleer dan of alle regels met een opdracht zijn afgesloten met een puntkomma;
- druk dan op de toetsen [Ctrl][T]. De code wordt dan opnieuw geformateerd waardoor het makkelijker is om te zien of je ergens een haakje of accolade teveel of te weinig hebt.
Project 1: Aansturen ledstrip
Je hebt net je eerste schets gemaakt en op de Nano gezet. Hierna gaan we verder met een schets voor het aansturen van de ledstrip. Als je echter eerst wat meer wilt weten over de opbouw van een schets klik dan hier.
Hieronder staat een schets waarmee je iedere led om de beurt groen maakt. Je kan deze schets zo kopiëren naar de Arduino IDE en daarna uploaden naar de Uno.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include // Hieronder is aangegeven dat: // - De ledstrip uit 8 leds (pixels) bestaat // - De strip is aangesloten op pin 5 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(8, 5, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); // We beginnen met de pixels (leds) in de strip pixels.setBrightness(100); // Helderheid stellen we in op 100 } void loop() { loopGroen(); // start functie loopGroen } void loopGroen() { // deze functie werkt met een tellertje (i) dat telkens telt van 0 tot 7 for (int i = 0; i < 8; i++) { // Hieronder wordt voor de led met het nummer i de kleur groen klaargezet pixels.setPixelColor(i, pixels.Color(0, 255 , 0)); // Rood: 255, Groen: 255 en Blauw: 0 pixels.show(); // Laat de leds zien delay(100); // Wacht 100 milliseconde pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // Rood: 0, Groen:0 en Blauw:0 pixels.show(); // Laat de leds zien } } |
ZP01_loop_groen
Project 2: Werken met de schakelaar
Je weet nu hoe je de leds van de ledstrip kunt laten branden. In deze schets worden de leds gestart als je op de knop drukt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include // Hieronder is aangegeven dat: // - De ledstrip uit 8 leds (pixels) bestaat // - De strip is aangesloten op pin 5 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(8, 5, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); // We beginnen met de pixels (leds) in de strip pixels.setBrightness(100); // Helderheid stellen we in op 100 pinMode(3, INPUT_PULLUP); // Stel pin 3 in als INPUT } void loop() { // Deze lus controleert de hele tijd of de schakelaar op pin 3 is ingedrukt if (digitalRead(3) == LOW) { loopGroen(); // start functie loopGroen } } void loopGroen() { // deze functie werkt met een tellertje (i) dat telkens telt van 0 tot 7 for (int i = 0; i < 8; i++) { // Hieronder wordt voor de led met het nummer i de kleur groen klaargezet pixels.setPixelColor(i, pixels.Color(0, 255, 0)); // Rood: 0, Groen: 255 en Blauw: 0 pixels.show(); // Laat de leds zien delay(100); // Wacht 100 milliseconde pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // Rood: 0, Groen:0 en Blauw:0 pixels.show(); // Laat de leds zien } } |
ZP02_loop_groen_met_schakelaar
Project 3: Dobbelsteen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include // Hieronder is aangegeven dat: // - De ledstrip uit 8 leds (pixels) bestaat // - De strip is aangesloten op pin 5 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(8, 5, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); // We beginnen met de pixels (leds) in de strip pixels.setBrightness(100); // Helderheid stellen we in op 100 pinMode(3, INPUT_PULLUP); // Stel pin 3 in als INPUT } void loop() { // Deze lus controleert de hele tijd of de schakelaar op pin 3 is ingedrukt if (digitalRead(3) == LOW) { pixels.clear(); // Zet alle leds uit // Hieronder wordt met "random(8)" een willekeurig nummer tussen 0 en 8 gekozen. // Dit is dan het nummer van de led die gaat branden. // Het getal 8 kan niet worden gekozen pixels.setPixelColor(random(8), pixels.Color(0, 0, 255)); // Rood: Uit Groen: Uit Blauw: Aan pixels.show(); // Laat de leds zien delay(100); // Wacht 100 milliseconde } } |
ZP03_dobbelsteen
Project 4: Teller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include // Hieronder is aangegeven dat: // - De ledstrip uit 8 leds (pixels) bestaat // - De strip is aangesloten op pin 5 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(8, 5, NEO_GRB + NEO_KHZ800); int teller = 0; // Dit is een variable (stukje geheugen met de naam "teller") void setup() { pixels.begin(); // We beginnen met de pixels (leds) in de strip pixels.setBrightness(100); // Helderheid stellen we in op 100 pinMode(3, INPUT_PULLUP); // Stel pin 3 in als INPUT } void loop() { // Deze lus controleert de hele tijd of de schakelaar op pin 3 is ingedrukt if (digitalRead(3) == LOW) { // Hieronder krijgt de led met het nummer dat is opgeslagen in de variabele "teller" een kleur. // Als de loop() begint heeft teller de waarde 0. pixels.setPixelColor(teller, pixels.Color(255, 0, 255)); // Rood: Aan Groen: Uit Blauw: Aan pixels.show(); // Laat de leds zien teller = teller + 1; // Verhoog de waarde van teller met 1 delay(500); // Wacht 500 milliseconde if (teller == 9) { // Alle leds zijn nu aan (let op dat er twee =-tekens staan) teller = 0; // Zet de variabele teller weer op 0 pixels.clear(); // Zet alle pixels uit ... pixels.show(); // ... en laat dit ook zien } } } |
ZP04_teller
Over een schets/sketch
Een programma voor een Arduino noemen we een schets (scetch op zijn Engels). We pakken de eerste schets er weer even bij om een paar algemene dingen uit te leggen.
1 2 3 4 5 6 7 8 9 10 |
void setup() { pinMode(13, OUTPUT); // Pin 13 wordt als Output gebruikt } void loop() { digitalWrite(13, HIGH); // Zet de led op de Nano AAN delay(1000); // Wacht 1 seconde (= 1000 milliseconde) digitalWrite(13, LOW); // Zet de led op de Nano UIT delay(1000); // Wacht 1 seconde (= 1000 milliseconde) } |
ZP00_knipper
setup() en loop()
De schets bestaat uit twee functies:
- void setup()
Dit deel van de schets wordt maar één keer uitgevoerd bij de start. Hier worden de algemen instellingen gedaan. In dit voorbeeld leggen we vast dat pin13 wordt gebruikt voor output. De led L op de Nano is intern doorverbonden met deze pin. - void loop()
Dit deel van de schets wordt de hele tijd uitgevoerd (loop = lus)
Puntkomma’s (semicolons)
Een opdracht in de schets moet worden afgesloten met een puntkomma. Als je dit niet doet dan krijg je bij het compileren een foutmelding:
Hierboven staat er achter de opdracht op regel 7 geen puntkomma. Bij het compileren wordt regel 8 gemarkeerd en staat er onderin de melding expected ‘;’ before ‘digitalWrite’ (verwacht puntkomma vóór digitalWrite).
Haakjes (…) (brackets)
Gebogen haakjes (brackets) staan om de parameters van een opdracht of een functie. Met parameters geef je aan wat een opdracht of functie precies moet doen.
Dit zijn de opdrachten die we tot nu toe zijn tegengekomen.
Opdracht | Toelichting | ||||
pinMode(13, OUTPUT); | Met de opdracht pinMode(pin, mode) geef je aan of een poort van de Arduino gebruikt wordt als OUTPUT of als INPUT. De opdracht heeft twee parameters:
|
||||
digitalWrite(13, HIGH); | Met digitalWrite(pin, value) geef je opdracht om een pin AAN (HIGH) of UIT (LOW) te zetten.
|
||||
delay(1000); | De opdracht delay(ms) heeft maar één parameter. Hiermee wordt aangegeven hoe lang gewacht moet worden.
|
Accolades {…} (Curly brackets)
In onze eerste schets zitten er vier opdrachten (regels) in de functie loop(). Deze worden bij elkaar gehouden door twee accolades ({…})
Overzicht houden
Zeker als je voor het eerst een schets schrijft kan je het overzicht wel eens verliezen. Hieronder drie tips op het overzicht te houden:
Haakjes en accolades
Als je in de Arduino IDE met de cursor bij een haakje of accolade komt dan komt er automatisch een rechthoekje om het bijbehorende andere haakje of accolade:
Automatische opmaak
Hierboven zie je dat regel 2 inspringt ten opzicht van de regels 1 en 3. Op deze manier ziet de programmeur makkelijker welke opdrachten er tussen de accolades horen.
Als je nu zelf regels toevoegt of verwijdert dan kan je de code weer netjes formatteren via het menu Hulpmiddelen – Automatische opmaak.
Voeg commentaar toe aan je schets
Het is een goede gewoonte om je schets van commentaar te voorzien. Als dan later iemand anders in de schets gaat werken dan ziet deze wat de bedoeling van een regel is. In de regel hieronder is alles wat na de twee schuine strepen staat commentaar. Het programma doet hier verder niets mee:
1 |
<span style="color: #d35400;">digitalWrite</span><span style="color: #000000;">(</span><span style="color: #000000;">13</span><span style="color: #434f54;">,</span> <span style="color: #00979c;">HIGH</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">// Zet de led op de Nano AAN</span> |
Wat heb je nodig om de Arduino thuis te programmeren?
- Een laptop met daarop deze twee programma’s:
- Arduino IDE, deze kan je downloaden vanaf https://www.arduino.cc/en/main/software en moet je als eerste installeren.
- CH340 driver, deze haal je op van https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers, dit is het tweede programma dat je installeert.
Instellingen Arduino IDE
Als eerste moet je ervoor zorgen dat deze instellingen hebt in het menu Hulpmiddelen (Tools):
|
||
Nederlands | Engels |
Aanpassen taal
Via het menu Bestand – Voorkeuren (File – Preferences) kan je de taal van het Arduino programma aanpassen.
Je programmeert de Arduino met de programmeertaal C++, dit gaat altijd in het Engels.
Bibliotheek Adafruit Neopixel toevoegen
Om met de ledstrip te werken is speciale programmeercode nodig. Deze staat in een bibliotheek (library) die je moet toevoegen aan de Arduino IDE. Dit gaat zo:
- Ga in het menu naar Hulpmiddelen – Bibliotheken beheren … (Tools – Manage Libraries …)
- Zoek hier naar Adafruit Neopixel en klik op de knop Installeren.
- Klik op de knop Sluiten.
Over de CH340 driver
Er bestaan veel verschillende soorten Arduinos. In deze workshop werken we met een populaire goedkope variant van de Arduino Nano. Het programma met de CH340 driver zorgt er voor dat jouw Nano door het Arduino-programma wordt herkend.
Een reactie