Overleg:Arduino lessen

Uit Lab
Naar navigatie springen Naar zoeken springen

Uitgangspunten en doelstellingen

Arduino als bouwdoos

Het doel van deze Arduino-lessen is om de Arduino te leren kennen als een bouwdoos, met bouwstenen en regels voor het combineren daarvan. Hierbij speelt de conceptuele basis een belangrijke rol: deze concepten hebben ook buiten de Arduino-wereld betekenis. Je kunt veel van wat je leert in deze Arduino-omgeving toepassen bij andere "embedded systemen".

De Arduino-wereld is inmiddels al veel meer dan alleen de Arduino UNO en andere Atmega-gebaseerde systemen. Niet alleen is de Arduino-hardware uitgebreid met andere soorten microcontrollers, zoals de ARM-M0, maar de Arduino software (IDE) is ook te gebruiken voor veel andere hardware, bijvoorbeeld de ESP8266- en ESP32-gebaseerde systemen.

Als je de Arduino als een bouwdoos kunt gebruiken, dan kun je ook je eigen projecten maken: je bent niet beperkt tot het nabouwen van tutorials en projecten van anderen.

Programmeren als voorkennis

We gaan ervan uit dat leerlingen eerder kennisgemaakt hebben met programmeren in een tekst-gebaseerde taal.

Arduino is niet de meest geschikte omgeving om leerlingen kennis te laten maken met programmeren, of zelfs met "physical computing": daar zijn bijvoorbeeld Scratch en de microbit beter voor geschikt. De Arduino-programmeertaal is niet de meest "gebruikersvriendelijke". Nu is dat in veel gevallen niet zo'n probleem, omdat de meeste Arduino-programma's niet erg ingewikkeld zijn. Dit betekent ook dat Arduino niet een geschikte omgeving is om je programmeerkennis uit te breiden - behalve voor het programmeren van "embedded systems".

Opbouw van het materiaal

Het Arduino-materiaal op deze website bestaat uit de volgende onderdelen:

  • lessen: praktische opdrachten met bijbehorende vragen en experimenten;
  • achtergrondmateriaal, met een uitgebreidere uitleg van de verschillende concepten en onderdelen;
  • cheatsheets: een beknopte samenvatting van het achtergrondmateriaal, om te gebruiken bij het praktisch werk.
  • (docentenmateriaal)

Opbouw van een les

Een les bestaat uit de volgende onderdelen:

  1. inleiding: doel, voorkennis, nodige hardware-onderdelen, nodige software
  2. tutorial: nabouwen van een gegeven schakeling en programma, met een uitleg over de werking.
  3. vragen en experimenten - gericht op het begrijpen van de schakeling en het programma.
  4. extra vragen en experimenten - gericht op uitbreiding en verdieping

Alle leerlingen moeten de eerste drie onderdelen kunnen begrijpen en uitvoeren - binnen redelijke tijd. De extra vragen en opdrachten zijn optioneel, maar in principe voor alle leerlingen zinvol.

Manier van werken

Er zijn twee aspecten aan het werken met Arduino's die soms strijdig zijn:

  • de kortste weg naar een aansprekend resultaat;
  • werken op zo'n manier dat je begrijpt wat je doet.

We gaan ervan uit dat leerlingen een eerste kennismaking met programmeren en met "physical computing" gehad hebben, bijvoorbeeld met behulp van de microbit. Bij zo'n eerste kennismaking is vooral de kortste weg naar een leuk resultaat van belang, voor de motivatie van de leerlingen.


Bij het uitvoeren van de lessen zijn de volgende aspecten van belang:

  • neem kleine stappen - en controleer steeds het resultaat
  • probeer steeds te begrijpen wat je doet
    • soms kun je je begrip vergroten door een klein experiment te doen, bijvoorbeeld door een kleine variatie in de schakeling of in het programma.
  • werk netjes, en houd je aan de "style guide" voor hardware en software.

Kleine stappen

Neem steeds een kleine stap, en test het resultaat.

  • probeer de "minimale stap" te nemen die je dichter bij het resultaat brengt;
  • testen van een hardware-stap:
    • met alleen hardware (bijv. extra LEDje, schakelaar, draad)'
    • met aansturing vanuit Firmata (je gebruikt dan directe besturing vanuit de host);
    • met een speciaal testprogramma (zo eenvoudig mogelijk! ook testprogramma's kunnen fouten bevatten);
  • testen van een software-stap:
    • gebruik van print-opdrachten (Serial.print(...);

Soms moet je de software en de hardware beide aanpassen, bijvoorbeeld als je een onderdeel op een bepaalde pin aansluit. Ook in dit geval kan bijv. ee extra LED op de pin je de nodige informatie geven.

In een embedded system is het niet altijd mogelijk om met "print" statements te werken. Je hebt niet altijd een host-verbinding; en een print-opdracht kost tijd: dit kan de timing van je systeem in de war schoppen. In zo'n geval kan een extra LEDje soms als indicator soms uitkomst bieden.

Bij "test driven development", een professionele manier van software-ontwikkeling, is er sprake van een reeks testen waar de software op dat moment aan voldoet. Een stap in de ontwikkeling bestaat uit het bedenken van een volgende (kleine) test voor deze reeks; vervolgens wordt de software uitgebreid zodat deze ook aan de nieuwe test voldoet. De stappen die hierbij gebruikt worden zijn erg klein: vaak komen deze overeen met enkele regels code.

Hoe kunnen we dit ondersteunen in de lessen?

We proberen de lessen op zo'n manier op te bouwen dat je steeds gebruik kunt maken van de dingen die je in de vorige lessen gedaan hebt.

  • Het is dan wel belangrijk om de onderdelen van de vorige lessen op je breadboard te laten zitten, zodat je die niet steeds opnieuw hoeft op te bouwen. En, als je het breadboard wel opnieuw moet opbouwen, dan kun je de programma's uit de vorige lessen gebruiken voor het testen van de onderdelen.
  • Dit betekent dat we voor bijv. schakelaars en LEDs eigenlijk steeds dezelfde Arduino-pinnen moeten gebruiken.
  • We moeten niet alleen de basisschakeling geven van bepaalde onderdelen, maar ook de manieren om die schakeling te testen.
  • Het testen van i2c-onderdelen is een stukje lastiger. Een voordeel van dit interface is dat hiervoor weinig draden nodig zijn: de kans op fouten is erg klein.
    • als eerste test gebruik ik eigenlijk altijd de adres-scanner. Deze geeft niet alleen aan of de i2c-bus werkt, maar ook wat de gebruikte adressen zijn. (Die zijn soms anders dan je denkt, bijvoorbeeld in het geval van het display-interface.)