Bluetooth ESP32 Plasma Speaker

by Alexandru Furdui in Circuits > Electronics

51 Views, 0 Favorites, 0 Comments

Bluetooth ESP32 Plasma Speaker

Bluetooth ESP32 Plasma Speaker

In this project I will show you how I made a simple plasma speaker with bluetooth connectivity. This speaker uses a flyback transformer from an old CRT TV to generate an electrical arc up to 2.5 cm long (around 70 kV). The driver for the flyback consists in an ESP32 development board, a NE555 timer as a mosfet driver, and a power mosfet. Being a digital circuit, this configuration is very simple to create, because the dev board is doing the complex stuff.

Supplies

20260316_172301.jpg
20260316_172404.jpg
20260316_172907.jpg

In order to build this driver you will need:

  1. IRFP 460A N channel power mosfet
  2. 6 x 2200 uF capacitors (optional)
  3. CPU heatsink
  4. 10 ohm resistor
  5. 10k ohm resistor
  6. Flyback transformer
  7. ESP32 development board
  8. NE555 IC
  9. Wago connectors
  10. 12V DC fan
  11. PCB Prototype board
  12. Buck converter
  13. DIP socket 8 pins
  14. Pin headers male and female
  15. Wires
  16. 12V power supply
  17. Junction box 150x190 mm

Winding the Transformer

WhatsApp Image 2026-03-21 at 11.15.25.jpeg

The transformer must be winded with 9 turns of 0.75 mm^2 wire in the same direction as in the image. You can try with a different number of turns in order to obtain the best arc.

Building the Circuit

schema_bb.png
schema_schem.png

As a power supply I used a modified ATX 450W PSU, on which I can regulate the voltage up to 14V. In the diagram above, I used 6x2200uF electrolytic capacitors to smooth out the voltage drops, and to prevent the PSU to enter protection mode. If you have a powerful enough PSU, you can power the circuit without them. In theory, this circuit can run up to 16V, since this is the max supply voltage of the NE555, and we are limited by that.

The buck converter is used only to power the ESP32 dev board, which steps down the input 14V to 3.3V as required by the board. Not using the buck converter and connecting 14V to Vin pin will likely stress out the linear voltage regulator on the board, it will overheat and may fail over time.

Next, the NE555 timer is used as a gate driver, because the board is not very good at driving a power mosfet, since it has a low output current per pin and 3.3V will be too low for the IRFP460A's gate. Not having a powerful enough driver can increase the raise and fall time, and a too low gate voltage will not open enough to allow impulses of high current to pass, generating high power losses in the mosfet. The NE555 is not ideal as a mosfet driver, but it is good enough in this application.

Uploading the Code

Last, but not least, the ESP32 dev board is doing the heavy lifting in this driver. It uses special libraries to connect to a smartphone via bluetooth and it converts the music to I2S signal which is fed directly into the mosfet's gate via GPIO 16 pin. The libraries I have used are: Phil Schatzmann's Arduino ADF/AudioKit HAL and ESP32 Bluetooth A2DP Audio Library.


Before compiling the code make sure you have installed esp32 board v2.0.17 or older.

The arduino code can be found below:

/*
Streaming Music from Bluetooth

Copyright (C) 2020 Phil Schatzmann
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

// ==> Example A2DP Receiver which uses the A2DP I2S output to an AudioKit board

#include "AudioKitHAL.h" // https://github.com/pschatzmann/arduino-audiokit
#include "BluetoothA2DPSink.h"

AudioKit kit;
BluetoothA2DPSink a2dp_sink;

void setup() {
//LOGLEVEL_AUDIOKIT = AudioKitInfo;
// define custom pins pins
i2s_pin_config_t my_pin_config = {
.mck_io_num = -1,
.bck_io_num = -1,
.ws_io_num = -1,
.data_out_num = 16, //GPIO 16
.data_in_num = -1
};

a2dp_sink.set_pin_config(my_pin_config);
a2dp_sink.start("BLUETOOTH_NAME",true);

}
void loop() {
//delay(1000); // do nothing
}