Previously, I posted a tutorial on Raspberry Pi-Pico Oscilloscope. And that was a great success. Keeping portable options in mind, I found this pretty mini oscilloscope between thousands of pages of a Japanese website. We are using a mini-OLED 128X64 to display the signal waveform, Frequency, duty cycle. 4 tactile buttons are used to change the modes, Volts/Divisions, and time/Divisions. So, I tried this, and the results are here.


Note* This project is only for educational purposes and shows the capabilities of a 16Mhz 8-bit microcontroller board. This MCU Can support frequencies below 50KHz, so it can’t be applicable for commercial and professional uses. That way, the project can also be entitled POOR MAN OSCILLOSCOPE for me.

Arduino Nano/Uno:

Both the boards have the same 8-bit Atmega328p microcontroller to use any of them. This tutorial uses I2C communication to print the readings on an OLED display. Our microcontroller has 6-channel 10-bit ADC, 13 digital I/O pins, and an 8Mhz internal clock.

audio signal.gif

That's why I tried the project on breadboard first. I want to know the plus/minus points of this oscilloscope. This project is sponsored By JLCPCB, Pcb, code and circuit diagram to this project is given below. Download all Gerber file from here and Quote for PCB on JLCPCB just in $2, On first sign-up from here you will get worth $30 coupons to order PCB.

For PC: mobile phone:


  • Single-channel -20Khz bandwidth
  • Onscreen- Volt/Div and Time/Div
  • Duty cycle monitoring
  • Small 0.96-inch I2C
  • AC/DC measurements option
  • Mode changing, Hold state features
  • Low battery consumption
  • Portable and pocket-sized



0.96-inch OLED display with I2C function comes with two different models, SSD1306 and SH1106, to change the code as per requirements. We have to uncomment which version of LCD we are using in this project.

Components used:

  • Arduino Nano
  • 128X64 OLED display
  • 100k, 10k, 820k, 510k, 12k resistors
  • 100nf, 7pf, 1uf ceramic disc capacitors
  • Tactile switch x4
  • Breadboard
  • Connecting wires

Circuit diagram:


Circuit description:

After making all the connections, this oscilloscope can be powered by a 5v @100mA power supply or 3.7 volt Battery. Significantly fewer external components are used in this project; also, it supports several actions. Here MODE button is to select the volt/div, time/div, AC/DC, and 180* wave settings.


After selecting the Mode, we can either increase the value or decrease per wave format. For Volts/divisions: This oscilloscope supports a division from 0.2volts to 50volts.


For Time/Div: Code is modified to display small divisions in microseconds, 1.56 microseconds to 200milli-seconds.



  • With 50Hz sine wave:

I tried to hook upthis oscilloscope directly with Step down transformer AC signal and here are the results:


  • With 300HZ sine wave:

  • With triangular wave:

  • With rectangular wave:

  • With sawtooth wave:

Libraries used:

OLED display SSD1306, SH1106, Fix_fft and EEPROM libraries are available in Arduino Mange library section. From here you can download as per your needs.



Download all the material regarding this project from here.

Arduino oscilloscope.png


This oscilloscope is suitable for analyzing waveforms between 10Hz to 20Khz. That is precisely human hearing frequency. So, we can use this to measure audio signals, amplifier signals, and different Bluetooth signals. This oscilloscope should be a good try for them. Also, I think precision matters a lot in signals. If you want to go professional but cheaper, I would recommend DSO138. But this is about 4x the cost of this Arduino oscilloscope, but this one has an analog frequency range of 200khz.


In comparison with This DSO, I have An Article about Raspberry Pi- Pico Oscilloscope, which offers android application compatibility,...

Read more »