logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·01.11.26
← Back to news

Scanwheel is a drum style mechanical television you can build yourself

Original article
github.com|22 points|5 comments|by tobr|Jul 25, 2026

Build Your Own Scanwheel: A DIY Mechanical Television

The Scanwheel is an enthusiast project that allows you to construct a drum-style mechanical television from scratch. Unlike modern screens, this device uses a physical rotating drum to create images.

📺 System Overview

The device utilizes a single scanning drum to drive five side-by-side windows. While they share the same drum, each window is powered by its own dedicated LEDs, enabling the display of separate images simultaneously.

Technical Specifications

  • Window Dimensions: A luxurious 9mm×8mm9\text{mm} \times 8\text{mm}9mm×8mm per window.
  • Vertical Resolution: 20 scan lines.
  • Horizontal Precision: By leveraging the PIO (Programmable I/O) hardware of the Raspberry Pi Pico, the system achieves an extremely high horizontal resolution. This ensures the visual quality far exceeds what one would expect from a mere 20p resolution.

Scanwheel Concept


🛠️ Hardware Requirements

1. The Motor

You will need a modern Symbol Technologies 21-02485 stepper motor. Although it is an older model, it remains widely available through online marketplaces.

Wiring Note: This motor has a non-standard wiring configuration. To operate it as a bipolar stepper motor, you must cut the white wire before it enters the 4-pin connector.

Pro Tip: When adjusting the potentiometer, turn it down as far as possible without stopping the motor's rotation; the sweet spot is usually at the very bottom of the range.

2. The Controller

A Raspberry Pi Pico is required.

  • Standard Pico: Works fine for basic operation.
  • Pico W: Recommended if you wish to stream content wirelessly.

3. The Lighting (LEDs)

The build uses a combination of one RGB LED and four white LEDs. This setup balances wiring simplicity with acceptable image quality.

Crucial Constraints:

  • The R, G, and B channels must be brightness-matched.
  • The combined RGB output must match the intensity of the white LEDs.
  • Total current draw must not exceed 50mA from the Pico's GPIO pins.

To calculate the necessary resistors, use Ohm's Law: I=Vsource−VforwardRI = \frac{V_{source} - V_{forward}}{R}I=RVsource​−Vforward​​

The following table outlines the specific values used by the creator to achieve balanced brightness:

LED ChannelResistor ValueCurrent Draw
Red120R10.75mA10.75\text{mA}10.75mA
Green260R2.9mA2.9\text{mA}2.9mA
Blue220R2.8mA2.8\text{mA}2.8mA
White82R4.6mA4.6\text{mA}4.6mA

🖨️ 3D Printing Guide

The necessary models are located in the /parts directory.

Printing Checklist

  • Scale X and Y axes to 100.33% (to compensate for PLA shrinkage).
  • Keep Z axis at 100%.
  • Set 'Wall Generator' to Arachne (if using Orca Slicer).
  • Use a 0.2mm nozzle for the drum (if supported).

Drum Fabrication

The drum is the most critical component. Because pinhole imperfections are highly visible, you must use high-quality settings:

  • Low printing speeds
  • Small layer heights

The project includes an OpenSCAD model for the drum, allowing you to tweak parameters. Additionally, you may want to add a washer to the drum's spindle to increase its moment of inertia.


💻 Software Architecture

The software is split between the host computer and the microcontroller.

File Breakdown

  • /pico directory:
    • scanwheel.py: The primary driver for the hardware.
    • Various example applications.
  • /host directory:
    • videostream.py: Handles the network stream from the PC.
    • streaming.py: The receiving end of the stream on the Pico.
    • pngdirect.py: A utility to convert standard images into the raw framebuffer format required by the scanwheel.
# Example logic for framebuffer conversion
def convert_to_framebuffer(image_path):
    # Logic to transform PNG to raw scanwheel format
    pass