To run a high-power 12V or 24V LED strip from an Arduino, you cannot connect the strip directly to the microcontroller's 5V GPIO pins. You need a dedicated AC-to-DC LED driver, a logic-level N-channel MOSFET to handle the high current via PWM (Pulse Width Modulation), and a clear understanding of how AC-side dimmers interact with DC switching power supplies. This guide provides the exact circuit math, thermal constraints, and component picks to build a reliable, flicker-free lighting circuit.
Lumens, Watts, and Efficacy: Sizing the Strip
Before selecting a power supply or MOSFET, you must calculate the total wattage of your LED strip. Strip efficacy (lumens per watt) dictates how much heat the strip generates and how much current your driver must supply. High-efficacy strips run cooler, extending the lifespan of the PCB and the adhesive backing.
| LED Type | Density (LEDs/m) | Watts/meter | Lumens/meter | Efficacy (lm/W) | Best Application |
|---|---|---|---|---|---|
| SMD2835 | 120 | 9.6W | 1,150 | ~120 lm/W | High-efficiency task lighting |
| COB (Chip-on-Board) | 480 | 12.0W | 1,050 | ~88 lm/W | Dot-free under-cabinet (high CRI) |
| SMD5050 (RGBW) | 60 | 18.0W | 900 | ~50 lm/W | Dynamic color mixing, accent |
Efficacy Context: A 5-meter roll of 12W/m COB strip draws 60W total (2.5A at 24V). While its efficacy is lower than the SMD2835, the continuous phosphor coating eliminates the harsh 'spotting' effect on reflective surfaces. Always size your power supply at 120% of the calculated continuous load to prevent thermal throttling.
AC Driver Selection, Inrush Math, and Dimmer Criteria
The most common mistake in Arduino lighting projects is placing a standard AC wall dimmer upstream of a non-dimmable switching power supply. This chops the AC sine wave, causing the driver's internal rectifier to overheat and fail. If you want AC-side dimming alongside your Arduino DC-side control, you must select the correct driver and dimmer pairing.
Dimmer Compatibility: Trailing Edge and Minimum Load
If your application requires a physical wall dimmer to set the 'maximum' baseline while the Arduino handles the dynamic PWM fading, you must use a trailing-edge (ELV/MLV) dimmer paired with a specifically rated 'dimmable' LED driver. Trailing-edge dimmers use MOSFETs instead of TRIACs, which prevents the harsh voltage spikes that destroy LED driver capacitors.
Critically, trailing-edge dimmers require a minimum load to keep their internal logic powered. For example, the Lutron Diva DVELV requires a minimum of 15W. If you connect a 5W LED strip, the dimmer will strobe or fail to turn on. Always verify the strip's total wattage exceeds the dimmer's minimum load threshold.
Circuit Impact Math: Inrush and Power Factor
Switching LED drivers use large bulk capacitors on the AC input. When you flip the breaker on, these capacitors look like a dead short for a few milliseconds. According to Lutron's LED dimming engineering guidelines, this inrush current can be 50 to 100 times the steady-state current.
- Steady State: A 150W 24V driver draws ~0.65A at 115VAC (assuming 0.95 Power Factor).
- Inrush Current: The Mean Well LRS-150-24 datasheet specifies a cold-start inrush of 45A at 115VAC for 1ms.
- Breaker Sizing: If you wire three 150W drivers to a single 15A lighting circuit, the combined 135A inrush spike will instantly trip a standard thermal-magnetic breaker. You must stagger the Arduino turn-on sequence using solid-state relays, or install an NTC thermistor on the AC line to limit inrush.
Why LED Strips Flicker (and the 20kHz PWM Fix)
Flicker in Arduino-driven LED strips usually stems from two distinct sources: AC ripple from the power supply, or low-frequency PWM from the microcontroller.
1. Arduino PWM Frequency (Camera Banding)
By default, the Arduino Uno's analogWrite() function operates at roughly 490Hz. While the human eye integrates this into a smooth dimming effect due to persistence of vision, smartphone cameras and video equipment will capture severe strobing or 'banding'. To fix this, you must reconfigure the Arduino's hardware timers to push the PWM frequency above the human flicker fusion threshold and outside the frame-rate aliasing of standard cameras.
By manipulating Timer1, you can push pins 9 and 10 to 31.25kHz (ultrasonic, completely invisible to cameras). As detailed in the official Arduino Timer Documentation, add this line to your setup() function:
TCCR1B = TCCR1B & B11111000 | B00000001; // Sets Timer1 to 31.25kHz on Pins 9 & 10
2. AC Ripple and Cheap Drivers
If you have increased the PWM frequency and still see a subtle 120Hz shimmer, your AC-to-DC driver has poor output filtering. Cheap, unbranded drivers often exhibit 5% to 10% voltage ripple on the DC output. The fix is to use a driver with active PFC (Power Factor Correction) and low-ripple output, or add a 1000µF 35V electrolytic capacitor across the 24V DC terminals near the MOSFET.
Thermal Constraints and Enclosure Sizing
When switching high DC currents, the MOSFET acts as a variable resistor. The heat generated is dictated by the MOSFET's Rds(on) (Drain-Source On-Resistance) at your specific Gate-Source voltage (Vgs).
The All About Circuits LED driving guide emphasizes using logic-level MOSFETs. A standard MOSFET like the IRF520 requires 10V at the gate to fully open, but the Arduino only outputs 5V. At 5V, an IRF520 will operate in its linear region, acting as a heater rather than a switch, and will melt.
- The Fix: Use a logic-level MOSFET like the IRLZ44N. Its Rds(on) is guaranteed at 0.022Ω when Vgs = 5V.
- Heat Math: For a 6A load (one 5m roll of COB strip), Power = I² × R = 36 × 0.022 = 0.79W. The TO-220 package can dissipate ~1W in free air without a heatsink.
- Scaling Up: If you parallel three strips (18A total), Power = 324 × 0.022 = 7.1W. This requires a dedicated aluminum clip-on heatsink or an active cooling fan.
Enclosure Constraints: Per NEC Article 411 (Lighting Systems Operating at 30 Volts or Less), the AC-to-DC LED driver must be housed in a listed enclosure or junction box to prevent accidental contact with mains voltage. Do not leave the 115VAC screw terminals exposed on a workbench. Use a NEMA 1 plastic enclosure with knockouts, and route the 24V DC output through a strain-relief gland to your Arduino breadboard or custom PCB.
The Decision Tree: Exact Part Picks for Your Build
Use this decision matrix to select the exact components for your specific fixture count and control requirements.
| Condition / Requirement | Component Choice | Why This Pick? |
|---|---|---|
| Total Strip Load < 100W (approx 4A at 24V) | Mean Well LRS-100-24 | Compact, low inrush, fits in standard 4x4 junction boxes. |
| Total Strip Load 100W - 150W (approx 6A) | Mean Well LRS-150-24 | Active PFC, 0.95 PF, handles continuous 24V loads without thermal derating. |
| Need physical AC wall dimming baseline? | Lutron Diva DVELV (Trailing Edge) | MOSFET-based, prevents driver damage. Ensure strip load is >15W. |
| Arduino PWM Switching (Single Strip < 8A) | IRLZ44N (TO-220 package) | Logic-level (5V Vgs), 0.022Ω Rds(on), no heatsink required under 8A. |
| Arduino PWM Switching (Multiple Strips > 10A) | IRLB3034PbF + Heatsink | Massive current capacity (195A max), 0.0017Ω Rds(on) at 5V. Runs ice cold at 15A. |
The Default Pick (No-Brainer Build)
If you are building a standard under-cabinet or desktop bias lighting setup with up to 10 meters of 24V COB LED strip (approx 120W total), stop overthinking and buy this exact combination:
- Driver: Mean Well LRS-150-24 (Non-dimmable, let the Arduino handle 100% of the dimming).
- Switch: IRLZ44N MOSFET on a pre-wired breakout board.
- Microcontroller: Arduino Nano (easily hidden in the DC enclosure) running Timer1 at 31.25kHz.
This combination eliminates AC dimmer minimum-load errors, prevents camera flicker, and guarantees the MOSFET runs below 40°C without a heatsink.






