OMA-Intro Arduino: verschil tussen versies
k |
|||
Regel 156: | Regel 156: | ||
− | ==Tijd voor een | + | ==Tijd voor een experiment== |
Haal de laatste delay instructie eens helemaal weg (of zet '//' ervoor waardoor die regel nu als commentaar telt en niet meer meedoet). Upload het programma. Zoals je ziet blijft de led lamp nu aan staan. Wordt hij dan niet meer uitgezet? De regel <code>digitalWrite(LED_BUILTIN, LOW);</code> zet hem toch weer uit? | Haal de laatste delay instructie eens helemaal weg (of zet '//' ervoor waardoor die regel nu als commentaar telt en niet meer meedoet). Upload het programma. Zoals je ziet blijft de led lamp nu aan staan. Wordt hij dan niet meer uitgezet? De regel <code>digitalWrite(LED_BUILTIN, LOW);</code> zet hem toch weer uit? | ||
Versie van 15 okt 2020 om 06:33
In 2005 werd de Arduino ontwikkeld door Massimo Banzi. De Arduino moest een goedkope en eenvoudige oplossing zijn om elektronica te programmeren (voor zijn studenten). Dit is aardig gelukt, aangezien een Arduino UNO nu €25,- kost. Er zijn ook talloze kopieën beschikbaar die even goed werken en maar een fractie van de prijs kosten.
Los van kleine onderdeeltjes als schroefjes, transistors en plakbandrolletjes is het een van de kleinste dingen waar je bij OMA mee zult werken. Gelukkig (of helaas ...) is hier wel het meest over te vertellen.
Niet alles in een keer natuurlijk, daarom hier een beginnetje. Onthoud waar je deze pagina vond, je kunt er zo gemakkelijk nog eens naar terug als je iets nog even wilt opzoeken.
Als je de Arduino op je eigen computer thuis wilt gebruiken of op een laptop die je zelf mee naar school neemt kan dat ook. Je zult dan wel zelf even de nodige software (de Arduino IDE) moeten instaleren: Arduino IDE.
Inhoud
Wat heb je nodig?
- Wat je nodig hebt is uiteraard de Arduino zelf.
- Een USB kabeltje, maar niet dezelfde als die waarmee je je telefoon oplaad.
- Een laptop met daarop de Arduino software. Gelukkig staat dit op alle schoollaptops!
Wat is zo'n Arduino nu eigenlijk?
Een Arduino is wat je noemt een microcontroller.
'Micro' omdat er een microchip inzit. Die zit tegenwoordig overal wel in zo'n beetje en wat vroeger een microchip heette is voor hedendaagse maatstaven ook alweer groot ... maar goed, zo noemen ze het nu eenmaal.
'Controller' slaat op de toepassing ervan: Je kunt het apparaat gebruiken om dingen mee te bedienen.
Oftewel een klein apparaatje waarmee je dingen kunt bedienen. Zoals ze het op de wikipedia pagina leuk zeggen: Dit platform is bedoeld voor hobbyisten, artiesten, kunstenaars en iedereen die geïnteresseerd is in het maken en ontwerpen van slimme en creatieve objecten. [1].
Arduino aansluiten op de computer
Begin eens met de USB kabel, prik die aan de ene kant in de computer en aan de andere kant in je Arduino. Als alles goed is gegaan dan gaan er lampjes branden op de Arduino. Als dat niet zo is dan is de Arduino kapot, kabel kapot of staat je computer niet aan ...
Eerste deel alweer gelukt. Beloon jezelf met een minuutje pauze om even bij te komen.
Arduino IDE
Als je bij OMA al met een mBot hebt gewerkt of al eens eerder hebt geprogrammeerd dan weet je misschien wel wat een IDE is. Dit staat voor Integrated Development Environment. In het Nederlands zou dat neerkomen op 'geintegreerde ontwikkel omgeving'.
Dat is een mond vol woorden die je van mij ook weer een beetje mag vergeten. Waar het om gaat is dat als wij 'IDE' of 'Arduino IDE' zeggen, dat jij weet waar je moet zoeken en waar we het over hebben. De Arduino IDE vind je op je computer door op het Launchpad of in het Startmenu te zoeken naar dit icon:
Start het programma!
Communicatie tussen mensen gaat vaak al moeizaam, tussen apparaten is dat niet anders. Je zult de computer om te beginnen moeten vertellen dat er nu een Arduino aanhangt. Ook moet je op de een of andere manier tegen de Arduino vertellen wat je nu eigenlijk van het ding wil!
Je hebt nu een redelijk leeg scherm voor je neus met daarin wat tekst. Hierover later meer, nu houden we het even makkelijk en zoeken we een van de voorbeeld Arduino programma's op. Ze hebben bij deze IDE namelijk een enorm aantal voorbeelden waar je gebruik van kunt maken. Makkelijk want zo hoef je zelf minder te doen.
Ga met je muis naar het menu 'Bestand', kies dan voor 'Voorbeelden', '01 Basics' en tot slot voor 'Blink'.
Er opent zich nu een nieuw venster met daarin de code voor het programma 'Blink'. Over die code later meer, voor nu is het alleen interessant dat je weet waar je dit kunt vinden!
Fout, fout en nog meer fout!
Als jij iemand bent die snel gefrustreerd is, dan gaat dit een leerzaam avontuur voor je worden. Er gaat nogal eens iets fout als je niet precies doet wat de computer van je verwacht.
Gelukkig zijn er ook zat oplossingen, voor het gemak gaan we nu expres wat fouten maken zodat je deze later ofwel niet meer maakt, ofwel er snel een oplossing voor hebt!
Poort
Poort? Ja, de IDE praat met de Arduino via een poort. Op die manier komt de code die je in beeld hebt op de Arduino te staan. Daar zitten nog wat tussenstappen tussen die e.e.a. vertalen enzo, maar dat is voor later.
Het programma naar de Arduino toesturen heet 'Upload'. Daar is een mooie knop voor in de IDE: Een pijltje.
Zodra je hierop klikt zal de computer het programma het naar de Arduino toe proberen te sturen.
Maar dat gaat niet lukken (we wilden tenslotte een fout genereren ...).
In het zwarte deel van de IDE staat nu een flink lang verhaal met letters in het rood. Rood betekent meestal niet veel goeds, en dat is nu ook weer zo. Verrassing: Er is iets fout gegaan.
De tekst verteld in het rood verteld hier het e.e.a. over, kijk maar eens of je dit kunt vinden.
'Can't open device' staat er.
De computer kan de Arduino niet openen. Oplossing: Vertel de computer waar hij moet kijken. Dit doe je door aan te geven via welke poort je wilt dat de computer contact gaat maken. Met normale USB apparatuur heb je dit probleem niet zo snel, maar de Arduino is niet de slimste van het stel zegmaar.
Klik op 'Hulpmiddelen' en dan 'Poort' om een lijst met mogelijke poorten te krijgen. De poort die je moet hebben is de USBMODEM poort. Meestal staat daar al 'Arduino' achter, dus dat scheelt.
Als je de goede poort hebt geselecteerd klik je nog eens op 'Upload'. Nu gaat het wel goed en zie je direct resultaat: Op de Arduino knippert nu een lampje. Snap je meteen waarom dat programma 'Blink' heet.
Geen commentaar ...
Superleuk zo'n knipperende lamp, maar heel spannend is het niet. Daarbij zijn fouten leuk, dus maken we er nog eentje expres.
Kijk eens naar de programma code. Het begint met een blok commentaar of uitleg over het programma zelf. Daarin staan doorgaans wie het gemaakt heeft, hoe je het moet gebruiken en wat andere bijzonderheden.
Dat commentaar staat er voor ons mensen, de Arduino doet er zelf verder niets mee (het komt er ook niet op terecht trouwens). Een commentaar blok begint met /* en eindigt met */. Alles dat daartussen staat daar doet de computer dus verder niets mee. In de IDE is commentaar tekst voor het gemak grijs gekleurd.
Haal voor de grap helemaal bovenaan de tekens /* eens weg bijvoorbeeld. Zoals je ziet wordt het commentaar nu zwart want het telt mee als programma code. Welke melding krijg je nu in beeld als je upload? Maak hier een foto van die je opstuurd naar je docent!
In plaats van een blok commentaar kun je een kort regeltje commentaar toevoegen, dit zet je dan achter //. Kijk maar in het programma, daar staan ook dit soort regeltjes. Als het commentaar in een programma goed is, dan verteld het je precies wat er gebeurt.
Vol verwachting ;
Nog eentje. Zorg ervoor dat je programma weer goed werkt. Dit doe je door het commentaar dat je hebt zitten verzieken weer in orde te maken. Als de tekst grijs is, is het goed ... Klik op 'Upload'. De upload moet weer goed zijn en het lampje moet weer knipperen.
Als dat niet werkt en je komt er echt niet uit kun je ook het programma Blink weer openen bij de voorbeelden.
In het programma zie je de volgende regel code staan: delay(1000);
Zoals je ziet staat er aan het eind van de regel een puntkomma (daarna komt er nog wat commentaar, maar zoals je inmiddels weet kijken we daar fijn overheen want dat telt verder niet mee). Die puntkomma geeft aan dat dit het einde was van de instructie.
In dit geval is de instructie dat de arduino even moet wachten. 'delay' betekent tenslotte 'uitstellen' in het engels. Er staat ook een getal achter, dit geeft aan hoeveel miliseconden de arduino moet wachten. Zoals je in het commentaar kunt zien is dit een seconde. 1000 miliseconden is tenslotte een seconde.
Haal achter de delay instructie, de puntkomma eens weg. De instructie ziet er dan zo uit: delay(1000)
Upload het programma opnieuw. Als alles goed ging, ging het fout en heb je weer een mooie foutmelding staan: expected ';' before 'digitalWrite'
Enigszins vrij vertaald zegt het programma tegen je: Ik verwacht een puntkomma voor de functie 'digitalWrite'. Opletten dus want dit is een van de meestgemaakte fouten: Een puntkomma vergeten. Jij weet nu hoe de IDE je dit verteld!
In het rood zie je zelfs dat de IDE je verteld in welke tekstregel deze fout precies zat. Als je meerdere fouten in je code zou hebben kun je ze op deze manier een voor een aflopen.
Maak je programma Blink weer even in orde voordat je verder gaat.
Blink, en wat er gebeurt
Er staan heel veel regels code in Blink, maar nu hebben we het even over de volgende vier regels:
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
Tekst met daarachter iets tussen haakjes betekent meestal dat er een speciale functie gebruikt wordt. In dit geval worden hier twee functies gebruikt: 'delay' en 'digitalWrite'. Zie je die 'W' staat trouwens ... dat is een hoofdletter ... nog zoiets: functienamen beginnen meestal met een kleine letter, maar als ze eigenlijk uit meerdere woorden bestaan gebruik je geen spatie, maar begin je die woorden met een hoofdletter. In dit geval de woorden: digital en write.
Delay ken je al. Maar de functie 'digitalWrite' nog niet. Deze functie schrijft een digitale waarde naar iets. In het programma Blink schrijft het de waarde HIGH naar het ingebouwde led lampje: LED_BUILTIN. Daarna wacht het programma een seconde (delay(1000);
).
Vervolgens schrijft dan de waarde LOW naar het ingebouwde led lampje, en wacht daarna weer een seconde. Op de Arduino komt dat er zoals je al zag op neer dat het lampje aan wordt gezet, een seconde lang aan blijft, dan uit wordt gezet en een seconde lang uitblijft.
Tijd voor een experiment
Haal de laatste delay instructie eens helemaal weg (of zet '//' ervoor waardoor die regel nu als commentaar telt en niet meer meedoet). Upload het programma. Zoals je ziet blijft de led lamp nu aan staan. Wordt hij dan niet meer uitgezet? De regel digitalWrite(LED_BUILTIN, LOW);
zet hem toch weer uit?
Jazeker, dit gebeurt. Maar direct daarna gaat het programma weer bovenaan verder en daar staat toch echt dat de led weer aan moet. Tussen instructies op de Arduino zitten miljoenste seconden. Dit is te kort voor een mens om te zien dat de led uitgaat, en dus lijkt het voor ons of hij aanblijft.
Dat is dus de reden dat die delay instructie daar staat: Zo heeft het oog ook even tijd om te zien dat er iets wijzigt min of meer.
Zet de delay instructie weer eens terug zoals hij was en wijzig in de eerste of tweede delay de waarde eens naar bijvoorbeeld 500, 250 of 10000. Upload je programma en kijk eens wat er nu gebeurt?
Tijd voor een opdracht
Je weet nu hoe je dit knipperen kunt beinvloeden. Per aan / uit heb je dus deze vier regels code nodig. Je gaat dit programam nu uitbreiden door deze te wijzigen en vooral aan te vullen.
Je hebt misschien wel eens van morsecode gehoort. Meer daarover kun je vinden op de wikipedia pagina ervan: morsecode. Ergens halfverwege deze pagina staat het morse alfabet.
Jullie opdracht is de arduino met het ingebouwde led lampje jullie namen te laten knipperen. Bij een streep in de morsecode moet het lampje 3 seconden aanblijven, bij een punt slechts 1 seconde. Tussen de letters moet de lamp een seconde uit.
Een kleine tip omdat er anders dingen fout gaan: Voor deze vier regels code zie je void loop() {
staan, en na deze vier regels zie je }
staan.
Even heel simpel: 'loop' is zelf namelijk ook een functie. Alles dat tussen de void loop(){
en }
staat wordt meegenomen in deze functie.. Blijf hier dus binnen en zet je regel direct onder de vier welke er al staan.