Skip to main content
Version: ACS CC

CrateDigger

Dig. Chop. Loop. Repeat.

info

Author: Popa Nicolae
GitHub Project Link: https://github.com/UPB-PMRust-Students/proiect-nicupopa

Description

CrateDigger is a portable sampler built around a Raspberry Pi Pico 2 and programmed using the Embassy framework in Rust. The device allows users to sample audio, playback predefined samples, and perform beat-making using a 16-step sequencer. It features a user interface with tactile buttons, a TFT screen with animations, and high-quality audio output via DAC and an integrated speaker. Ideal for music producers looking for a portable sampler/sequencer.

Motivation

I have always been passionate about music and beat-making equipment. When the opportunity to pick this project came up, I knew it was the perfect opportunity to blend the two things I'm passionate about. My goal is to create a compact, DIY sampler and sequencer that allows musicians and hobbyists to experiment with sounds, create beats, and take their creativity anywhere.
This project is not only a technical challenge but also a personal mission to create a fun tool that I might use in the future.

Architecture

Diagram

Raspberry Pi Pico 2

Role: Central microcontroller, manages audio processing, input/output control, and overall device logic.

Connections:
Display, Micro SD Card Module, DAC, Buttons, and Output components.


Display (ST7735R)

Interface: SPI

Connections:

  • SDA (Data Line) connected to Raspberry Pi Pico 2 SPI pins
  • SCL (Clock Line) connected to Raspberry Pi Pico 2 SPI pins

Role: Displays user interface, sequencing steps and device status.


Buttons

Interface: GPIO

Connections:

  • Connected to GPIO pins for controls (playback, recording, navigation, sequencing)

Role: Allows user input for sampling, playback, sequence control, and settings.


Micro SD Card Module

Interface: SPI

Connections:

  • SCK (Serial Clock) connected to Pico SPI pin
  • MOSI (Master Out Slave In) connected to Pico SPI pin
  • MISO (Master In Slave Out) connected to Pico SPI pin
  • CS (Chip Select) connected to Pico GPIO pin

Role: Stores audio samples, sequences, presets, and configuration data.


DAC (MAX98357A)

Interface: I2S

Connections:

  • Connected via I2S interface pins on the Raspberry Pi Pico 2

Role: Converts digital audio signals to high-quality analog audio for speaker output.


Output (Speaker)

Role: Outputs audio signal from the DAC to provide sound playback.


Log

  • Week 5 - 11 May:
    Began with a minimal setup: Pico and DAC, in order to verify the quality of the audio output. Next, I have connected the button matrix and mapped the buttons to sounds of different frequencies. By the end of the week I had a minimal implementation of the core functionality of the project.
  • Week 12 - 18 May:
    Finished setting up the hardware parts on a breadboard, as well as tampering with the screen. Made adjustments to the KiCad schematic in order to illustrate the complete hardware.
  • Week 19 - 25 May:
    WIP...

Hardware

  • Raspberry Pi Pico 2 (RP2350): Main microcontroller handling audio processing and system logic.
  • I2S DAC – MAX98357A: Converts digital audio signals to analog for high-quality speaker output.
  • ST7735R display: Colored screen for animations.
  • 3.5mm socket: Outputs audio playback. (Headphones not included!)
  • Buttons: Input for interraction with the device.

Below I have provided an overview of the project on a breadboard:

Overview

User input close-up:

Buttons

DAC, 3.5mm socket and screen close-up:

Misc

Schematics

Made using KiCad, this schematic represents the electronic design for CrateDigger. The MAX98357 DAC and the 3.5mm socket are placed on the left and next to them is the 4x4 button matrix used for adding samples. The display is placed on the right, along with play/write buttons.

Schematic

Bill of Materials

DeviceUsagePrice
2x Raspberry Pi Pico 2 WThe microcontroller80 RON
ST7735R DisplayOLED visual interface29 RON
MAX98357 I2S DACAudio output module24 RON
4 Ohm SpeakerSound playback40 RON
Consumables (buttons, wires, etc.)Various components50 RON

Software

LibraryDescriptionUsage
embassyAsynchronous embedded framework for RustCore framework for running async tasks on the Raspberry Pi Pico 2
embassy-rpEmbassy HAL for RP2040Hardware abstraction layer for the Raspberry Pi Pico 2
embedded-halHardware Abstraction Layer (HAL) traitsProvides unified interfaces for hardware drivers
embedded-graphics2D graphics libraryUsed for drawing to the ST7735R display
st7735-lcdRust driver for ST7735 displayControls the ST7735R display
[embassy_rp::pio_programs::i2s]PIO-backed I²S output driverEnables I²S audio output using the Programmable I/O system