Schooljaar 2015-2016
SUBMODULE
HOE PROGRAMMEER
JE EEN ARDUINO-BORD?
Gebaseerd op: FITZGERALD, S. , SHILOH, M., e.a., Arduino Projects Book, 2de druk, Arduino, Torino, 2013, 171 blz,
(onderdeel van de Arduino Starter Kit)
Submodule: Hoe programmeer je een Arduino-bord? 1
Inhoudstafel
1 Voorkennis en doelstellingen .................................................... 2
2 Alarmsysteem ........................................................................... 3
2.1 Uitdaging ................................................................................... 3
2.2 Oriëntatie .................................................................................. 3
2.3 Voorbereiding ............................................................................ 3
2.4 Onderzoek / ontwerp ................................................................. 6
2.5 Testen / concluderen ................................................................. 8
2.6 Rapporteren ............................................................................ 10
3 Verliefdheidsmeter ................................................................. 11
3.1 Uitdaging ................................................................................. 11
3.2 Oriëntatie ................................................................................ 11
3.3 Voorbereiding .......................................................................... 11
3.4 Onderzoek / ontwerp ............................................................... 12
3.5 Testen / concluderen ............................................................... 15
3.6 Rapporteren ............................................................................ 15
4 Dimbare verliefdheidsmeter ................................................... 17
4.1 Uitdaging ................................................................................. 17
4.2 Oriëntatie ................................................................................ 17
4.3 Voorbereiding .......................................................................... 17
4.4 Onderzoek / ontwerp ............................................................... 17
4.5 Testen / concluderen ............................................................... 18
4.6 Rapporteren ............................................................................ 18
Submodule: Hoe programmeer je een Arduino-bord? 2
1 Voorkennis en doelstellingen
Aan de hand van deze bundel leer je hoe je het Arduino-bord kan gebruiken om
zelf elektronische toepassingen te bouwen.
Het uiteindelijke doel is de uitdaging van de zelfstandig rijdende auto. Daarvoor
heb je heel wat kennis nodig. Aan de hand van enkele kleine projectjes bouw je
die kennis op. Daarna kan je alles als een puzzel in elkaar passen bij het
programmeren van je auto.
In elk project verwerf je heel uiteenlopende kennis. De precieze doelstellingen
worden daarom steeds per project vermeld.
Uiteraard kan je geen elektronische toepassing bouwen zonder kennis van
elektriciteit en elektronica. De basiselementen daarvan hebben we gebundeld in
een aparte Submodule: Basis elektronica.
Om te kunnen starten heb je meteen die Submodule nodig: neem deel 1 tot en
met deel 5 grondig door. Maak de opdrachten uit deel 6.
Klaar? Dan kan je starten met het eerste programmeerproject.
Submodule: Hoe programmeer je een Arduino-bord? 3
2 Alarmsysteem
2.1 Uitdaging Maak een alarmsysteem met je Arduino-bord en het breadboard:
Zolang er niets gebeurt, brandt een groene LED.
Als de knop ingedrukt wordt, beginnen 2 rode LEDs te knipperen.
2.2 Oriëntatie
Bouw een alarmsysteem.
Hoe kan je het Arduino-bord integreren in de schakeling zodat het
signalen kan opvangen en uitsturen?
Welke elementen bevat een Arduino-bord?
Hoe programmeer je een Arduino-bord?
Hoe werkt de programmeeromgeving?
Uit welke elementen bestaat een Arduino-programma?
Hoe maak je een keuze in een programma?
(Ofwel de rode ofwel de groene LEDs moeten branden.)
2.3 Voorbereiding
2.3.1 Hardware / elektrisch schakeling
Bestudeer grondig de verschillende elementen op je Arduino-bord.
1
2
3
4
5
6
7
8
9
10
Submodule: Hoe programmeer je een Arduino-bord? 4
1 Reset-knop
Reset het bord en de microcontroller
2 USB-poort
Is de verbinding met de PC voor de voeding en het opladen van de programma’s
3 Pin 13 LED
De enige ingebouwde uitvoercomponent op het bord. Ideaal voor
controles en foutopsporing.
4 TX en RX LEDs
Deze LEDs geven weer wanneer je Arduino-bord communiceert met je
computer. Is handig bij foutopsporing.
5 Aansluiting voor voeding Geschikt voor spanning van 7-12V. Kan gebruikt worden als er geen
verbinding via USB is (bvb nadat het programma op het bord geladen
is).
6 GND en 5V pinnen
Gebruik deze pinnen om 5V spanning en aarding te voorzien voor je
schakelingen
7 Digitale pinnen Gebruik deze pinnen om digitale gegevens te lezen en de schrijven. Je
kan ook analoge gegevens schrijven op de pinnen met het ~-symbool.
8 Spanning LED
Geeft weer dat je Arduino-bord spanning heeft. Is handig bij foutopsporing.
9 ATmega microcontroller
Het hart van je Arduino-bord
10 Analoge pinnen Gebruik deze pinnen om analoge gegevens te lezen
Ken je de functie van al deze elementen?
2.3.1.1 Microcontroller
Microcontrollers worden ook wel eens microchips genoemd, of ICs (geïntegreerde
schakelingen).
In de microcontroller zitten een
processor, geheugen (ROM en
RAM), een klok en in-en
uitvoerpoorten. Het is dus eigenlijk
een compacte versie van een PC.
De compacte vorm
brengt echter beperkingen mee: een
microcontroller kan nooit de grote
hoeveelheid complexe taken
uitvoeren zoals onze PC.
Microcontrollers worden daarom
Submodule: Hoe programmeer je een Arduino-bord? 5
meestal ontwikkeld voor één specifieke taak. Op die manier
worden ze ondertussen gebruikt in zowat alle apparaten die
aangestuurd moeten worden.
2.3.1.2 Pinnen
De pinnen zijn via geleide tracks aangesloten op de microcontroller. Je kan de
tracks herkennen aan de onderzijde van het Arduino-bord.
Via de pinnen kan de microcontroller dus signalen ontvangen en uitsturen en dus
kan je er allerlei componenten op aansluiten: LEDs, drukknoppen, een
luidspreker, motoren, een temperatuursensor, een microfoon, een zwart-
witsensor, een afstandssensor, ….
Kan jij zelf bovenvermelde componenten op de juiste plaats zetten?
Ingangs-
component
Uitgangs-
component
......
......
......
......
......
......
......
......
Waar zou je deze componenten aansluiten op je Arduino-bord?
Submodule: Hoe programmeer je een Arduino-bord? 6
2.3.2 Software
Een microcontroller heeft instructies nodig: hij moet weten hoe hij moet
reageren op bepaalde signalen.
De microcontroller op je Arduino-bord wordt geprogrammeerd met een
vereenvoudigde versie van C. C is al een oude programmeertaal (meer dan 40
jaar), maar wordt nog steeds gebruikt. Vooral in besturingssystemen en
microcontrollers wordt nog geprogrammeerd in C.
Voor het programmeren heb je twee referentiewerken ter beschikking:
https://www.arduino.cc/en/Reference/HomePage
Dit is deel van de Arduino website. De informatie is degelijk en goed
gestructureerd, maar in het Engels.
Op smartschool vind je de ‘Arduino programmeer manual’.
Deze manual is een Nederlandse vertaling van de website. Omwille van de
taal en de omkaderende tekst is dit document toegankelijker dan de
website, maar anderzijds is de informatie niet zo goed gestructureerd.
Maak er een gewoonte van om eerst naar de website te gaan. Op die manier
geraak je snel vertrouwd met het technische Engels (de voertaal binnen de
informatica). Maar aarzel niet om de Nederlandstalige manual te gebruiken als
back-up bij onduidelijkheden.
2.4 Onderzoek / ontwerp
2.4.1 Het Arduino-bord integreren in de schakeling
! Koppel de voeding af voor je de schakeling opbouwt !
! Laat de schakeling nakijken voor je de voeding aansluit !
Je hebt al eerder LEDs geschakeld met een drukknop. Nu moet je er echter voor
zorgen dat ook microcontroller op het Arduino-bord in de schakeling wordt
opgenomen.
Let er op dat je de juiste weerstanden gebruikt voor de LED’s.
2.4.2 Input in een elektronische schakeling
Een input-pin moet binnen een elektronische schakeling steeds volledig
verbonden zijn. Als de pin niet verbonden is, kan ze willekeurige signalen
oppikken vanuit de omgeving.
Submodule: Hoe programmeer je een Arduino-bord? 7
In onze toepassing is de input-pin volledig verbonden op het moment dat de
schakelaar ingedrukt wordt: er is een schakeling van 5V naar GND.
Maar als de schakelaar niet wordt ingedrukt, heeft de pin langs één zijde geen
verbinding.
Je lost dit op door een 10k Ω weerstand te plaatsen tussen de input-pin en GND.
Deze weerstand noemt met een Pull-Down-weerstand: de weerstand neemt alle
spanning op waardoor de input-pin zeker 0V als signaal krijgt.
2.4.3 De programmeeromgeving
Start de programmeeromgeving.
Je herkent meteen de 2 onderdelen van elk Arduino-programma: setup() en
loop().
Zoek in de referentiewerken op wat setup() en loop() betekenen en waar je ze
voor moet gebruiken.
In de documentatie en de voorbeelden herken je meteen enkele tekens die
typisch zijn voor C en aanverwante programmeertalen: ; (puntkomma),
Submodule: Hoe programmeer je een Arduino-bord? 8
(accolades), // (regel commentaar). Zoek op waarvoor deze tekens gebruikt
worden.
2.4.4 Signalen opvangen en uitsturen: invoer en uitvoer
De knop en de LEDs werken met digitale signalen: HIGH (spanning) of LOW
(geen spanning):
Een ingedrukte knop geeft aan de pin de waarde HIGH. Als de knop wordt
losgelaten, geeft hij de waarde LOW.
De waarde HIGH doet een led branden, de waarde LOW zet een led uit.
Om correct te werken met digitale waarden, moet je vertrouwd zijn met de
functies pinMode(), digitalWrite() en digitalRead(). Zoek op wat deze functies
precies doen.
2.4.5 Kiezen: groen of rood?
Op basis van de waarde van de knop, moeten verschillende waarden uitgevoerd
worden:
Is de knop niet ingedrukt: de groene led moet de waarde HIGH krijgen, de
rode LEDs de waarde LOW.
Is de knop wel ingedrukt: de groene led moet de waarde LOW krijgen, de
rode LEDs de waarde HIGH.
Het programma moet dus een keuze maken. Dat doe je met de controlestructuur
if…else. Zoek op hoe deze structuur werkt.
2.4.6 Ook nuttig
Zoek zeker ook op waarvoor de functie delay() gebruikt wordt. En je zal ook de
operator == moeten gebruiken.
2.5 Testen / concluderen
2.5.1 Programma schrijven
Ondertussen heb je heel wat informatie opgezocht. Aan de hand daarvan kan je
proberen het programma te schrijven.
Arduino gebruikt het woord ‘schets’ in plaats van ‘programma’. In deze tekst
zullen we ‘programma’ gebruiken.
2.5.2 Compileren en uploaden
Als het programma klaar is, moet je het overbrengen naar je Arduino-bord. Dat
gebeurt in twee stappen:
Submodule: Hoe programmeer je een Arduino-bord? 9
Het programma moet eerst gecompileerd worden.
‘Compileren’ betekent dat de Arduino-code die je geschreven hebt,
omgezet wordt via machinetaal naar binaire code: een code die de
microcontroller op je Arduino-bord begrijpt. Binaire code bestaat uit enkel
0-en en 1-en waardoor ze voor ons niet leesbaar is.
Tijdens de compilatie wordt eerst ook de programmacode gecontroleerd.
Als je fouten gemaakt hebt in de schrijfwijze (geen ; of de foute haakjes of
…), krijg je bij de compilatie een foutmelding. Je moet dan eerst de fout
zoeken en verbeteren. Daarna probeer je opnieuw te compileren.
Daarna upload je het programma naar je Arduino-bord.
Het programma start automatisch en blijft lopen zolang het bord voeding
heeft. Het programma blijft op het bord staan, zelfs na onderbreking van
de voeding: het zal meteen weer starten zodra er terug voeding
beschikbaar is.
Submodule: Hoe programmeer je een Arduino-bord? 10
2.6 Rapporteren
2.6.1 Persoonlijk verslag
Teken het schema van de schakeling
Voeg in de programmacode commentaar toe om voor jezelf alles duidelijk te maken. Druk daarna de code af en voeg ze toe aan je
bundel.
2.6.2 Doelstellingen
Wat moet je kennen?
De begrippen microcontroller, ingangs- en uitgangscomponent
De functie van de onderdelen setup() en loop() in een Arduino-programma
Wat moet je kunnen?
Een elektronisch signaal inlezen met het Arduino-bord (input)
Een pull-up weerstand gebruiken bij het inlezen
Een elektronisch signaal uitsturen via het Arduino-bord (output)
Geselecteerde referentiewerken gebruiken als naslagwerk
De if…else controlestructuur gebruiken
De functies pinMode(), digitalWrite(), digitalRead() en delay() gebruiken
Submodule: Hoe programmeer je een Arduino-bord? 11
3 Verliefdheidsmeter
3.1 Uitdaging Bouw een verliefdheidsmeter. Hoe warmbloedig ben je?
Een warmtesensor meet de temperatuur van je huid. Hoe warmer je bent, hoe
meer LEDs oplichten.
3.2 Oriëntatie
Bouw een verliefdheidsmeter.
Hoe kan de temperatuur gemeten worden door het Arduino-bord?
Hoe voeg je een warmtesensor toe aan een schakeling?
Welke informatie krijgt het Arduino-bord van de sensor?
Hoe verwerk je in een programma verschillende gegevens?
Wat zijn variabelen?
Welk soort gegevens kan je in variabelen bewaren?
Hoe kan je meerdere keuzes combineren?
Hoe kan je gegevens op je scherm laten verschijnen?
Wat is seriële uitvoer?
3.3 Voorbereiding Voor dit project gebruiken we een
warmtesensor van het type TMP36.
Voor onze verliefdheidsmeter spreken we af:
Als de sensor een temperatuur van minstens 24°C oppikt, gaat 1 LED
branden.
Vanaf 27°C begint ook een 2de LED te branden.
Pas als de temperatuur boven de 30°C gaat, branden de 3 LEDs.
Submodule: Hoe programmeer je een Arduino-bord? 12
3.4 Onderzoek / ontwerp
3.4.1 Een warmtesensor toevoegen aan een schakeling
De warmtesensor zet energie uit warmte om naar elektrische energie. Hoe
warmer de sensor wordt, hoe meer spanning hij door laat.
Het is daarbij heel belangrijk hoe je de sensor in de schakeling opneemt:
- Het linkse beentje is verbonden met de
spanningsbron. - Het rechtse beentje is verbonden met GND
- Het centrale beentje geeft de variabele spanning
door, afhankelijk van de temperatuur.
De waarde die door het centrale
beentje gestuurd wordt is analoog,
of ‘traploos’.
Dergelijke waarden kunnen alleen ingelezen worden door een
analoge pin op je Arduino-bord.
3.4.2 Hoe verwerk je de gegevens van de warmtesensor?
Elke elektronische component wordt uitvoerig beschreven in datasheets
(beschikbaar via internet). Die informatie heb je nodig om de gegevens van de
sensor correct te interpreteren.
Voor de TMP36 is deze informatie beschikbaar:
Spanning tss 2.7 V en 5.5 V
Meetgegevens tussen -40°C en +125°C. (max blootstelling aan 150°C)
Schaal van 10 mV / °C
Levert 750 mV bij 25°C
Submodule: Hoe programmeer je een Arduino-bord? 13
Bereken enkele spanningen die de TMP36 kan leveren.
De laagst mogelijke spanning:
De hoogst mogelijke spanning:
De spanning bij 0°C:
Bedenk een formule waarmee je elke geleverde spanning kan omzetten
naar een temperatuur in °C
3.4.3 Analoge gegevens inlezen
Om de gegevens van de sensor in te lezen, gebruik je de functie analogRead().
Welke waarden levert de functie analogRead()?
Bedenk een formule waarmee je deze waarden kan omzetten naar
spanning (V en mV).
3.4.4 Met gegevens werken in een programma
Uit het voorgaande is duidelijk dat we met heel wat gegevens zullen werken in
dit programma:
de waarde van de sensor moet ingelezen worden
op basis daarvan berekenen we de spanning en de temperatuur
de temperatuur moeten we vergelijken met de grenswaarden (24, 27 en
30) om de juiste LEDs te laten branden.
Submodule: Hoe programmeer je een Arduino-bord? 14
Om vlot en overzichtelijk met dergelijke gegevens te kunnen werken, gebruiken
we variabelen. Zoek in de Nederlandstalige handleiding op wat een variabele
precies is en waarvoor ze gebruikt worden.
Om variabelen te kunnen gebruiken, moet je ze eerst declareren: je kiest een
naam en het soort van gegevens dat de variabele zal bevatten. Zoek op wat het
verschil is tussen een byte, een int en een float.
Welke variabelen zou je in dit programma gebruiken? Welk type
gegevens bevatten ze?
3.4.5 Kiezen tussen vier mogelijkheden
Afhankelijk van de temperatuur, heb je in dit project vier verschillende opties
voor de uitvoer:
Bij een temperatuur lager dan 24°C mag er geen LED branden
Vanaf 24°C moet één LED branden
Vanaf 27°C moeten twee LEDs branden
Vanaf 30°C moeten drie LEDs branden
In de documentatie over de if…else heb je zeker al mogelijkheden ontdekt om
meerdere selecties te combineren. Zoek ze nog eens op.
3.4.6 Verloop van het programma controleren en gegevens weergeven
Omwille van de verschillende gegevens, berekeningen en voorwaarden, kan er in
dit programma heel wat mis lopen.
Het is handig om de loop van het programma en het verwerken van de gegevens
op je scherm te kunnen volgen. Daarvoor maken we gebruik van seriële
communicatie: de gegevens worden meteen doorgestuurd, één na één, zodra ze
beschikbaar zijn.
Voor deze communicatie zijn verschillende functie beschikbaar. Ze werden
gegroepeerd in de klasse Serial. In de Engelstalige documentatie vind je de
volledige lijst van functies uit de klasse, de Nederlandstalige handleiding is hier
eerder beperkt.
Submodule: Hoe programmeer je een Arduino-bord? 15
Let op de schrijfwijze van deze functies: een hoofdletter en een . op de juiste
plaats: Klasse.functie !
Voor je programma zal je de functies Serial.begin(), Serial.print() en
Serial.prinln() nodig hebben. Zoek op hoe ze werken.
Zodra je programma geuploaded is naar je Arduino-bord kan je de
gegevensverwerking opvolgen via de Seriële monitor van Arduino. Die open je
door te klikken op het icoon in de rechterbovenhoek van het Arduino-venster.
3.4.7 Ook nuttig
Je hebt al eens gewerkt met de operator ==. Nu gebruik je ook de =.
Wat is het verschil tussen beide?
3.5 Testen / concluderen Ondertussen heb je alle puzzelstukjes verzameld om dit project uit te werken en
te testen.
Als je merkt dat het fout loopt, probeer dan rustig te analyseren wat er precies
mis gaat.
3.6 Rapporteren
3.6.1 Persoonlijk verslag
Teken het schema van de schakeling
Submodule: Hoe programmeer je een Arduino-bord? 16
Voeg in de programmacode commentaar toe om voor jezelf alles
duidelijk te maken. Druk daarna de code af en voeg ze toe aan je
bundel.
3.6.2 Doelstellingen
Wat moet je kennen?
De rol van een variabele in een programma
De gegevenstypes int en float
Het verschil tussen == en =
Wat moet je kunnen?
Een warmtesensor gebruiken in een schakeling
De functie analogRead() gebruiken
De invoerwaarde van de warmtesensor omzetten naar een temperatuur
Met een combinatie van if…else – structuren een meervoudige keuze realiseren
Seriële gegevens van het Arduino-bord op PC laten verschijnen
Submodule: Hoe programmeer je een Arduino-bord? 17
4 Dimbare verliefdheidsmeter
4.1 Uitdaging Bouw een variant van de verliefdheidsmeter.
Deze keer gebruik je 2 LED’s: een blauwe en een rode. Bij een lage temperatuur
schijnt de blauwe LED heel sterk en de rode niet/nauwelijks. Naarmate de
temperatuur stijgt, versterkt het licht van de rode LED, terwijl dat van de blauwe
verzwakt.
4.2 Oriëntatie
Bouw een dimbare verliefdheidsmeter
Hoe kan je een analoog signaal versturen?
Hoe pas je PWM toe op je Arduino-bord?
4.3 Voorbereiding Voor je deze uitdaging kan aangaan, moet je meer weten over PWM, een term
uit de elektronica. Daarvoor moet je eerst in de Submodule Basis Elektronica een
nieuw stuk doornemen: 7.2 Actuatoren analoog aansturen.
4.4 Onderzoek / ontwerp
4.4.1 Schakeling bouwen
Vertrek van de schakeling die je in het vorige project hebt opgebouwd.
Controleer of de gebruikte uitvoer-pinnen geschikt zijn voor analoge uitvoer.
4.4.2 Programma schrijven
4.4.2.1 Analoge waarde uitvoeren
Zoek in de documentatie op hoe de functie analogWrite() werkt.
Welk bereik van waarden kan je uitvoeren met de functie analogWrite()?
Met welk bereik van waarden worden ingevoerd via de warmtesensor?
Bedenk een formule om dit te herrekenen naar het maximale
uitvoerbereik.
Submodule: Hoe programmeer je een Arduino-bord? 18
4.4.2.2 Pinnen benoemen
Je kan de pinnen in je programma een naam geven. Op die manier zijn ze
makkelijker herkenbaar en voorkom je heel wat fouten.
Dat doe je op dezelfde manier als het werken met variabelen. Er is één groot
verschil: de waarde van de pin moet over het hele programma constant blijven.
In de documentatie vind je informatie terug over vooraf gedefinieerde
constanten, maar je moet vooral op zoek gaan naar het sleutelwoord ‘const’.
4.5 Testen / concluderen Voeg de analoge uitvoer zeker ook toe aan de uitvoer via de seriële monitor. Op
die manier kan je goed opvolgen wat er precies gebeurt.
4.6 Rapporteren
4.6.1 Persoonlijk verslag
Teken het schema van de schakeling
Voeg in de programmacode commentaar toe om voor jezelf alles
duidelijk te maken. Druk daarna de code af en voeg ze toe aan je
bundel.
4.6.2 Doelstellingen
Wat moet je kennen?
De begrippen analoge uitvoer, PWM
Wat moet je kunnen?
PWM toepassen in een elektronische schakeling
cConstanten gebruiken in een programma
Top Related