Visualise Faraday’s Law with Arduino: Electromagnetic Induction Smart Project
Electromagnetic induction is one of the most important principles in physics — it is the foundation of generators, transformers, wireless charging, and electric motors. Yet most students encounter it only as equations on paper. This smart project uses Arduino to bring electromagnetic induction to life, measuring and visualising the induced EMF as you move a magnet near a coil in real time.
This project connects abstract physics concepts to measurable data, making it ideal for Class 12 physics demonstrations, CBSE science fair submissions, and undergraduate lab reports.
Physics Background: Faraday’s Law
Faraday’s Law states that the induced EMF in a coil is proportional to the rate of change of magnetic flux through it:
ε = −N × (dΦ/dt)
Where:
- ε = induced EMF (volts)
- N = number of turns in the coil
- dΦ/dt = rate of change of magnetic flux
The negative sign represents Lenz’s Law — the induced current opposes the change in flux that caused it. With Arduino, you can quantify this relationship: move the magnet faster, see a larger voltage spike. More coil turns, larger voltage. This is Faraday’s Law made tangible.
Components Required
- Arduino Uno
- Pickup coil: 500-1000 turns of 30 AWG enamelled copper wire on a 4cm diameter former (or repurposed from an old transformer secondary winding)
- Neodymium magnet (strong, cylindrical preferred)
- Op-amp amplifier: LM358 or LM741 in non-inverting configuration (×10 gain)
- 100Ω and 1kΩ resistors (for op-amp gain setting)
- 0.1µF decoupling capacitor
- Processing software (free, from processing.org) or Arduino Serial Plotter
- USB cable, breadboard, jumper wires
Building the Sensing Circuit
The Pickup Coil
Wind 500 turns of 30 AWG enamelled (magnet) wire on a cylindrical former about 4cm in diameter and 3cm long. Sand the enamel off the wire ends with fine sandpaper or light flame, then tin with solder. The coil resistance should be approximately 100-200Ω.
Alternatively, the secondary winding from a small mains transformer (240V/6V type) works perfectly — the 6V secondary has approximately the right number of turns and is already wound on a former.
Amplifier Circuit (LM358)
The raw induced EMF from a moving magnet is typically 10-50mV — too small for accurate Arduino ADC measurement. An amplifier with ×10 to ×50 gain brings the signal into the 0-5V ADC range.
Non-inverting amplifier configuration:
- LM358 VCC → 5V, GND → Arduino GND
- Coil positive → LM358 pin 3 (non-inverting input +)
- Coil negative → GND
- LM358 pin 1 (output) → 1kΩ resistor → pin 2 (inverting input −) AND → Arduino A0
- LM358 pin 2 → 100Ω resistor → GND
This gives a gain of 1 + (1000/100) = 11×. Add a 2.5V bias to the non-inverting input (via voltage divider 10kΩ/10kΩ) to centre the signal in the ADC range, allowing both positive and negative EMF to be measured.
Arduino Code
// Electromagnetic Induction Visualiser
// Reads amplified coil voltage and sends to Serial Plotter
const int EMF_PIN = A0;
const float V_REF = 5.0; // Arduino reference voltage
const float GAIN = 11.0; // Op-amp gain
const float BIAS = 2.5; // DC bias voltage added
const int NUM_SAMPLES = 5; // Averaging samples
float rawVoltage, coilVoltage;
float baseline;
int sampleIndex = 0;
float sampleBuffer[NUM_SAMPLES];
void setup() {
Serial.begin(115200);
// Calculate baseline (coil at rest, no magnet)
long sum = 0;
for (int i = 0; i < 100; i++) {
sum += analogRead(EMF_PIN);
delay(5);
}
baseline = (sum / 100.0) * (V_REF / 1023.0);
Serial.println("EMF_mV"); // Header for Serial Plotter
}
void loop() {
// Read ADC
int adcValue = analogRead(EMF_PIN);
rawVoltage = adcValue * (V_REF / 1023.0);
// Remove bias and calculate actual coil EMF
coilVoltage = (rawVoltage - baseline) / GAIN;
float emf_mV = coilVoltage * 1000.0; // Convert to mV
// Send to Serial Plotter
Serial.println(emf_mV);
delayMicroseconds(500); // 2kHz sample rate
}
Open the Arduino Serial Plotter (Tools → Serial Plotter) to see real-time EMF graphs as you move the magnet near and away from the coil.
Experiments to Conduct
Experiment 1: Verify Faraday’s Law
Move the magnet at different speeds — slow, medium, fast. Observe that:
- Faster movement = larger EMF spike (higher dΦ/dt)
- Slower movement = smaller but wider EMF pulse (same total flux change)
- Stationary magnet = zero EMF (no change in flux)
This directly demonstrates that induced EMF depends on the rate of flux change, not the flux magnitude itself.
Experiment 2: Verify Lenz’s Law
With the bias offset, your circuit can show both positive and negative EMF. Push the magnet toward the coil — note the sign of EMF. Pull it away — the EMF reverses sign. This demonstrates that the induced current opposes the change (Lenz’s Law).
Experiment 3: Effect of Coil Turns
If you have coils with different turn counts, compare peak EMF for the same magnet movement speed. EMF should scale linearly with N (number of turns). This is a quantitative verification of Faraday’s Law.
Experiment 4: AC Generator Simulation
Rotate the magnet continuously near the coil at constant speed. You will see a roughly sinusoidal EMF waveform on the Serial Plotter — a direct demonstration of AC generator operation. Vary the rotation speed to see frequency change.
Adding Data Logging
// Enhanced version with timestamp and CSV output
void loop() {
unsigned long timestamp = micros();
int adcValue = analogRead(EMF_PIN);
float rawV = adcValue * (V_REF / 1023.0);
float emf_mV = ((rawV - baseline) / GAIN) * 1000.0;
// CSV format: timestamp_us, emf_mV
Serial.print(timestamp);
Serial.print(",");
Serial.println(emf_mV);
}
Open Arduino Serial Monitor, set baud to 115200, and copy-paste output into Excel or Google Sheets for analysis. Calculate peak EMF, total impulse (area under curve), and compare with theoretical predictions.
Project Enclosure Ideas
For a polished competition display:
- Mount the coil in a fixed perspex holder with a guide tube for the magnet
- Add a laptop or small display showing real-time EMF graph
- Add a small LED bank connected through the coil (via a bridge rectifier) to visually show induced current — the LEDs light up as you move the magnet
- Include a printed chart comparing your experimental results to theoretical Faraday’s Law predictions
Frequently Asked Questions
Why does my Arduino read noise even when the magnet is not moving?
The amplified coil acts as an antenna and picks up electromagnetic interference (EMI) from power lines, phone signals, and nearby electronics. Add a 100nF capacitor across the coil input to the amplifier to filter high-frequency noise. Keep the coil away from switching power supplies.
Can I use a Hall effect sensor instead of a coil?
A Hall effect sensor measures magnetic field strength (B), not rate of change. It will not demonstrate electromagnetic induction directly. However, you can use one alongside the coil — compare static field strength (Hall sensor) with the induced EMF (coil) to show the distinction between flux and flux rate of change.
What makes this better than a galvanometer demonstration?
A galvanometer shows qualitative deflection. This Arduino setup provides quantitative measurements with timestamps, allowing you to calculate actual induced EMF values, verify the mathematical form of Faraday’s Law numerically, and export data for further analysis. It is far more suitable for a science fair or physics lab report.
Is this project appropriate for Class 12 CBSE?
Yes. Electromagnetic induction is a key Chapter 6 topic in CBSE Class 12 Physics. This project directly demonstrates the concepts assessed in board practical examinations and is excellent material for internal assessment projects.
Conclusion
Building an electromagnetic induction visualiser with Arduino transforms a textbook equation into a real-time measurable phenomenon. You not only understand that Faraday’s Law is true — you can prove it quantitatively with your own data. This is the essence of physics: theory confirmed by experiment. For competitions, the combination of correct physics, clean data, and professional Arduino-based measurement makes for a genuinely impressive submission.
Add comment