Arduino-oscilloscoop verbeterd

Een Arduino heeft analoge ingangen die het mogelijk maken om de elektrische
spanning van een signaal te meten als functie van de tijd: een oscilloscoop.
Er zijn op het internet flink wat projecten te vinden die dat idee hebben
uitgewerkt maar om de een of andere reden kwam ik het eerst uit bij de Poor Man’s
Oscilloscoop.

Het na-programmeren van dit project verliep soepel, maar toen ik probeerde
een 16 Hz blokgolf op te meten bleek al snel dat de programmatuur te weinig
samples van het signaal wist weer te geven. Je kunt dan twee dingen doen:
een andere instructie met andere programmatuur proberen of de code debuggen.
Een echte maker kiest natuurlijk voor het laatste. Dit debuggen verliep via
de volgende stappen:

  1. kan de Arduino wel voldoende snel metingen doen? Met wat extra coderegels kan de Arduino dat zelf opmeten. Mijn eigen UNO R3 bleek te komen tot 8000 samples per seconde, ruim voldoende dus om een 16 Hz blokgolf in detail te samplen.
  2. dan ligt het waarschijnlijk aan het weergavescript in de Processing IDE. Als eerste probeerde ik het ophalen van de samples uit de drawing loop te halen. Dat gaf wel enige verbetering, maar zat nog ver van de 8000 samples per seconde.
  3. de tweede verdachte plek in het weergavescript was het uitlezen van meetwaarden op de seriële interface. Ook hier wat extra coderegels toegevoegd om zichtbaar te maken wat hier precies gebeurt. Wat blijkt: de bibliotheek van de Processing IDE leest bytes van de seriële interface in minimale aantallen van 96 bytes. De oorspronkelijke software gebruikte maar 3 bytes hiervan, dus de sampling werd zo 32 keer langzamer dan mogelijk.

Met deze wetenschap was de oorspronkelijk software snel aangepast en de twee plaatjes hieronder laten de verbetering mooi zien.

Natuurlijk is het ook mogelijk om voor weinig geld een simpele oscilloscoop bij AliExpress te bestellen, maar het mooie van een laptop + Arduino is dat je die altijd bij je hebt. Zo heb je een extra meetinstrument gebruiksklaar.