Arduino - Improved Poor Man's Oscilloscope





Introduction: Arduino - Improved Poor Man's Oscilloscope

This Instructable continues the work presented here.  It provided a quick and easy way to turn your Arduino into an oscilloscope, though I found that usability was lacking.  I revamped the software this morning to allow for much better functionality and usability and have provided the new software here.  I haven't fully tested it out yet, so please post bugs in the comments.  Also, this is still a fairly limited scope, so don't expect too much in terms of performance.  To reiterate the other Instructable:

First, download Processing (free).
Second, download both the Arduino and Processing code I've provided here.
Third, upload the Arduino code and run the Processing code.

If you examine the Processing software, you will notice that a number of hot keys have been defined.  I won't repeat them here, but please take a look so you know the basic functionality.  These hot keys can quickly be edited to your liking.  Also, if you're having a hard time getting Processing to select the right com port there is a variable for that (note that this variable is the index in the list of available ports).

Lastly, I've added the ability to output a 2Hz square wave on the Arduino.  Connect this pin to your analog input to test the scope.  Enjoy!

10 People Made This Project!


  • Epilog Challenge 9

    Epilog Challenge 9
  • First Time Author Contest 2018

    First Time Author Contest 2018
  • Sew Warm Contest 2018

    Sew Warm Contest 2018

We have a be nice policy.
Please be positive and constructive.




Does this oscilloscope display sine wave; triangular wave also??

This is a great tool for my occasional hobbyist use. I use the free Soundcard Oscilloscope from for signals above 20 Hz. I want to monitor an opto-coupled signal from the relatively slow rotations of the disk on my Electric meter for my current project, an Arduino based house power meter, so this DC coupled Arduino scope is perfect.

I'm thinking about building a scope with this and a RPI + LCD.

Would I be able with some code modification to do multichannel?

Great Project, also used the pull-down resistor to clean up the noise, works really well!

Nice project and thank you. Haven't been able to get my hands on a real scope...yet! so this is perfect for my BB projects.. thanks! i used your code and it works great! i'm on linux 64bit (ubuntu16)
the processin script i had to change Line 77 to

port = new Serial(this, "/dev/ttyACM0");

so it would detect my com.

i have a uno r3.

could you tell me the max frequency this thing can read please?

also, anything up to 5v is ok for A0 but anything above 5v needs a voltage divider and a buffer circuit? is that right?

Little update to get it to work well what i had to do on windows 10 and process 3.0.2
Had to change the word [com_port] to [0]
If you try and run the program and it freezes it will show an error the line with this command

Awesome project....this will help greatly. Do you think its possible to have it output to a ascii file?

Is it possible to modify this for -ve and +ve voltages?