A scanning microscope you can build for under $100. A 650nm laser rasters across a sample and a photodiode reads the reflected intensity at each coordinate. Readings stream from an Arduino Mega to a Python app that reconstructs 2D and 3D images, with optional FFT sharpening, deconvolution, and neural upscaling.
PhotonPeek performs a raster scan using either manual stage shifts or stepper-driven motion. A 650 nm laser spot is steered onto the sample and the reflected or transmitted intensity is captured by a photodiode. The Arduino Mega streams raw readings tagged with coordinates; the Python application accumulates, averages (samples-per-pixel oversampling), then executes a modular enhancement pipeline.
See hardware/ in the repo for STL files and wiring
diagrams.
5mW. Stable red illumination; safe, inexpensive.
Analog voltage proportional to intensity; feeds A0.
Fixed 90° deviation; alignment simplicity.
Multiple analog inputs & flash space.
Automated XY(Z) scanning (optional upgrade).
Spot shaping + resolution improvement.
Rigid, repeatable mechanical geometry.
Acquisition + processing pipeline.
The Python pipeline executes the following steps:
The acquisition layer is line-oriented ASCII for clarity & debugging:
CONFIG,<mode>,<precision>,<x>,<y>,<z>,<spp> HEADER,<x>,<y>,<z>,<spp> DATA,<x>,<y>,<z>,<value>
CONFIG sets the session. HEADER echoes geometry for host validation. Each DATA line is streamed as soon as the analog read settles, enabling overlapping compute & I/O.