Hands-on physics

A particle accelerator you can build

A working model of the real thing

Open hardware that turns particle acceleration into something you can watch

The accelerators down the hall at DFNA are large, shielded and impossible to open up in front of a curious visitor. This desktop model shows the same core idea in miniature: use precisely-timed electromagnets to accelerate a projectile, one stage at a time.

Built in-house with 3D printing, CNC machining and an Arduino, it turns an abstract concept into something children and adults can watch, touch and understand in a few seconds — then ask the questions that lead to the real physics.

It is designed as open hardware: every part, the wiring, the 3D models and the control code are documented so that a school, a student or a hobbyist can rebuild it. It travels with us to science fairs and school events such as the ReCoNnect Science Caravan.

The assembled three-stage electromagnetic accelerator model: a circular 3D-printed track carrying three coils, driven by an Arduino Uno and a breadboard
The assembled model — a 3D-printed track with three electromagnetic coils, controlled by an Arduino Uno.

How it works

Sense the ball, fire the coil, repeat — the staged-acceleration principle

A small ferromagnetic ball runs along a track lined with electromagnetic coils. As the ball approaches a coil, an optical barrier — an infrared LED facing a phototransistor — detects it, and the Arduino switches that coil on for a few milliseconds through a MOSFET. The magnetic field pulls the ball in.

The trick is timing: the coil is switched off the instant the ball reaches its centre, so the pull is always forward and never backward. Each stage adds a little more speed — exactly the staged principle that real linear and tandem accelerators use to reach high energies.

The control loop, per stage
1
Read the optical sensor as the ball travels down the track.
2
Compare to a threshold — has the beam been broken by the ball?
3
Switch the MOSFET on to energise the coil for that stage.
4
Hold ~20 ms, then switch off — the ball is pulled forward, and the next stage takes over.
Block diagram of the multistage coil accelerator A 12 volt, 2 amp supply powers an Arduino Uno, which drives three stages. Each stage has a MOSFET switching a coil, with an optical sensor detecting the ferromagnetic ball. 12 V / 2 A supply Arduino Uno MOSFET 1 MOSFET 2 MOSFET 3 Coil 1 Coil 2 Coil 3 Sensor 1 Sensor 2 Sensor 3 Ferromagnetic ball Sensors feed the ball's position back to the Arduino
Block diagram — three acceleration stages driven by one Arduino.

The 2026 rebuild

A faster, more reliable, more reproducible version

The latest iteration keeps only the ball guides from the earlier version — the electronics were redesigned from scratch, and the mechanics reworked so that others can reproduce the build reliably.

  • Relays → MOSFETs. The old 5 V relay switching was replaced with MOSFET transistors, allowing higher coil voltages and currents and much faster, more efficient switching.
  • Optical barriers for timing. Each stage uses an infrared LED and a phototransistor to detect the ball precisely and synchronise when its coil fires.
  • Redesigned mechanics. New printed mounts for the optical barriers and a new support system for the electromagnetic coils.
  • Reproducible coil winding. An improved winding technique that is easier to repeat consistently across builds.
  • Documented for replication. A complete bill of materials, wiring, 3D models and code — so the design keeps improving from one version to the next.
At a glance
  • Three-stage electromagnetic (coil) accelerator.
  • 18 mm ferromagnetic ball as the projectile.
  • Arduino Uno R3 control; 3× IRF3205 MOSFET coil drivers.
  • Four IR optical barriers (BPW40 phototransistors).
  • ~20 ms coil pulse per stage; 12 V / 2 A supply.
  • 3D-printed structure; designed in KiCad, Arduino IDE & PrusaSlicer.

Open documentation

Everything you need to rebuild it — free to use for education

How to build it
1
Print the parts. Slice and 3D-print the frame — the coil supports, projectile guide, optical-sensor housings and controller mount.
2
Wind the coils. Wind the three electromagnetic coils and fit them onto their printed supports along the track.
3
Build the optical barriers. Pair each IR LED with a BPW40 phototransistor across the track (four barriers), with 220 Ω and 10 kΩ resistors.
4
Wire the drivers. Connect each coil to an IRF3205 MOSFET, following the schematic below, with the coils powered from the 12 V / 2 A supply.
5
Connect the Arduino. Wire the sensor outputs to the Arduino inputs and the MOSFET gates to its output pins.
6
Upload the code. Flash the Arduino sketch (below) with the Arduino IDE.
7
Calibrate & test. Tune the detection threshold and the coil-pulse length, then release the ball and fine-tune the timing stage by stage.
Hardware — bill of materials
#ComponentQtyPurpose
1Arduino Uno R31Control unit
2MOSFET IRF32053Coil drivers
3Electromagnetic coil3Acceleration stages
4Phototransistor BPW404Projectile detection
5IR LED4Optical barriers
6Resistor 220 Ω7Current limiting
7Resistor 10 kΩ7Biasing
8Power supply 12 V / 2 A1System power
9Ferromagnetic ball, 18 mm1Projectile
103D-printed frame1Mechanical structure
11Wires & connectorsInterconnects
Software & tools
  • Arduino IDE — firmware development & upload (free)
  • KiCad 8 — electronic schematic (open source)
  • Cura / PrusaSlicer — slicing the 3D-printed parts
3D CAD model of a printed coil holder for the accelerator model
3D-printed parts include the coil supports, projectile guide, optical-sensor housings and controller mount.
Wiring schematic
KiCad schematic: an Arduino Uno driving three IRF3205 MOSFETs and coils, with four IR-LED and BPW40 optical barriers, current-limiting and biasing resistors, and a 12 V barrel-jack supply
The full electronic schematic (KiCad) — Arduino Uno, three IRF3205 coil drivers, four IR optical barriers and the 12 V supply. Click to open full size.
Control code (Arduino)

The sketch continuously reads the optical barriers; when a sensor detects the ball, its coil is energised for about 20 ms, then released before the ball reaches the coil centre. Example logic for the three stages:

const int mosfetPins[] = {5, 6, 7};
const int numarEtaje = 3;
const int prag = 200;
const int impulsMs = 20;

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < numarEtaje; i++) {
    pinMode(mosfetPins[i], OUTPUT);
    digitalWrite(mosfetPins[i], LOW);
  }
}

void loop() {
  for (int i = 0; i < numarEtaje; i++) {
    int valoare = analogRead(senzoriIR[i]);
    Serial.print("Senzor ");
    Serial.print(i + 1);
    Serial.print(": ");
    Serial.println(valoare);
    if (valoare > prag) {
      digitalWrite(mosfetPins[i], HIGH);
      delay(impulsMs);
      digitalWrite(mosfetPins[i], LOW);
      while (analogRead(senzoriIR[i]) > prag) {
        delay(10);
      }
    }
  }
}

Excerpt from the project documentation. The full sketch, KiCad schematic and printable STL files are available for schools and educational projects — get in touch.

Bring the physics to your event

The accelerator model is part of DFNA's outreach toolkit — a way to start a conversation about accelerators, magnetism and nuclear science with visitors of every age. We bring it to school visits, science fairs and events like the ReCoNnect Science Caravan.

Want a demonstration, or the plans to build your own? We would love to hear from you.

Our outreach Get in touch
Built at DFNA with
  • 3D printing
  • CNC machining
  • Arduino & open electronics