Project showcase

Punch Activated Arm Flamethrowers (Real Firebending) © GPL3+

Shoot fireballs from your fists when you throw a punch with these arm mounted smart flamethrowers!

  • 1,791 respects

Components and supplies

About this project



The art of firebending as seen in Avatar: The Last Airbender and The Legend of Korra is a melding of Asian martial arts and pyrokinesis. So how can we control fire with fancy fight moves in real life? With Arduinos, of course!

The flamethrower part of this project is composed of a butane fuel chamber and a solenoid valve. At the business end there is a modified arc lighter.

The punch activated part of this project is an Arduino Pro Mini and an accelerometer (in this case an LIS3DH Breakout from Adafruit). A fist performing a punch has a fairly unique acceleration profile that looks like a significant positive acceleration (the beginning of the punch), followed by an extreme deceleration (the end of the punch) within a small window of time (<100ms). That means our Arduino can distinguish punches from normal everyday gesticulations pretty easily!

Once everything is mounted to an arm, we have a flamethrower that can be actuated by an Arduino only when the arm has thrown a punch. And before you can say "sparky sparky boom man" you've become a firebender!

This isn't a beginner project, and even for advanced users there is danger inherent in shooting fireballs from your fists. Read at your own risk!

Fuel Chamber

Get some pipes! Specifically:

  • 1/4" male quick connect
  • 1/2" to 1/4" galvanized reducer
  • 1/2" black iron nipple, 3" length
  • 1/2" to 1/8" galvanized reducer
  • 1/8" black iron close nipple
  • 1/8" NPT to 3/16" barb

Use teflon paste or tape on the threads and tighten everything up with crescent and pipe wrenches. Make sure the lever of the ball valve and the solenoid valve line up, since eventually this will be mounted to a flat board of wood.

Butane Canister

You'll need an adapter to fill your fuel tank with butane. A 3/16" aluminum tube fits perfectly into the quick connect. With the ball valve closed, put the aluminum tube in until it hits bottom and mark your cut line.

Use a tube cutter to cut your tube down to size. Mushroom one end a bit with a ball peen hammer and slide an O-ring up to the edge. This will give your tube a way to push against the quick connect and form a seal. Put an O-ring around the butane canister nozzle also.

I used a benzomatic butane canister, which is pricier than butane for stoves but doesn't have any of that putrid smell added.

Test For Leaks

Filling with butane

Test out your custom fill adapter and fuel chamber! Dunk your chamber into water or squirt it with soapy water to check for leaks. Once you're confirmed leak free, go ahead and test that solenoid valve. A 2 cell LiPo is perfect for this project, so touch the solenoid's leads to the battery's and make sure you get a cool butane mist. If you used teflon paste on the pipe threads you might spray some of that too, that's probably fine.

Arm Mount

You'll need something sturdy to mount everything onto. I used 1/4" thick poplar, which isn't exactly fire proof but holds up well enough. The board is 2.5" wide and 9" long. I marked two holes for the handle about an inch from the end, and marked holes for zip-tying the fuel chamber such that the fuel chamber nozzle was 0.75" from the end.

I used pipe strapping to attach some 1" D rings to the back end of the wood board. Zip tie the fuel chamber to the wood, pull tight! You don't want any give there. I hot glued a 1" nylon strap to one of the D rings, then looped through the other and held the end in my hand. This serves as a sort of an emergency release, so that if anything bad happens it will be easy to ditch the flamethrower. Just let go of the strap and fling the bad things far away!


An Arc Lighter like this is a pretty neat little device. Let's take it apart! Most arc lighters I've seen have a little screw on the bottom, unscrew it and DON'T LOSE IT! Remove the innards and get rid of any hinge-y parts (you'll probably need to poke some rods out of holes). Get your trusty rotary tool and cut away a section by the button hole to make room for wires.

Solder lead wires to the button terminals. Get your trusty multimeter and measure the voltage at the wires (did I mention the lighter has probably been on this whole time?). You should read 3-4 volts take note of which is positive and which is negative (you'll need this info to connect to the optoisolator). In my case orange was ground and yellow was positive. Put the innards back into the metal case and re-screw that small screw that you saved from earlier.


Check out the attached schematic. Some notes:

  • In the schematic the piezo buzzer is a stand-in for the arc lighter.
  • I have trust issues regarding Pro Mini regulators not smoking. Feel free to use an external 7805 or something.
  • I assumed the ground of the arc lighter would be noisy as h*ck, hence the optoisolator. You might get away with just attaching this to a digital pin!
  • Use a proper battery connector and throw a slide switch on there somewhere. It got annoying real fast having to plug and unplug to turn on and off.
  • I'm a big fan of wire nuts, I used those to connect the solenoid to the board and diode. It might be better if you just solder that.

Putting It Together

Mount your electronics and the arc lighter. I used double sided foam tape and hot glue because I was in a hurry, you may want to use more secure methods. Upload the awesome code that should be at the bottom of this page. Plug in your LiPo/turn the electronics on and do a dry test. NO BUTANE AT THIS POINT. Just test to see if you can get a click from the solenoid and a high pitched arc from the lighter when you throw a decent punch. You can also tweak the punch thresholds to make it easier to trigger for now.

Once you're reasonably sure that you won't accidentally set yourself on fire, turn everything off and fill the fuel chamber. I find that a good 20-Mississippi count will give you at least 6 good fireballs, or just enough to complete one modified Dancing Dragon. Make sure you're in a well ventilated area, and let the excess butane air out a bit before turning everything on. Have a friend and a fire extinguisher handy and have a plan for what you'll do if your arm catches on fire. Don't aim at anything you don't want to be on fire. I highly recommend wearing welding gloves until you're comfortable with shooting fireballs out your fists.

The thing that gave me the most trouble was getting the butane to ignite. I found that the arc lighter, while convenient for many reasons was "blown out" easily by the butane stream. After some finagling it seems that putting the arc further out and to the side of the stream is better for ignition, but it's a bit awkward to mount. Definitely room for improvement!


Arduino sketch for a punch detecting flamethrower.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_LIS3DH.h>
#include <Adafruit_Sensor.h>

// Used for software SPI
#define LIS3DH_CLK 13
#define LIS3DH_MISO 12
#define LIS3DH_MOSI 11
// Used for hardware & software SPI
#define LIS3DH_CS 10

//software SPI

//A fist experiences significant acceleration during a good punch,
//followed by massive deceleration at the end of the punch.
//This happens within a fairly small window of time, so it's
//pretty easy to distinguish a punch from normal gesticulations.

unsigned long punchStart = 0;//variable for non-blocking punch timeframe check
const long punchInterval = 200;//timeframe of a punch in ms, from max acceleration to max deceleration, 200 is very generous
int punchAccel = 20;//the beginning of a punch in m/s^2, could be over 50m/s^2 depending on the puncher
int punchDecel = -40;//the end of a punch in m/s^2, could be less than -100m/s^2 depending on the puncher
int flameTime = 250;//how long the flame lasts, in ms

void setup(void) {
  //Test to see if accelerometer is communicating
  Serial.println("LIS3DH test!");  
  if (! lis.begin(0x18)) {   // change this to 0x19 for alternative i2c address
    Serial.println("Couldnt start");
    while (1);
  Serial.println("LIS3DH found!");
  lis.setRange(LIS3DH_RANGE_16_G);   //+-16G range for good punch detection
  Serial.print("Range = "); Serial.print(2 << lis.getRange());  
  pinMode(8, OUTPUT); //Solenoid valve
  pinMode(9, OUTPUT); //Arc lighter
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);

void loop() {;
  sensors_event_t event; 
 //look for punch starting, at least 20 m/s^2
  if (event.acceleration.x > punchAccel){
     punchStart = millis();
  unsigned long currentMillis = millis();

  //look for punch ending, less than -40 m/s^2
  if (event.acceleration.x < punchDecel && currentMillis - punchStart < punchInterval){

void Fire(int flameTime){
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);


firebending schematic
Circuit diagram of the firebending brains. Note that the solenoid is the solenoid valve, and the piezo buzzer is a stand in for the arc lighter.
Firebending schem hufmj1tsrx


Similar projects you might like


Project in progress by Team Petoi

  • 2,190 respects

Make an Autonomous "Follow Me" Cooler

Project tutorial by Hacker Shack

  • 755 respects

Security Access Using RFID Reader

by Aritro Mukherjee

  • 499 respects

Stringent, the $15 Wall Plotter

Project tutorial by Fredrik Stridsman

  • 335 respects

Motion Following Motorized Camera Base

Project tutorial by Lindsay Fox

  • 388 respects

Magnet Levitation with Arduino

Project tutorial by jsirgado

  • 273 respects
Add projectSign up / Login