Communicatie met een meetinstrument¶
Het hart van ieder experiment wordt gevormd door de metingen die worden uitgevoerd. Meetinstrumenten vervullen daarom een belangrijke rol bij het automatiseren van een experiment. De eerste stap die we zullen zetten tijdens het ontwikkelen van een applicatie is het communiceren met ons meetinstrument. We hebben gekozen voor een Arduino Nano 33 IoT,9 een zeer compact stukje elektronica rondom een ARM-microcontroller. Naast het uitvoeren van analoge spanningsmetingen kan dit model ook analoge spanningen afgeven dat voor ons heel nuttig gaat blijken. We hebben, speciaal voor dit vak, een stukje firmware1 ontwikkeld.10
Microcontrollers¶
Computers — zoals de meesten van ons die kennen — zijn zeer krachtig en ontworpen om zo flexibel mogelijk te zijn. Ze draaien games, e-mail of rekenen klimaatmodellen door. Ze komen in veel vormen: desktops, laptops, tablets en telefoons
. Ze bevatten daarom veel losse componenten: snelle processor (CPU), veel geheugen (RAM), veel permanente opslag (SSD), complexe interfaces (HDMI, USB) en een besturingssysteem waarmee je verschillende programma's kunt opstarten en de computer kunt beheren. Computers zijn behoorlijk prijzig.
Een microcontroller daarentegen is veel eenvoudiger. Ze zijn ontworpen voor een beperkte en specifieke taak. Ze hebben veel verschijningsvormen — de meeste onherkenbaar. Je vindt microcontrollers in de vaatwasser, de magnetron, een draadloos toetsenbord en auto's (letterlijk tientallen verspreid over de hele auto). Ze hebben dan een beperkte taak: ze reageren op de knopjes op je dashboard om het klimaat te regelen of een raam te openen en ze sturen de kleppen in een verbrandingsmotor aan. Microcontrollers bevatten CPU, RAM en SSD
vaak in één chip en hebben beperkte interfaces (vaak letterlijk losse pinnetjes die je moet verbinden). De CPU is relatief gezien traag en de hoeveelheid geheugen klein. Voor de beperkte taak is dat niet erg. Een besturingssysteem is niet nodig: als je hem aanzet draait hij meteen het enige programma dat ooit ingeladen is (dit heet dan firmware). Microcontrollers zijn goedkoop en daarom ook uitermate geschikt voor hobbyprojecten.
Een Arduino is zo'n microcontroller. Vaak wordt een Arduino vergeleken met een Raspberry Pi — een andere goedkope computer. Maar een Raspberry Pi is écht een computer (en daarmee ook complex). Daarmee is een Raspberry Pi veel veelzijdiger, maar ook duurder en is het complexer om een eenvoudig programma te draaien. Apparatuur zoals frequentiegeneratoren en oscilloscopen hebben vaak een microcontroller ingebouwd, maar soms ook een microcomputer analoog aan een Raspberry Pi. Dat maakt voor ons weinig verschil zolang we maar weten hoe we het instrument kunnen aansturen.
Communicatieprotocol¶
Hoe praat je eigenlijk met hardware? Voor fabrikanten zijn er een paar opties:
- Je maakt gebruik van een al bestaand protocol (een bestaande standaard en je schrijft vervolgens documentatie specifiek voor jouw instrument (bijvoorbeeld de VISA-standaard 11, o.a. gebruikt door Tektronix digitale oscilloscopen 12)
- Je schrijft een proprietary2 protocol en een bijbehorende bibliotheek die software-ontwikke-laars moeten gebruiken.3 Voorbeelden zijn instrumenten van National Instruments 13 of de PicoScope digitale oscilloscopen4 14.
De VISA-standaard is veelgebruikt, maar helaas komen proprietary protocollen veel voor. Dat is jammer, want in het laatste geval moet je het doen met de software die geleverd wordt door de fabrikant. Als die jouw besturingssysteem of favoriete programmeertaal niet ondersteunt heb je simpelweg pech.
Wij gaan gebruik maken van de VISA-standaard. VISA staat voor Virtual Instrument Software Architecture en is héél breed en definieert protocollen om te communiceren via allerlei verouderde computerpoorten en kabels. Hieronder zie je een voorbeeld van verschillende poorten zoals RS232 en GPIB aan de achterkant van een Tektronix TDS210 oscilloscoop.
Bron: Wikimedia Commons.
Maar gelukkig ook via internet en USB, waarvan wij gebruik zullen maken. Onderdeel van VISA is de SCPI standaard 15, wat staat voor Standard Commands for Programmable Instruments. Dit onderdeel definieert een bepaald formaat voor commando's die we naar ons instrument zullen sturen. De lijst met commando's die door de firmware van onze Arduino worden ondersteund is gegeven in de appendix.
Eerste stappen¶
Waarschuwing
Let op dat je de weerstand van 220 Ω gebruikt! Een te grote weerstand zorgt ervoor dat je nauwelijks iets kunt meten, maar een te kleine weerstand zorgt ervoor dat de stroomsterkte door de Arduino te groot wordt. In dat geval zul je de Arduino onherstelbaar beschadigen. De kleurcodes voor weerstanden vind je in de appendix.
Schakeling bouwen
Je maakt een schakeling om de spanning over en de stroom door een LED te meten. Hiervoor maak je gebruik van een Arduino en een breadboard. Om de stroomsterkte te beperken zet je de LED in serie met een weerstand van 220 Ω. Je sluit twee spanningsmeters aan, spanningsmeter 1 staat over de LED en de weerstand samen. Spanningsmeter 2 staat over de weerstand.
Theoretische schakeling
Het circuit zoals je dat zou bouwen met twee losse voltmeters is hieronder weergegeven. De cijfers 0, 1 en 2 bij $U_0$, $U_1$ en $U_2$ zijn de kanalen waarmee de Arduino spanningen kan sturen of uitlezen. Dat wordt zometeen belangrijk.
Praktische schakeling
In het 3D-model5 hieronder is een Arduino Nano 33 IoT op een 400-punt breadboard geschakeld met een LED en een weerstand van 220 Ω. In een breadboard zijn in iedere rij alle kolommen A t/m E met elkaar verbonden (zo ook kolommen F t/m J). Draadjes die naast elkaar zijn geprikt zijn dus met elkaar verbonden. De Arduino is geprikt in kolom D t/m H en van rij 1 t/m 15. De pin van de Arduino in rij 4 is verbonden middels het rode draadje (De kleur van de draden is niet belangrijk. Kies altijd draden met een handige lengte.) met het pootje van de LED. De platte zijde in de onderste ring van de LED wordt richting aarde geschakeld. Het ander pootje van de LED is verbonden met de weerstand. De kleurcodes voor weerstanden vind je in de appendix. Van de weerstand loopt een draadje naar de aarde van de Arduino (rij 12, kolom H). Zo kan de Arduino een variabele spanning zetten over de LED en de weerstand.
De pin van de Arduino in rij 5 is verbonden met de LED en meet de spanning over de LED en de weerstand. De pin van de Arduino in rij 6 is verbonden met de weerstand en meet alleen de spanning over weerstand.
3D besturing
Door de linkermuisknop ingedrukt te houden en te slepen kan je de het 3D model draaien, met rechtermuisknop kan je hem verplaatsen en door te scrollen kan je in- en uitzoomen.
Checkpunten:
- Je hebt een weerstand van 220 Ω gebruikt.
- De platte kant in de dikkere ring onderaan de plastic behuizing van de LED staat richting de aarde geschakeld. (Als de pootjes van de LED niet afgeknipt zijn, dan zit het korte pootje aan de platte zijde van de LED)
- De andere kant van de LED is met een draadje verbonden met de 4de rij.
- Er loopt een draadje van de 5de rij naar de LED.
- Er loopt een draadje van de 6de rij naar de weerstand.
- Er loopt een draadje van de andere kant van de weerstand naar de 12de rij (naar dat pinnetje met bovenop een wit vlakje).
Projecttraject:
- Schakeling bouwen
- Pyvisa in terminal
- Pyvisa
list
enopen
- Pyvisa
query
- Terminator characters demo
- Pyvisa regeleindes
- Pyvisa LED laten branden
Info
Om met Python via het VISA-protocol te kunnen communiceren met apparaten hebben we specifieke packages nodig. Die gaan we installeren in een conda environment. Voor meer informatie over conda environments zie paragraaf Conda environments.
Environment aanmaken
Open een Anaconda Prompt
die je kunt vinden via de zoekbalk van Windows. Maak de environment en installeer de juiste packages door in te typen:
Pyvisa in terminal
Je sluit de Arduino met een USB-kabel aan op de computer. In een Anaconda Prompt
open je het goede conda environment en open je een pyvisa-shell
met een python backend. Om erachter te komen hoe de pyvisa-shell
werkt type je het commando help
. Je ziet een reeks aan commando's en bekijkt de helptekst van de commando's waarmee je denkt de pyvisa-shell
te kunnen afsluiten. Wanneer je het afsluit commando hebt gevonden sluit je daarmee de pyvisa-shell
af.
Pseudo-code
# open pyvisa-shell with python backend
# check help of pyvisa-shell
# check help of exit command
# shut down the pyvis-shell
(ecpc) > pyvisa-shell -b py
Welcome to the VISA shell. Type help or ? to list commands.
(visa)
(visa) help
Documented commands (type help <topic>
):
========================================
EOF attr close exit help list open query read termchar timeout write
Checkpunten:
- Na het openen van een
pyvisa-shell
staat er (visa) tussen haakjes. - Als je
help
intypt verschijnt een heel rijtje met commando's. - Als je
help exit
intypt krijg je de hulpvaardige tekst:Exit the shell session.
- Als je de pyvisa-shell met een commando afsluit staat de naam van het conda environment weer tussen haakjes (en niet visa).
Projecttraject:
- Schakeling bouwen
- Pyvisa in terminal
- Pyvisa
list
enopen
- Pyvisa
query
- Terminator characters demo
- Pyvisa regeleindes
- Pyvisa LED laten branden
Info
We maken hier gebruik van de optie -b py
, wat staat voor gebruik backend: python. Het kan namelijk dat er, naast pyvisa-py
, ook andere backends, of drivers, geïnstalleerd staan op het systeem die de VISA-communicatie kunnen verzorgen. Als je bijvoorbeeld LabVIEW geïnstalleerd hebt, dan heb je de drivers van National Instruments. Maar de verschillende backends geven de aangesloten apparaten andere namen. Ook ondersteunen niet alle drivers alle types apparaten en moet je ze apart downloaden en installeren. Daarom maken we liever gebruik van de beschikbare Python drivers.
Pyvisa list
en open
Je bekijkt het lijstje met aangesloten apparaten door in de pyvisa-shell
het commando list
te typen. Je haalt de USB-kabel waarmee de Arduino aan de computer is aangesloten uit de computer en vraagt nogmaals de lijst met aangesloten apparaten op. Nu weet je welke poort de Arduino is. Je bekijkt de help tekst van het commando open
, daarna open je de communicatie met de Arduino.
Pseudo-code
Testcode(visa) list
( 0) ASRL3::INSTR
( 1) ASRL5::INSTR
( 2) ASRL28::INSTR
(visa) help open
Open resource by number, resource name or alias: open 3
Checkpunten:
- Na het commando
list
verschijnt er een lijst met een of meerdere apparaten. - Als de Arduino niet op de computer is aangesloten is er een apparaat uit het lijstje verdwenen.
- Als je de Arduino opent verschijnt de tekst:
ASRL?::INSTR has been opened.
You can talk to the device using "write", "read" or "query".
The default end of message is added to each message.
Projecttraject:
- Schakeling bouwen
- Pyvisa in terminal
- Pyvisa
list
enopen
- Pyvisa
query
- Terminator characters demo
- Pyvisa regeleindes
- Pyvisa LED laten branden
Pyvisa query
Je stuurt een commando naar de Arduino met query COMMANDO
. In de documentatie van de firmware heb je het commando opgezocht om de identificatiestring uit te lezen. Nadat je dit commando naar de Arduino stuurt krijg je een error. Je leest de handleiding rustig verder om erachter te komen hoe je dit moet oplossen.
Pseudo-code
Testcode(open) query gappie
Response: ERROR: UNKNOWN COMMAND gappie
Checkpunten:
- Je hebt het woord
query
goed geschreven en met kleine letters. - Na het commando
query
volgt een spatie. - Na de spatie staat het commando om de identificatiestring uit te lezen, met hoofdletters (en dat
*
en dat?
horen er ook bij!). - Als je het commando verstuurt hebt verschijnt er een error
Response: ERROR: UNKNOWN COMMAND .....
Projecttraject:
- Schakeling bouwen
- Pyvisa in terminal
- Pyvisa
list
enopen
- Pyvisa
query
- Terminator characters demo
- Pyvisa regeleindes
- Pyvisa LED laten branden
Niet helemaal wat we hadden gehoopt! Als je goed kijkt in de documentatie van de firmware dan zie je dat er bepaalde terminator characters nodig zijn. Dit zijn karakters die gebruikt worden om het einde van een commando te markeren. Het is, zogezegd, een enter
aan het eind van een zin. Dit mag je heel letterlijk nemen. Oude printers voor computeruitvoer gebruikten een carriage return (CR) om de wagen met papier (typemachine) of de printerkop weer aan het begin van een regel te plaatsen en een line feed (LF) om het papier een regel verder te schuiven. Nog steeds is het zo dat in tekstbestanden deze karakters gebruikt worden om een nieuwe regel aan te geven. Jammer maar helaas, verschillende besturingssystemen hebben verschillende conventies. Windows gebruikt nog steeds allebei: een combinatie van carriage return + line feed (CRLF).
Carriage Return Line Feed: Typewriter Demonstration
Maar MacOS/Linux/Unix gebruiken enkel een line feed (LF), want hoeveel meer heb je nodig? Af en toe is dat lastig, vooral wanneer er elektronica in het spel is want dan willen de regeleindes voor schrijven en lezen nog wel eens verschillend zijn.6
Terminator characters demo
Je vraagt je misschien af wat het betekent dat er bij het schrijven en lezen regeleindes gebruikt worden. Daarom open je de Termchar-demo. Je gaat naar de Basic tab, daar zie je twee inputvelden voor de client (dat ben jij) en de server (dat is de Arduino).
Je schrijft een commando measure_voltage
naar de Arduino (druk op Write). In het Input veld van de Arduino verschijnt jouw commando maar het staat nog niet in de Application Log, het is dus nog niet door de Arduino verwerkt. Want de Read Termination Characters van de Arduino zijn \n
(LF), die gaat dus pas lezen als die tekens zijn verstuurd. Je verstuurt \n
en ziet dat het commando wordt verwerkt en jij een antwoord krijgt.
Steeds \n
handmatig versturen is onhandig daarom voer je bij de Client als Write Termination Characters \n
in. Je verstuurt nog een commando measure_current
, drukt op Write en ziet dat het bericht direct door de Arduino wordt verwerkt en een antwoord terugstuurt.
In het Input veld van de Client staan twee antwoorden van de Arduino, als je nu op Read drukt blijven de termination characters in de antwoorden staan en moet je ze handmatig uit elkaar gaan halen. Dat is niet handig, daarom vul je bij de Read Termination Characters van de Client \r\n
(CRLF) in. Daarna druk je op Read en merk je dat de twee antwoorden apart uitgelezen worden, super handig!
Checkpunten:
- De Client Write Termination Characters is ingesteld op
\n
. - De Client Read Termination Characters is ingesteld op
\r\n
. - Bij het versturen van een bericht naar de server wordt deze verwerkt en krijgt de client een antwoord terug.
- Bij het lezen van het antwoord door de client komen geen termination characters in de Application Log te staan.
Projecttraject
- Schakeling bouwen
- Pyvisa in terminal
- Pyvisa
list
enopen
- Pyvisa
query
- Terminator characters demo
- Pyvisa regeleindes
- Pyvisa LED laten branden
Input buffer en timeout
Ga opnieuw naar de Termchar-demo en lees de laatste stappen van de Introduction tab. Open de Advanced tab en voer de stappen uit.
We gaan nu het gebruik van de karakters instellen in Pyvisa:
Pyvisa regeleindes
Je gaat weer terug naar de Anaconda prompt. Je gebruikt het commando termchar
om de regeleindes in te stellen. Om erachter te komen hoe je dit moet instellen vraag je de helptekst op met help termchar
. Je vraagt eerst de huidige regeleinde instellingen op en ziet dat deze niet goed staan. Daarna stel je de read in op CRLF en de write op LF. Je bekijkt nog een keer de regeleinde instellingen om te controleren of ze nu wel goed staan. Je gaat terug naar de opdracht Pyvisa query
en krijgt een response in plaats van een error.
\r\n en CRLF
Bij de Termination Characters demo maakten we gebruik van \r\n
dat is de programmeertaal equivalent van CRLF
.
Pseudo-code
# get help text of termchar
# what are the termchar settings?
# make read = CRLF and write = LF
# check if termchar settings are correct
# send query to get identificationstring
(open) help termchar
Get or set termination character for resource in use.
<termchar>
can be one of: CR, LF, CRLF, NUL or None.
None is used to disable termination character
Get termination character:
termchar
Set termination character read or read+write:
termchar <termchar>
[<termchar>
]
Checkpunten:
- De regeleindes zijn ingesteld met het commando
termchar
daarna een spatie, vervolgens de karakters voor de read thermchar, dan weer een spatie en daarachter de karakters voor de write termchar. - De read regeleindes staan ingesteld op CRLF.
- De write regeleinds staan ingesteld op LF.
- Als je met het commando
termchar
de instellingen van de regeleindes opvraag staat er:
- Als je met behulp van
query
het commando om de identificatiestring uit te lezen naar de Arduino verstuurt verschijnt de tekst:
Projecttraject:
- Schakeling bouwen
- Pyvisa in terminal
- Pyvisa
list
enopen
- Pyvisa
query
- Terminator characters demo
- Pyvisa regeleindes
- Pyvisa LED laten branden
Onzichtbare regeleindes
Omdat de Arduino nu weet wanneer het commando voorbij is (door de LF aan het eind van de zin
) krijgen we antwoord! Dat antwoord heeft dan juist weer een CRLF aan het eind dus pyvisa-shell
weet wanneer het kan stoppen met luisteren en print het antwoord op het scherm. De karakters CRLF en LF zelf blijven onzichtbaar voor ons.
Pyvisa LED laten branden
Je zoekt in de documentatie van de firmware op hoe je een spanning op het uitvoerkanaal zet. Je leest dat er een maximale waarde is voor de spanning en zet deze waarde op het uitvoerkanaal. Je ziet dat het LEDje brandt en er verschijnt een glimlach op je gezicht. Je bent benieuwd naar wat er gebeurt als je over de maximale spanning heen gaat en zet de maximale waarde + 1 op het uitvoerkanaal. Je denkt na over een verklaring voor wat je ziet gebeuren. Je weet dat een LED een drempelspanning nodig heeft om te branden, je vult een paar waardes in tussen de minimale en maximale waarde om erachter te komen wat deze drempelspanning is.
Checkpunten:
- Je stuurt een commando naar de Arduino met behulp van
query
. - Je hebt
query
goed geschreven en met kleine letters. - Je hebt het commando om een spanning op het uitvoerkanaal te zetten geschreven met hoofdletters.
- Je zet een spanning op het uitvoerkanaal
0
. - Achter het kanaalnummer staat een spatie.
- Na de spatie staat een geheel getal tussen de 0 en de 1023.
- Als je de waarde 828 naar het uitvoerkanaal 0 stuurt gaat de LED branden.
Projecttraject:
- Schakeling bouwen
- Pyvisa in terminal
- Pyvisa
list
enopen
- Pyvisa
query
- Terminator characters demo
- Pyvisa regeleindes
- Pyvisa LED laten branden
Een eenvoudig script¶
We hebben via de shell contact gelegd met de hardware. Nu wordt het tijd om, met de documentatie16 in de aanslag, hetzelfde vanuit Python te doen. Als je met een nieuw project begint is het helemaal geen gek idee om een kort script te schrijven waarin je wat dingen uitprobeert. Als alles lijkt te werken kun je het netjes gaan maken en gaan uitbreiden. We beginnen hier met een eenvoudig script en zullen dat daarna gaan verfijnen.
We lopen het voorbeeldscript eerst regel voor regel door en geven het volledige script aan het eind. Allereerst importeren we de pyvisa
-bibliotheek met
"\r\n"
) en het schrijven (LF, "\n"
):
Ten slotte sturen we een query naar de Arduino:
Het volledige script — met een paar print
-statements — ziet er dan als volgt uit:
import pyvisa
rm = pyvisa.ResourceManager("@py")
ports = rm.list_resources()
print(ports)
device = rm.open_resource(
"ASRL28::INSTR", read_termination="\r\n", write_termination="\n"
)
identification = device.query("*IDN?")
print(identification)
(ecpc) > python test_arduino.py
('ASRL28::INSTR',)
Arduino VISA firmware v1.0.0
De output van het script is afhankelijk van het systeem en het aantal apparaten dat verbonden is.
Vergelijk pyvisa-shell met Python code
Je hebt nu precies hetzelfde gedaan in Python als in de pyvisa shell. Vergelijk de verschillende stappen hieronder met elkaar door met de muis over de tekst heen te gaan.
Pyvisa in pythonscript
ECPC
en maakt een bestand test_arduino.py
aan. Je kopieert de Python code in het bestand. Je ziet dat de code gebruikt maakt van de package pyvisa
daarom selecteer je de environment die je bij opdracht Environment aanmaken hebt gemaakt. Je slaat het bestand op en runt het bestand.
ECPC
├──
test_arduino.py
└──•••
could not open port 'COM28': FileNotFoundError
Krijg je een FileNotFoundError
? Dan kan het zijn dat het script een poort probeert te openen die bij jou een andere naam heeft. Probeer met het lijstje instrumenten te raden welke de Arduino is en pas het script aan totdat het werkt.7
could not open port 'COM3': PermissionError
Krijg je een PermissionError
? Dan heb je vast nog een terminal openstaan waarin pyvisa-shell
actief is.
Pseudo-code
TestcodeCheckpunten:
- Je hebt het juiste conda environment geselecteerd (zie ook paragraaf Conda environments).
- Je hebt het de juiste naam van de Arduino in het script aangepast (als jouw Arduino niet 'ASRL28::INSTR' heet).
- Je hebt alle terminals (ook Anaconda Prompt) gesloten waarin communicatie met de Arduino open stond.
Projecttraject:
- Pyvisa in pythonscript
- LED laten branden
- flashingLED
- Van bestaande map repository maken
- Commit
- Push en pull
LED laten branden
test_LED.py
aan in de map ECPC
. Je schrijft eerst een regel code waarmee je een commando naar de Arduino stuurt waardoor de LED gaat branden. Daarna schrijf je de code om zodat de spanning oploopt van de minimale waarde tot aan de maximale waarde.
ECPC
├──
test_arduino.py
├──
test_LED.py
└──•••
f-strings
Het sturen van commando's naar de Arduino waar een variabele spanning in staat gaat gemakkelijk met f-strings. Voor meer informatie zie de paragraaf f-strings.
Pseudo-code
# import pyvisa package
# create resourcemanager
# get list resources
# open device
#
# for value in min to max
# send query set output channel to value
Checkpunten:
- Je hebt het juiste conda environment geselecteerd (zie ook paragraaf Conda environments).
- Je hebt het de juiste naam van de Arduino in het script aangepast (als jouw Arduino niet 'ASRL28::INSTR' heet).
- Je hebt alle terminals (ook Anaconda Prompt) gesloten waarin communicatie met de Arduino open stond.
- Je laat de spanning oplopen van de minimale tot de maximale waarde.
- Als je goed kijkt zie je de LED vertraagd oplichten.
- Als je de waarde op kanaal 0 opvraagd aan het eind van de reeks met
OUT:CH0?
krijg je1023
terug.
Projecttraject:
- Pyvisa in pythonscript
- LED laten branden
- flashingLED
- Van bestaande map repository maken
- Commit
- Push en pull
flashingLED
flashingLED.py
aan in de map ECPC
waarin je code schrijft die de LED in een regelmatig tempo laat knipperen.
ECPC
├──
test_arduino.py
├──
test_LED.py
├──
flashingLED.py
└──•••
Info
Je kan hiervoor gebruik maken van de module time die standaard met Python meekomt8. Met de functie sleep()
kun je de executie van de volgende regel in het script met een aantal seconden uitstellen.
Pseudo-code
TestvoorbeeldCheckpunten:
- De LED staat een tijd aan en een tijd uit.
- Het aan en uitgaan van de LED herhaald zich enkele keren.
Projecttraject:
- Pyvisa in pythonscript
- LED laten branden
- flashingLED
- Van bestaande map repository maken
- Commit
- Push en pull
Meer knipperritmes
Breid het bestand flashingLED.py
uit met meer knipperritmes, bijvoorbeeld:
- Maak een SOS light — een lamp die in morsecode het signaal SOS uitzendt.
- Maak een breathing light — een lamp die langzaam aan en uit gaat gevolgd door een pauze in het tempo dat iemand in- en uitademt.
- Maak een heartbeat light — een lamp die twee keer kort na elkaar flitst gevolgd door een pauze in het tempo van een hartslag.
- Bedenk je eigen knipperritme.
-
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. ↩ -
Proprietary betekent dat een bedrijf of individu exclusieve de rechten heeft over het protocol of de software en anderen geen toegang geeft tot de details. ↩
-
Niet zelden zijn dergelijke bibliotheken maar op een paar besturingssystemen beschikbaar als driver. Gebruik je MacOS in plaats van Windows en het wordt alleen op Windows ondersteund? Dan kun je je dure meetinstrument dus niet gebruiken totdat je overstapt. ↩
-
Die overigens op vrijwel alle platforms en voor veel programmeertalen bibliotheken leveren. ↩
-
Dit model bevat twee 3D modellen die zijn gecreëerd door Lara Sophie Schütt en AppliedSBC en zijn gedeeld onder respectievelijk een CC-BY en CC-BY-SA licentie. De originele modellen zijn te vinden via [CC0] Set of Electronic Components en Arduino Nano 33 IoT. De modellen zijn samengevoegd en Voorzien van een Arduino texture een aangepaste LED texture en draden. Dit 3D model heeft een CC-BY-SA licentie. ↩
-
De regeleindes voor de Arduinofirmware zijn verschillend voor lezen en schrijven. Dit heeft een oninteressante reden: bij het ontvangen van commando's is het makkelijk om alles te lezen totdat je één bepaald karakter (LF) tegenkomt. Bij het schrijven gebruikt de standaard
println
-functie een Windows-stijl regeleinde (CRLF). ↩ -
Tip: als je de Arduino loshaalt en weer aansluit is het de nieuwe regel in het lijstje. ↩
-
Zie ook: The Python Standard Library ↩
-
Arduino AG. Arduino nano 33 iot. URL: https://store.arduino.cc/arduino-nano-33-iot. ↩
-
David B.R.A. Fokkema. Arduino visa firmware. 2020. URL: https://github.com/davidfokkema/arduino-visa-firmware. ↩
-
IVI Foundation. Vpp-4.3: the visa library. 2018. URL: https://www.ivifoundation.org/downloads/Architecture Specifications/IVIspecstopost10-22-2018/vpp43_2018-10-19.pdf. ↩
-
Tektronix, Inc. URL: https://www.tek.com/. ↩
-
National Instruments Corp. URL: https://www.ni.com/. ↩
-
Pico Technology Limited. URL: https://www.picotech.com/. ↩
-
SCPI Consortium. Standard commands for programmable instruments (scpi). 1999. URL: https://www.ivifoundation.org/docs/scpi-99.pdf. ↩
-
PyVISA Authors. Pyvisa: control your instruments with python. URL: https://pyvisa.readthedocs.io/en/latest/. ↩