
Tap Photosensor PCB
VoronDesign/Voron-Tap
Tap is a nozzle-based z-probe for the V2 and Trident printer designs. The entire toolhead moves to trigger an optical switch. Tap offers many advantages:

An 8-channel ArtNet to 0-10V converter for controlling drop ceiling lighting fixtures. Receives DMX values (0-255) over wired Ethernet using the ArtNet protocol and outputs corresponding 0-10V analog control voltages.
Drop ceiling smd is an open-source printed circuit board by npuckett, from the npuckett/Drop-Ceiling-Controller repository on GitHub. It is a 2-layer board of 146 × 110 mm with 81 parts on 94 nets, routed with 424 tracks and 154 vias.
It is built around the AP63205WU. Its parts include 28 resistors, 19 capacitors, 10 connectors, 9 diodes and 4 ICs.
An 8-channel ArtNet to 0-10V converter for controlling drop ceiling lighting fixtures. Receives DMX values (0-255) over wired Ethernet using the ArtNet protocol and outputs corresponding 0-10V analog control voltages.
ArtNet Controller (Python)
|
| UDP / ArtNet (port 6454)
|
Wired Ethernet
|
ESP32-S3 Feather
|
| I2C
|
DAC6578 (8-ch)
|
| 0-5V scaled to 0-10V via op amps
|
Lighting Fixtures (8 channels)ArtNet is a protocol for transmitting DMX512 lighting data over Ethernet using UDP on port 6454. This project uses three ArtNet packet types:
Carries DMX channel data from the controller to the ESP32.
| Offset | Size | Field | Value |
|---|---|---|---|
| 0 | 8 | Header | Art-Net\0 |
| 8 | 2 | Opcode (little-endian) | 0x5000 |
| 10 | 2 | Protocol Version (big-endian) | 0x000E (14) |
| 12 | 1 | Sequence | 1-255 (rolling) |
| 13 | 1 | Physical Port | 0x00 |
| 14 | 2 | Universe (little-endian) | 0x0000 (Universe 0) |
| 16 | 2 | Data Length (big-endian) | 0x0008 (8 bytes) |
| 18 | 8 | DMX Data | CH1-CH8 values (0-255) |
Broadcast by the Python controller to discover nodes on the network.
| Offset | Size | Field | Value |
|---|---|---|---|
| 0 | 8 | Header | Art-Net\0 |
| 8 | 2 | Opcode (little-endian) | 0x2000 |
| 10 | 2 | Protocol Version (big-endian) | 0x000E (14) |
| 12 | 1 | TalkToMe | 0x00 |
| 13 | 1 | Priority | 0x00 |
Sent by the ESP32 in response to an ArtPoll. Key fields:
| Offset | Size | Field | Value |
|---|---|---|---|
| 0 | 8 | Header | Art-Net\0 |
| 8 | 2 | Opcode (little-endian) | 0x2100 |
| 10 | 4 | IP Address | Node IP (e.g. 192.168.1.200) |
| 14 | 2 | Port (little-endian) | 6454 |
| 16 | 2 | Firmware Version | 1.0 |
| 18 | 1 | Net | 0x00 |
| 19 | 1 | Sub | 0x00 |
| 26 | 18 | Short Name | DropCeiling |
| 44 | 64 | Long Name | Drop Ceiling 0-10V Controller |
| 173 | 1 | Num Ports | 1 |
| 174 | 1 | Port Type | 0x80 (output, DMX512) |
| 190 | 1 | SwOut | 0x00 (Universe 0) |
Total packet size: 239 bytes. Broadcast on the local subnet.
| Component | Part | Connection |
|---|---|---|
| Microcontroller | Adafruit ESP32-S3 TFT Feather | -- |
| Ethernet | Adafruit Ethernet FeatherWing (WIZ5500) | SPI via Feather Doubler |
| DAC | Adafruit DAC6578 (10-bit, 8-channel) | I2C via STEMMA QT |
| Voltage scaling | Op amp circuit (0-5V to 0-10V) | DAC outputs |
The ESP32-S3 TFT Feather has a built-in 240x135 TFT display that shows:
The firmware defaults to DHCP. If no DHCP server is available (common with a direct USB Ethernet adapter connection), it falls back to a static IP. Defaults can be changed in firmware/DropCeilingController/config.h:
| Setting | Default |
|---|---|
| DHCP | Enabled |
| Static IP | 192.168.1.200 |
| Subnet | 255.255.255.0 |
| ArtNet Universe | 0 |
| ArtNet Start Channel | 1 (DMX) |
When using a USB Ethernet adapter on macOS, you need to assign a static IP on the same subnet (e.g. 192.168.1.100) via System Settings > Network or:
sudo ifconfig en6 inet 192.168.1.100 netmask 255.255.255.0 upArduino firmware for the ESP32-S3. Located in firmware/DropCeilingController/.
The new Arduino library implementation lives in firmware/DropCeiling/. It is structured as a standard Arduino library package so it can stay in this repo during development and move to its own repository later.
The library exposes a DropCeiling datatype with one shared output API and five input modes:
| Mode | Example |
|---|---|
| Ethernet ArtNet | firmware/DropCeiling/examples/EthernetArtNet/ |
| WiFi ArtNet | firmware/DropCeiling/examples/WiFiArtNet/ |
| BLE | firmware/DropCeiling/examples/BluetoothInput/ |
| Serial CSV | firmware/DropCeiling/examples/SerialInput/ |
| Standalone | firmware/DropCeiling/examples/Standalone/ |
Compile a library example from the repository root:
arduino-cli compile --fqbn esp32:esp32:adafruit_feather_esp32s3_tft --libraries firmware firmware/DropCeiling/examples/EthernetArtNetThe upload script still defaults to the legacy sketch, but can target a library example:
SKETCH_DIR=firmware/DropCeiling/examples/EthernetArtNet ./upload.shbrew install arduino-cliThe included upload script handles board core installation, library dependencies, port detection, compilation, and upload:
./upload.shFor the first upload (switching from CircuitPython or other firmware), put the board in bootloader mode first:
FIRST_UPLOAD=1 ./upload.sh
# When prompted: hold BOOT, press RESET, release BOOT, then press EnterOverride the serial port if needed:
PORT=/dev/cu.usbmodem1234 ./upload.shA Python/Qt desktop application for sending ArtNet data to the controller. Located in software/.
cd software
python3 -m venv ../.venv
source ../.venv/bin/activate
pip install -r requirements.txtpython controller.pyfirmware/
DropCeilingController/
DropCeilingController.ino # Main firmware
config.h # Network, ArtNet, DAC, display settings
DropCeiling/
src/ # Arduino library implementation
examples/ # Ethernet, WiFi, BLE, Serial, Standalone examples
software/
controller.py # Python ArtNet controller (PySide6)
requirements.txt # Python dependencies
hardwareComponents/
hardwareComponents.md # Hardware component details
upload.sh # Arduino CLI build & upload script| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | 0.1uF | Resistor_SMD:R_0603_1608Metric | C2, C3, C5, C6, C7, C8, C9, C10, C11, C12, C13, C18 |
| 9 | 10K | Resistor_SMD:R_0603_1608Metric | R4, R5, R7, R11, R14, R17, R18, R27, R28 |
| 8 | 100R | Capacitor_SMD:C_0805_2012Metric | R9, R10, R13, R16, R21, R22, R23, R24 |
| 8 | 20K | Resistor_SMD:R_0603_1608Metric | R6, R8, R12, R15, R19, R20, R25, R26 |
| 8 | Conn_01x02 | TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-02_1x02_P5.08mm_Horizontal | J2, J3, J4, J5, J6, J7, J8, J9 |
| 8 | D_Zener | Diode_SMD:D_SOD-323_HandSoldering | D1, D2, D3, D4, D5, D6, D7, D8 |
| 4 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H1, H2, H3, H4 |
| 3 | 10uF | Capacitor_SMD:C_0805_2012Metric | C1, C14, C17 |
| 3 | 4.7K | Resistor_SMD:R_0603_1608Metric | R1, R2, R3 |
| 2 | 22uF | Capacitor_SMD:C_1206_3216Metric | C15, C16 |
| 2 | TLV274CPWR | TLV274CPW:PW14 | U2, U3 |
| 1 | 100uF | Capacitor_SMD:CP_Elec_8x10.5 | C19 |
| 1 | 12V IN | Connector_BarrelJack:BarrelJack_CUI_PJ-102AH_Horizontal | J1 |
| 1 | 1uF | Resistor_SMD:R_0603_1608Metric | C4 |
| 1 | 4.7uH | ETQ-P3M4R7KVP:ETQ-P3M_KVP | L1 |
| 1 | ADDR | Jumper:SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mm_NumberLabels | JP1 |
| 1 | AP63205WU | Package_TO_SOT_SMD:TSOT-23-6 | U4 |
| 1 | Adafruit_Ethernet_FeatherWing | Module:Adafruit_Feather | A2 |
| 1 | Adafruit_Feather_Generic | Module:Adafruit_Feather | A1 |
| 1 | BLM21PG121SN1D | Inductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolder | FB1 |
| 1 | Conn_02x10_Counter_Clockwise | Connector_PinHeader_2.54mm:PinHeader_2x10_P2.54mm_Vertical | J10 |
| 1 | DAC6578xPW | Package_SO:TSSOP-16_4.4x5mm_P0.65mm | U1 |
| 1 | D_Schottky | Diode_SMD:D_SMA_Handsoldering | D9 |
The 79 most common of 81 parts.
It measures 146 × 110 mm and has 2 copper layers, 1.6 mm thick.
81 parts, built around the AP63205WU. 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.
From the npuckett/Drop-Ceiling-Controller repository on GitHub, at the commit this page was made from: the board is hardwareComponents/drop-ceiling-smd/drop-ceiling-smd.kicad_pcb and its schematic hardwareComponents/drop-ceiling-smd/drop-ceiling-smd.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask npuckett before reusing the design.

VoronDesign/Voron-Tap
Tap is a nozzle-based z-probe for the V2 and Trident printer designs. The entire toolhead moves to trigger an optical switch. Tap offers many advantages:

FujiNetWIFI/fujinet-hardware
Schematics and design files for FujiNet hardware

andrekuehne/openradfan
An ESPHome-driven controller for radiator fans to improve heat output


doppelhub/Honda_Insight_LiBCM
Replacement BCM for G1 Honda Insight Lithium Conversion

GaudiLabs/qPocketPCR
Quantitative PCR machine detecting fluorescence using a camera

Qballjos/Voron-2.4-Otopus-pro-SB2209-U2C-CAN
Voron 2.4 R2 with ,Stealthburner, Voron Tap, Bambu lab Hotend. Octopus pro with TMC2209 UART, EBB SB2209 v1.0 and U2C v2.1 running klipper

ahillbom/TougherPowerMonitor-HW
Triple-channel power monitor based on INA3221 and TPS1HB08A with some filtering for tougher conditions. Compatible with Arduino Nano and Feathers.