← Piezo Motor / Articles
§3Article · 3 of 13

Independent Research · 3D-Printed Piezo Stick-Slip Motor

Learning an Oscilloscope From Zero With an Arduino and a Rigol DHO804

Published · Last updated

This project runs on two kinds of invisible: motion measured in micrometers, and signals that exist for microseconds. §M8 covers the instrument I built to see the first kind. This chapter is about the instrument I bought to see the second, and the more honest story of learning to actually use it.

The instrument is a Rigol DHO804: 12-bit, 70 MHz, four channels, $449 [project CLAUDE.md §2]. It was the most expensive single instrument purchase of the project, made back in April before I could really justify it, on the theory that a project about invisible waveforms driving invisible motion would go nowhere if I couldn't see either one. That theory turned out to be the most correct thing I believed all spring.

01

The knobs win first

I'd be lying if I said the scope and I got along immediately. The first sessions were awkward in a specific way. The signal existed, the probe was on it, and the screen still showed nothing useful, because I hadn't yet internalized the horizontal and vertical scaling and panning knobs. A scope shows you a tiny window into a signal, and until you can steer that window by reflex you mostly see the wrong slice of the right waveform. Steering means three things: how many volts tall one screen division is, how many seconds wide it is, and where the trigger sits in both. The trigger is the scope's instruction for when to start drawing, some condition like the signal crossing a chosen voltage on the way up, and setting it well is what makes a repeating waveform stand still instead of sliding across the screen.

My second early lesson was about the Auto button. Auto setup will get something onto the screen, and for a while I leaned on it completely. Then I started needing views Auto would never choose, like a slow ramp with a fast edge on the same trace, or a capture long enough to hold the data I actually wanted to export. Auto is a starting point, not an answer. Learning to set up the view deliberately, so the capture contains all the data a specific measurement needs, was the real skill, and nobody tells you that's the skill when you're shopping for scopes.

02

Generate signals instead of reading the manual

The Rigol manual is 400-plus pages of reference material (DHO800_UserGuide_EN.pdf sits in the project folder, mostly unread). Instead of reading it front to back, I worked with Claude to build a short custom curriculum (DHO804_curriculum.docx) around one idea. Use the Arduino Mega as a signal generator, create signals I fully understand because I wrote the code that makes them, and then make the scope show each one properly. Each exercise lives as its own folder in the project.

  • Ex41, PWM sawtooth (Ex41_PWM_Sawtooth/). The Mega generates a miniature version of the project's signature waveform. First real practice with triggering, timebase, and vertical scale, making a repeating ramp sit still on screen instead of crawling.
  • Ex42, RC filter (Ex42_RC_Filter/, with its wiring diagram). The same PWM pushed through a resistor and capacitor, watching a hard-edged digital signal round off into exponential curves. First analog intuition, and the first time the scope showed me something I hadn't predicted.
  • Ex43, Lissajous figures (Ex43_Lissajous/). Two signals, two channels, XY mode, phase relationships drawn as shapes. The fun one, and the exercise that made two-channel thinking feel normal, which matters later when CH1 and CH2 are on the two leads of a piezo stack (§M2).
  • Ex45, USB-SCPI control (Ex45_USB_SCPI/, holding 01_discover_scope.py, 02_grab_waveform.py, plus a capture from May 3). The scope stops being a display and becomes a data acquisition device. Python finds the instrument over USB, pulls the waveform, and saves CSV and PNG. This exercise, more than any other, built the project. The interferometer capture pipeline in §M8 is a direct descendant of these two scripts.

(There is no Ex44. There was going to be, and it got dropped. The numbering is a fossil and I've decided to leave it.)

03

The hard part was the chain, not the box

The single most confusing stretch wasn't any one instrument. It was the plumbing between them, with the Arduino generating the signal, the probe and ground clip landing on the right pins, the scope displaying it, and then USB carrying it from scope to laptop so Python could pull the data off. Three devices, three connections, and my mental model of what flowed where was mush at first. What untangled it was realizing the chain is just three hops in one direction: the Mega makes the signal, the scope watches it, the laptop asks the scope what it saw. Once that clicked, the whole flow made sense, and the same three-hop pattern (source → scope → script) is now how every measurement in this project works, from calibration sawtooths to interferometer fringes.

04

Results

By mid-June the scope had stopped being furniture with knobs. The Oscilloscope Reading/ folder holds screenshots from a June 17 session (three of them, good figure candidates for this chapter) of real project signals, captured with deliberate setups instead of the Auto button. And the same instrument went on to do the project's two most consequential pieces of detective work: catching that the drive board's "30 V" output was actually 15 (§M7), and digitizing every interferometer fringe the project has recorded (§M8). Those stories belong to their own chapters. This one is just where the ability came from.

05

Advice for beginners

The fight was never any one exercise. It was the instrument's own language: trigger modes, per-channel controls, and a measurement bar full of symbols (Vpp, Vavg) that meant nothing to me yet. Getting used to that environment took longer than any single exercise did [builder, 2026-08-06].

Four things would have shortened it, in order of how much time they'd have saved. The knobs are the interface, so spend the first hour just steering the window around a boring signal. Auto setup is for orientation, never for measurement. Decide what data the capture must contain before touching the scope, then build the view for it. And SCPI scripting looks like an advanced feature and isn't. It's available in week one, it's two short Python scripts, and it's the difference between a display and an instrument.