Skip to the content
PCBKitNew board
2 layers48.3 × 22.9 mmBuddhabox, the printed circuit board in 3D

lua scriptable musicbox

Size
48.3 × 22.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
54
Nets
74
Pads
241
Tracks, vias
471, 57
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
7 Jun 2024
Updated
21 Jun 2024

Overview

Buddhabox is an open-source printed circuit board by jonbro, from the jonbro/aleatorium repository on GitHub. It is a 2-layer board of 48.3 × 22.9 mm with 54 parts on 74 nets, routed with 471 tracks and 57 vias.

It is built around the RP2040, W25Q64JVZPIQ and TPS63031DSK, with the BAT54C among its other parts. Its parts include 24 capacitors, 10 resistors, 4 ICs, 4 connectors and 3 switches. It belongs with the RP2040 boards of this library.

Main components

4

README

README.md

Aleatorium

buddha box with heads

A lua scriptable buddha box board swap.

The hardware on this project is forked from Eric Brombaugh's RP2040 boardswap for buddha boxes. I'm so glad he opensourced this, a programmable buddha machine is something that I've long wanted.

The firmware contains an lua scriptable 8 channel synthesizer and sequencer. The synth has the following features:

  • oscilators from MI braids
  • 1 assignable lfo + 2 semi assignable Envs per voice
  • lowpass filter per voice
  • reverb & delay send per voice

The sequencer is a callback that is run at 96ppq. All further sequencing must be done by you.

You write new songs for aleatorium by connecting to it with usb, and loading lua scripts onto it with the web based code editor.

Scripting API

The scripting interface is quite simple, but there are some example files, jam1 and jam2. The globals.lua file contains parameter constants for altering the synth voices.

text
-- setParam(voiceNumber, targetParameter, value)
-- voiceNumber: 0-7, the voice you want to set
-- targetParameter: use the params table from globals.lua
-- value: 0-255. Some parameters take a value from globals here, see below
setParam(0, param.timbre, 80)

-- playNote(voiceNumber, midiNoteValue)
-- voiceNumber: 0-7, the voice you want to set
-- midiNoteValue: 60 is middle c
playNote(0, 60)

-- tempoSync
-- called 96 times per quarternote. Currently there is no way to set the bpm other than recompling the firmware.

function tempoSync()

end

-- Special param targets:

-- shape - pick the voice shape, these are a subset of the oscilators from MI Braids
setParam(0, param.shape, shape.morph)

-- Env target - env1Target always goes to volume and the assigned target, env2Target only goes to the assigned target

Editor notes

A live version of the editor is available here. Requires a non-firefox browser, due to using webserial. Make sure you connect to the device before you start trying to use it.

Use ctrl+p to send the current script to device and execute. You can run the following commands in the console:

text
-- save
-- provide a filename without quotes to save the file. This will add it to the set of songs that is looped through when pressing the button.
-- scripts are limited to a maximum of 16k
-- folders are not currently supported
save mysong.lua

-- load
-- provide a filename without quotes to load the file. This will replace the contents of the editor with the script.
-- folders are not currently supported. You cannot load the globals file.
load mysong.lua

-- del / rm
-- provide a filename without quotes to delete the file. This will remove it from the filesystem, and it will no longer be part of the songs on device
rm mysong.lua

Parts

54
QtyValueFootprintReferences
130.1ufCapacitor_SMD:C_0402_1005MetricC6, C7, C8, C9, C10, C11, C12, C15, C17, C18, C19, C21, C25
510ufCapacitor_SMD:C_0402_1005MetricC1, C2, C5, C20, C27
31kResistor_SMD:R_0402_1005MetricR2, R6, R10
3600@100mhzInductor_SMD:L_0603_1608MetricFB1, FB2, FB3
210kResistor_SMD:R_0402_1005MetricR1, R9
21ufCapacitor_SMD:C_0402_1005MetricC22, C23
2220pfCapacitor_SMD:C_0402_1005MetricC24, C26
227.4Resistor_SMD:R_0402_1005MetricR5, R7
230pfCapacitor_SMD:C_0603_1608MetricC3, C4
25.1kResistor_SMD:R_0402_1005MetricR3, R4
2SW_PushButton_Switch_SMD:SW_Push_1P1T_NO_CK_KMR2SW1, SW3
11.5uHInductor_SMD:L_Coilcraft_LPS3010L2
1100kResistor_SMD:R_0805_2012MetricR8
1BAT54CPackage_TO_SOT_SMD:SOT-23D1
1BatteryConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ5
1Crystal_4pin_SMDCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
1Jumper_2_BridgedJumper:SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mmJP1
1LED GreenLED_SMD:LED_0603_1608MetricD3
1MAX98357APackage_DFN_QFN:TQFN-16-1EP_3x3mm_P0.5mm_EP1.23x1.23mmU2
1PICOPROBEConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ2
1RP2040emeb_library:RP2040U3
1RV12emeb_library:RV12RV1
1SW_PushSideButton_Switch_THT:SW_Tactile_SPST_Angled_PTS645Vx83-2LFSSW4
1SpeakerConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ4
1TPS63031DSKPackage_SON:WSON-10-1EP_2.5x2.5mm_P0.5mm_EP1.2x2mmU6
1USB_C_Receptacle_USB2.0MyLibrary:USB-C_SMD-TYPE-C-31-M-12J7
1W25Q64JVZPIQPackage_SON:WSON-8-1EP_6x5mm_P1.27mm_EP3.4x4.3mmU5

Questions

How big is the Buddhabox PCB?

It measures 48.3 × 22.9 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Buddhabox use?

54 parts, built around the RP2040, W25Q64JVZPIQ, TPS63031DSK and BAT54C. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Buddhabox KiCad files?

From the jonbro/aleatorium repository on GitHub, at the commit this page was made from: the board is Hardware/buddhabox.kicad_pcb and its schematic Hardware/buddhabox.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Buddhabox design in my own project?

Its repository states no licence, so its author keeps all rights: ask jonbro before reusing the design.

Similar boards

  • 4 layers70 × 72 mmSPINC AA Charger, the printed circuit board in 3D

    SPINC AA Charger

    CoretechR/SPINC

    DIY Automatic Battery Charger Using RP2040

    101 parts467GPL-3.0
  • 2 layers64 × 21.6 mmGamepad, the printed circuit board in 3D

    Gamepad

    CoretechR/DIY-Portrait-Mode-Gamepad

    A USB-C Gamepad for Portrait-Mode

    53 parts60GPL-3.0
  • 2 layers62.6 × 20.9 mmCatkeeb devboard, the printed circuit board in 3D

    Catkeeb devboard

    acornitum/fucked-up-rp2040-devboard

    will be fixed sometime i swear

    40 parts1MIT
  • 4 layers21 × 51 mmRP2040 CNC Controller, the printed circuit board in 3D

    RP2040 CNC Controller

    FallenFireGit/RP2040-Devboard

    This repository contains my work with the RP2040 microcontroller, where I experimented with embedded programming, basic hardware integration, and peripherals like LEDs and buttons.

    56 parts
  • 4 layers121 × 66.5 mmTim, the printed circuit board in 3D

    Tim

    UMDBPP/bobot-2

    187 parts
  • 2 layers70 × 19 mmHackducky v1, the printed circuit board in 3D

    Hackducky v1

    hackclub/hackducky

    The hackclub themed USB rubber ducky ! - Check out hackducky

    45 parts33
  • 2 layers80 × 74 mmHubble metal detector, the printed circuit board in 3D

    Hubble metal detector

    zartarn15/hubble-metal-detector

    STM32-based digital metal detector with custom hardware and embedded DSP firmware.

    156 parts2
  • 4 layers194.6 × 93.3 mmCHV DC32, the printed circuit board in 3D

    CHV DC32

    car-hacking-village/DC32_CHV_Badge_Board

    160 parts3