Skip to content

Introductie

Welkom bij de Experiment Control with Python Course. Deze cursus wordt aangeboden aan studenten van de joint degree Natuur- en Sterrenkunde van de Universiteit van Amsterdam en de Vrije Universiteit Amsterdam, en wordt gegeven door Annelies Vlaar (a.m.vlaar@vu.nl) en David Fokkema (d.b.r.a.fokkema@vu.nl).

Het doel van deze cursus is om je kennis te laten maken met het aansturen en uitlezen van een experiment. Bij heel eenvoudige experimenten kun je metingen één voor één verrichten en ruwe data noteren in je labjournaal, bijvoorbeeld bij het meten van de trillingstijd van een slinger bij verschillende lengtes. Maar al snel wordt dat ondoenlijk, bijvoorbeeld wanneer je de hele beweging van de slinger wilt volgen met een ultrasoon afstandsdetector. In een gemiddeld lab worden alle experimenten via de computer aangestuurd en uitgelezen. Voor standaard handelingen zoals het bekijken van een sample onder een elektronenmicroscoop of het opnemen van een spectrum van een radioactieve bron kun je de door de fabrikant meegeleverde software gebruiken. Maar vaak is die software óf heel duur terwijl je maar een klein deel van de functionaliteit nodig hebt, óf ongeschikt voor jouw doeleinden. En heel vaak voer je géén standaardexperiment uit, maar ben je een nieuw experiment aan het opzetten. In dat geval is er helemaal geen software voorhanden. Je zult dan zelf aan de slag moeten.

We willen je in deze cursus niet alleen maar leren om zelf een applicatie te schrijven voor het uitvoeren van een snelle meting, maar ook hoe je de code netjes schrijft. Als je straks een bachelorproject doet, een masterstage of een promotieonderzoek, dan wil je code schrijven die ook na de afronding van je project of de verdedeging van je proefschrift nog bruikbaar is. Ook zullen andere onderzoekers aan dezelfde code werken. Het is dus belangrijk om te zorgen voor een duidelijke structuur waarmee de code overzichtelijk blijft maar ook makkelijk is aan te passen of uit te breiden.

Je gaat in deze cursus aan de slag met een Arduino. De Arduino bevat firmware1 waarmee het zich gedraagt als een meetinstrument en kan communiceren met de computer volgens een standaardprotocol dat ook geïmplementeerd wordt door onder andere functiegeneratoren en oscilloscopen.

Werk van anderen

Over Python wordt veel geschreven en er zijn tal van (professionele) trainingen die je kunt volgen. Over de hele wereld zijn conferenties en er is vermoedelijk geen universiteit meer te vinden waar Python niet wordt gebruikt. Deze cursus is niet in een vacuüm ontstaan. Voordat deze cursus in studiejaar 2020-2021 voor het eerst gegeven werd is jarenlang de cursus Experimentautomatisering met LabVIEW gegeven aan de Vrije Universiteit Amsterdam door Jan Mulder en Gerrit Kuik. Deze cursus is de spirituele opvolger van de LabVIEW-cursus. Een website (en boek!) met eenzelfde soort insteek is Python for the lab van Aquiles Carattino.3 Op de website is veel informatie te vinden over hoe je Python gebruikt (slots, singletons, multiprocessing) en met verschillende soorten hardware communiceert (van onder andere National Instruments en Basler). In het boek leer je hoe je een eenvoudig experiment opzet en aanstuurt vanuit Python, heel vergelijkbaar met het eerste deel van deze cursus. Zowel in deze cursus als in het boek is gekozen voor het diode-experiment (project 1 uit het Arduino Projects Book dat meegeleverd wordt met de Arduino Starter Kit). Een groot verschil is dat je in deze cursus leert over versiebeheer, command-line interfaces en project management met Poetry.

Voor het eindfeest automatiseren we een zonnecelexperiment. Het idee hiervoor is gebaseerd op het experiment dat we uitvoeren in het eerste jaar. Hoewel hetzelfde eerder gedaan is door o.a. Chenni et al.4 en Hammoumi et al.5 met LabVIEW, is de schakeling die in deze cursus gebruikt wordt door ons ontworpen om de noodzaak van een relatief dure stroomsterktesensor te vermijden. Ook wordt de schakeling daardoor fysisch gezien wat interessanter.

Deze cursus is oorspronkelijk opgezet door David Fokkema maar in de jaren daarna door Annelies Vlaar aanzienlijk verbeterd. De cursus heeft nu een veel sterkere focus (minder belangrijke zaken zijn verwijderd) en de opbouw is flink aangepakt. In 2024 heeft Annelies Vlaar ook een subsidie toegekend gekregen om de cursus verder te verbeteren door een aantal studentassistenten in te huren. We zijn veel dank verschuldigd aan Olivier Swaak, Derk Niessink, Amin Rouan Serik, Thijs de Zeeuw en Fijke Oei.

Notatie

We zullen in deze handleiding vaak Engelse termen gebruiken, ook als Nederlandse termen voorhanden zijn. Bijvoorbeeld: list in plaats van lijst, class in plaats van klasse. Dit doen we omdat deze Engelse termen veel meer ingeburgerd zijn en omdat voor sommige van de Engelse termen geen goede vertalingen zijn. Liever wat consequenter Engelse termen gebruiken dan alles door elkaar!

In deze handleiding kom je twee verschillende opdrachten tegen: Pythoncode en systeemopdrachten. Voor Pythoncode geldt dat je in Visual Studio Code een nieuw bestand moet aanmaken met de extensie .py en dat je daarin de code kunt typen. Vervolgens kun je het script runnen en geeft Visual Studio Code de uitvoer terug. In deze handleiding zal dat als volgt worden weergegeven:

python_code.py
# I am a script. I am in a colored block
# and the Python code has colored syntax.

def my_func(x):
    return x ** 2

print(my_func(2))
(ECPC) > python python_code.py

Linksboven kun je op de -icoon klikken om de output van de code te zien. Rechtsboven in het blok staat een -icoon. Als je daar op klikt dan wordt de hele code gekopieerd naar het klembord en kun je het in Visual Studio Code weer plakken met Ctrl+V.

Ook zul je soms systeemopdrachten moeten uitvoeren. Je wilt bijvoorbeeld nieuwe Pythonbibliotheken installeren of je nieuw-gebouwde applicaties testen. Dit doen we vanuit de terminal. De terminal biedt een zogeheten command-line interface voor het systeem. Dit in tegenstelling tot een grafische interface.2 Met deze notatie laten we zien hoe je my-script.py met python kunt runnen:

Terminal
python my-script.py
Zoals je ziet hebben we de prompt (bijvoorbeeld >) weggelaten zodat je makkelijker commando's kunt kopiëren en plakken. Wanneer we ook de uitvoer van commando's laten zien is het handiger om onderscheid te maken tussen het commando en de uitvoer. Nu geven we wel de prompt weer ((ECPC) >). Door op het -icoon te klikken wordt de uitvoer zichtbaar.

(ECPC) > python --version 

We maken veel gebruik van conda environments. Hierboven zie je de naam van de conda environment tussen ronde haakjes staan, in dit geval heet de conda environment ecpc. In de voorbeeldcode staat standaard de ecpc conda environment, maar welk conda environment je moet gebruiken hangt van de opdracht af.

Opgaves

In de handleiding staan verschillende opgaves. Sommige opgaves zijn bedoeld als oefening en andere opgaves moet je inleveren voor feedback en een beoordeling. Schrijf je code in het Engels, zo ben je voorbereid op het werken in een internationale onderzoeksgroep.

Info

In sommige programmeercursussen is het de bedoeling dat je een bepaald algoritme zelf schrijft. Je moet bijvoorbeeld een loop schrijven om een reeks berekeningen uit te voeren en mag dan niet gebruik maken van de NumPy-bibliotheek om dat in één regel te doen. Je kunt je voorstellen dat als je straks in een lab werkt dat je juist gebruik wilt maken van bibliotheken die het leven een stuk gemakkerlijker maken. Trek dus alles uit de kast. Kijk eens in de Python Standard Library,6 de Python Package Index7 of Awesome Python8.

Basisopdracht

Deze opgaves helpen je om het niveau te behalen wat van je verwacht wordt. Ze worden niet beoordeeld. Hierboven zie je drie tabbladen opdracht, code en check. Klik op code om naar het volgende tabblad te gaan.

Pseudo-code

# in de pseudo-code vind je code 
# om je verder op weg te helpen
Testcode
Testcode.py
# gebruik (delen van) deze code om je opdracht te testen
# bekijk de output van deze code
# ga daarna naar het tabblad "check"
(ECPC) > python Testcode.py

Checkpunten:

  • De checkpunten in deze lijst helpen je om te zien of je op de goede weg bent.
  • Je kunt de checkpunten zelf afvinken. Klik daarvoor op het grijze vinkje links van deze zin.

Projecttraject

  • Je bouwt voort op oude opgaves.
  • Opgaves waarvoor een groen vinkje staat, heb je al gemaakt...
  • ... of het is de opgave waar je nu mee bezig bent.
  • Opgaves zonder vinkje volgen nog.
  • Zo kun je altijd zien waar je in het projecttraject bent.

Voorbereidende opdrachten

Sommige opgaves hebben een icoontje met een huis en een laptop voor de titel. Deze opgaves zijn voorbereidende opdrachten die je voorafgaand aan een sessie maakt. Deze opgaves bereiden je voor op de stof van de betreffende sessie. Vragen over deze opgaves kun je in de les stellen.

Inleveropdracht

Deze opgaves moet worden ingeleverd voor feedback en een beoordeling. Je herkent ze aan de groene kleur. De opgaves bouwen op elkaar voort. Je levert alle opgaves van een projecttraject als geheel in. Kijk daarom goed bij het projecttraject in het tabblad check welke groene opgaves je gemaakt moet hebben voordat je het inlevert.

Vaak heb je kennis en/of vaardigheden nodig die je eerder hebt geleerd. Zie je een lampje staan? Klik dan bovenin de blauwe balk (rechtsboven, naast de zoekbalk) op het lampje om de spiekbriefjes te openen.

Meer leren

Dit zijn verdiepende en verbredende opgaves om je te kunnen ontwikkelen tot een goed programmeur en een waardevolle aanwinst voor een onderzoeksgroep. Je kunt er geen extra punten mee verdienen wanneer je deze technieken toepast in je inleveropdrachten, maar het is wel een goede oefening. Doe deze opgaves alleen als je klaar bent met álle opgaves van het projecttraject.

Een basiskennis van Python is nodig om de opgaves te kunnen maken. In de paragraaf Basiskennis Python vind je opdrachten om je kennis te testen. Het is handig om ook een uitgebreidere Python kennis te hebben, meer informatie vind je in de paragraaf Uitgebreidere Python kennis.


  1. Firmware is software die in hardware is geprogrammeerd. Bijvoorbeeld het computerprogramma dat ervoor zorgt dat je magnetron reageert op de knoppen en je eten verwarmd. 

  2. Er bestaan verschillende terminal emulators, meestal afhankelijk van het besturingssysteem — al heeft Windows zelf al drie verschillende prompts: de command prompt, de powershell prompt en tegenwoordig (voorkeur) de Windows Terminal. Een terminal ziet eruit als een tekstvenster. Hierbinnen verschijnt een prompt. Dit is een klein stukje tekst dat aangeeft waar je je opdrachten kunt intypen. In MacOS en Linux is de prompt vaak een $-teken. In Windows ziet het er vaak uit als C:\> of PS>. In veel documentatie op internet wordt de $-prompt gebruikt. 

  3. Aquiles Carattino. Python for the lab. URL: https://pythonforthelab.com

  4. Rachid Chenni. Tracing current-voltage curve of solar panel based on labview arduino interfacing. Bilişim Teknolojileri Dergisi, 8:, 09 2015. URL: https://www.researchgate.net/publication/283037607_Tracing_current-voltage_curve_of_solar_panel_Based_on_LabVIEW_Arduino_Interfacing

  5. A El Hammoumi, S Motahhir, A Chalh, A El Ghzizal, and A Derouich. Real-time virtual instrumentation of arduino and labview based pv panel characteristics. IOP Conference Series: Earth and Environmental Science, 161(1):012019, jun 2018. doi:10.1088/1755-1315/161/1/012019

  6. Python Software Foundation. The python standard library. URL: https://docs.python.org/3/library/

  7. Python Software Foundation. Python package index. URL: https://pypi.org

  8. Vinta Chen. Awesome python. URL: https://awesome-python.com