Mirko Pavleski
Published © GPL3+

Universal Arduino Staccato controller for Tesla Coils

Staccato Controller (interrupter) was developed in the attempt to create longer sparks from Tesla Coil reducing the input power

BeginnerFull instructions provided3 hours292
Universal Arduino Staccato controller for Tesla Coils

Things used in this project

Hardware components

Arduino Nano R3
Arduino Nano R3
×1
Linear regulator (7812)
×1
Transistor BC337
×1
transistor BC547
×1
BT139 600 Triac
×1
graetz bridge 1A
×1
Zener Single Diode, 4.7 V
Zener Single Diode, 4.7 V
×1
1N4007 – High Voltage, High Current Rated Diode
1N4007 – High Voltage, High Current Rated Diode
×1
Rotary potentiometer (generic)
Rotary potentiometer (generic)
×3
resistors, capacitors
×1
Small trafo 220/12V
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free

Story

Read more

Schematics

Circuit diagram

...

Code

Arduino code

C/C++
...
// Staccato controller for Vacuum Tube Tesla Coil (VTTC)
// Ver 1
// 1.9.2023 - Kaj Luukko

const int pinAC = A1;         // 50 Hz half wave input pin A1
const int potInterval = A2;   // Potentiometer for intervall pin A2
const int potLenght = A3;     // Potentiometer for lenght pin A3
const int potDelay = A4;      // Potentiometer for delay pin A4
const int outPinTriac = 12;   // Digital out pin 12 for triac
const int outPinLED = 13;     // Digital out pin 13 for LED
const int inButton = 2;       // Push button input digital pin 2
int i = 0;

void setup() {
  pinMode(pinAC, INPUT);
  pinMode(potInterval, INPUT);
  pinMode(outPinTriac, OUTPUT);
  pinMode(outPinLED, OUTPUT);
  pinMode(inButton, INPUT);
  digitalWrite(outPinTriac, LOW);
  digitalWrite(outPinLED, LOW);
}

void loop() {
  while (analogRead(pinAC) < 15){}
    if (digitalRead(inButton) == HIGH) {
    fire();
    while (digitalRead(inButton) == HIGH) {}
  }
  i = i + 1;
  if ((i >= map(analogRead(potInterval),0,1020,50,0)) && (analogRead(potInterval) > 10)){
    fire();
    i = 0;
  }
  if (i > 0){
    while (analogRead(pinAC)>15){}
  }
}

void fire() {
  for (int ii=0; ii<map(analogRead(potLenght),0,1020,25,1); ii++) {
      delayMicroseconds(map(analogRead(potDelay),0,1020,0,9000));
      digitalWrite(outPinTriac, HIGH);
      digitalWrite(outPinLED, HIGH);
      delay(1);
      digitalWrite(outPinTriac, LOW);
      while (analogRead(pinAC) > 15){}
      digitalWrite(outPinLED, LOW);
      while (analogRead(pinAC) < 15){}  
      
  }
}

Credits

Mirko Pavleski

Mirko Pavleski

118 projects • 1166 followers

Comments