Skip to the content
PCBKitNew board
4 layersLBD, the printed circuit board in 3D

A high-intensity IR blaster built on the RP2040. Browser-native control over WebSerial, MOSFET-driven IR output, 38kHz NEC modulation. Fully open source.

Copper layers
4
Thickness
1.6 mm
Parts
50
Nets
73
Pads
253
Tracks, vias
0, 0
Routed
Not yet
KiCad
KiCad 10.0 (file 20260206)
Created
23 Apr 2026
Updated
11 Sep 2026

Overview

LBD is an open-source printed circuit board by chaowoses, from the chaowoses/LottBespittingDiode repository on GitHub, published under the GPL-3.0 licence. It is a 4-layer board with 50 parts on 73 nets.

It is built around the RP2040, TPSM828214SILR and W25Q128JVSIQ, with the IN-S126ESGHIR, AO3400A and MM3Z6V2 among its other parts. Its parts include 18 capacitors, 15 resistors, 9 diodes, 3 ICs and 2 connectors. It belongs with the RP2040 boards of this library.

Main components

7

README

README.md

Lott-Bespitting Diode (LBD)

A high-intensity IR blaster built on the RP2040. Browser-native control over WebSerial, MOSFET-driven IR output, 38kHz NEC modulation. Fully open source.

Home Page · Controller

Named for Mrs. Lott, the worst teacher I ever had, and her classroom projector.


Features

  • Web Controller: Full single-page app to manage IR remotes, browse the Flipper-IRDB, compose NEC signals, and transmit over WebSerial
  • In-Browser Schematic Viewer: Browse all hardware schematics directly on the landing page via KiCanvas
  • Auto-Generated BOM: Bill of materials extracted from KiCad schematics and embedded in the landing page, updated on every push
  • IRDB Integration: Browse and import from Lucaslhm/Flipper-IRDB directly from the controller
  • NEC Protocol Engine: CircuitPython firmware with hardware-timed 38kHz carrier modulation
  • Library Management: Organize remotes and signals in folders with drag-and-drop, favorites, and inline editing

Project Structure

text
app/                  # Web front-end
  index.html          # Landing page (hero, BOM, schematic viewer, docs)
  controller.html     # WebSerial controller app
  landing/
    index.css         # Landing page styles (dark theme, purple/amber)
    index.js          # Landing page interactivity (tabs, viewer)
    insults.json      # Footer quotes
    three-scene.js    # Three.js particle background
  controller/
    style.css         # Controller styles
    scripts/
      app.js          # Init, event listeners, tab switching
      state.js        # State management, library CRUD, localStorage
      serial.js       # WebSerial connection, log bar
      transmit.js     # Hex input, NEC encoding, transmit history, save form
      library-ui.js   # Library pane, remote view, favorites, inline edits
      sidebar.js      # Sidebar toggle, resize, tree rendering
      modals.js       # Modal dialogs (folder, rename, delete, clear)
      drag-drop.js    # Drag-and-drop reordering in sidebar tree
      import.js       # .ir file parsing and import
      irdb.js         # Flipper-IRDB browsing and import
      utils.js        # escHtml, escAttr helpers

firmware/             # CircuitPython firmware

Hardware

The embedded PCB design isn't finalized yet. Build the prototype on a breadboard or perfboard using the prototype schematic.

The full design targets a custom PCB with an RP2040, MOSFET-switched IR LED array, USB-C, and external flash. Five KiCad schematics cover the main board, power regulation, flash memory, USB connector, and a simplified prototype variant.


Firmware

The CircuitPython firmware implements a standard NEC protocol engine:

  • 38kHz carrier modulation via pulseio.PulseOut
  • Listens for 4-byte NEC arrays over USB serial
  • Drives a status LED and the IR output on GPIO
  • Header: 9000µs mark / 4500µs space
  • Bit coding: 560µs mark + 1690µs (1) or 560µs (0)
  • Compatible with any NEC IR receiver
python
import time
import board
import pwmio

# 38kHz carrier wave initialization
ir_pwm = pwmio.PWMOut(board.GP16, frequency=38000, duty_cycle=0)

def pulse_nec(mark_us, space_us):
    # Enable carrier wave modulation for duration of mark
    ir_pwm.duty_cycle = 32768  # 50% duty cycle
    time.sleep_us(mark_us)

    # Disable carrier wave modulation for duration of space
    ir_pwm.duty_cycle = 0
    time.sleep_us(space_us)

Web Interface

Two pages are served via GitHub Pages:

PageDescription
Landing Page (index.html)Project overview, BOM table, KiCanvas schematic viewer, architecture docs, features, setup guide
Controller (controller.html)Full WebSerial-based remote control app with library management, IRDB browser, signal composer, and transmit history

Setup & Flash

Build the prototype on a breadboard or perfboard using the prototype schematic.

DIY / Prototype Only: Steps 1 and 2 (skip if you have a pre-assembled unit)

Step 1: Enter Bootloader Mode

Press and hold the BOOT button on the board, then connect it to your computer via a data-capable USB cable. Release the button once the drive mounts.

Step 2: Install CircuitPython

A mass storage volume named RPI-RP2 will appear. Drag and drop the appropriate CircuitPython .uf2 payload onto its root directory. The board will automatically reboot and remount as CIRCUITPY.

Step 3: Deploy Firmware

Copy the contents of firmware/ onto the CIRCUITPY volume root:

  • code.py
  • lib/

Step 4: Plug It In & Open the Controller

Keep the device connected via USB, then open the web controller in a Chromium-based browser. Click Connect to establish the WebSerial session.

To run locally (required for development):

bash
git clone https://github.com/chaowoses/LottBespittingDiode.git
cd LottBespittingDiode
python -m http.server 8080
# open http://localhost:8080

License & Terms of Use

[!CAUTION] STRICTLY PROHIBITED FOR ILLEGAL USE

This project is designed solely for personal engineering research, hardware prototyping, and authorized testing. You may only operate this device on equipment you personally own or have explicit permission to control. The creator assumes no liability for misuse, property disruption, or equipment damage.

This project (software, firmware, schematics, PCB layouts, and documentation) is licensed under the GNU General Public License v3.0 (GPL-3.0).

Copyright © 2026 Josh Felder (Chaos). All Rights Reserved.

Parts

50
QtyValueFootprintReferences
11100nCapacitor_SMD:C_0201_0603MetricC6, C7, C8, C9, C10, C11, C12, C13, C16, C17, C18
8IN-S126ESGHIRLBD_Footprints:LED_IN-S12_INLD1, D2, D3, D4, D5, D6, D7, D8
422Resistor_SMD:R_0603_1608MetricR14, R15, R16, R17
310kResistor_SMD:R_0201_0603MetricR8, R9, R18
215pCapacitor_SMD:C_0201_0603MetricC4, C5
21uCapacitor_SMD:C_0402_1005MetricC19, C20
222Resistor_SMD:R_0201_0603MetricR11, R12
25.1kResistor_SMD:R_0201_0603MetricR3, R13
1100kResistor_SMD:R_0201_0603MetricR10
110uCapacitor_SMD:C_0603_1608MetricC21
112 MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
11kResistor_SMD:R_0201_0603MetricR7
11k (0603)Resistor_SMD:R_0603_1608MetricR6
122uCapacitor_SMD:C_0603_1608MetricC15
133Resistor_SMD:R_0603_1608MetricR19
14.7uCapacitor_SMD:C_0603_1608MetricC14
1AO3400APackage_TO_SOT_SMD:SOT-23Q1
1BOOTSELButton_Switch_SMD:SW_SPST_B3U-1000PSW2
1Conn_01x03_PinConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical_SMD_Pin1LeftJ1
1MM3Z6V2Diode_SMD:D_SOD-323D9
1RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU1
1TPSM828214SILRLBD_Footprints:TPSM828214SILRU4
1USB4155-03-CLBD_Footprints:GCT_USB4155-03-C_REVAJ2
1W25Q128JVSIQLBD_Footprints:W25Q128JVSIQU5

Questions

What parts does the LBD use?

50 parts, built around the RP2040, TPSM828214SILR, W25Q128JVSIQ and IN-S126ESGHIR. 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 LBD KiCad files?

From the chaowoses/LottBespittingDiode repository on GitHub, at the commit this page was made from: the board is hardware/LBD.kicad_pcb and its schematic hardware/LBD.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the LBD design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers40.1 × 80.1 mmIR Controller, the printed circuit board in 3D

    IR Controller

    sergeyvfx/IR-Volume-Control

    Digipot volume control using IR controller

    12 partsMIT
  • 4 layers33.5 × 24 mmUSBPowerMeter, the printed circuit board in 3D

    USBPowerMeter

    JunKimmmy/USBPowerMeter

    A compact USB-C passthrough power meter that displays real-time voltage, current, and power on an integrated 128×64 OLED screen.

    84 parts8
  • 4 layers135.8 × 149.3 mmTapBadgeV2, the printed circuit board in 3D

    TapBadgeV2

    Xasin/TapBadgeV2

    The second, far more ambitious version of the TapBadge wearable

    110 parts6GPL-3.0
  • 4 layers36 × 150 mmMagSense, the printed circuit board in 3D

    MagSense

    jinw06k/MagSense_PCB

    MagSense KiCad PCB project

    59 parts
  • 4 layers17.8 × 21.4 mmEpsilon PCB, the printed circuit board in 3D

    Epsilon PCB

    yassin-v2/Epsilon

    A very compact development board integrating the RP2354A MCU, named Epsilon.

    41 partsApache-2.0
  • 6 layers35 × 50 mmPower stage rev8, the printed circuit board in 3D

    Power stage rev8

    oresat/oresat-adcs-hardware

    Controller PCB for OreSat reaction wheels, magnetorquers, IMU, and magnetometers

    239 parts21GPL-2.0
  • 4 layers25 × 16 mmSwd over c, the printed circuit board in 3D

    Swd over c

    kitspace-test-repos/kicad6-file-collection

    17 partsMIT
  • 4 layers17.8 × 41.9 mmRP2040-ProMini, the printed circuit board in 3D

    RP2040-ProMini

    red-scorp/RP2040-ProMini

    RP2040-based board with footprint of Arduino ProMini

    44 parts8