Community project

Bluetooth LED Control

Arduino
Photo of Bluetooth LED Control
Generated with AI

Caliel

Published September 15, 2026

This project builds a push-button controlled RGB LED strip using an Arduino Uno and three logic-level MOSFETs to switch each color channel independently. The 5V analog RGB strip connects through the transistors, which are driven by PWM signals from the Arduino's digital pins, allowing full color control with simple button presses.

The guide includes a complete wiring diagram showing how to connect the LED strip, MOSFETs, and push button to the Arduino, a full parts list with component specifications, and ready-to-upload firmware that cycles through five preset colors (off, red, green, blue, and white) with debouncing for reliable button input. Assembly takes about 30 minutes and requires only basic soldering skills.

Wiring diagram

Wiring diagram for Bluetooth LED Control

Gather all the parts

QtyComponent
1

Fita LED RGB analógica de 5 V, 4 pinos

5 V, RGB, 4 pinos

Uma fita de luz com fios separados para vermelho, verde e azul, que o Arduino mistura para formar cores.

1

USB-C 5V Adapter

5 V, mínimo 2 A

USB-C wall adapter delivering regulated 5 V to the board's USB or VBUS rail. Default wired power source for desktop / stationary projects.

1

IRLZ44N Logic-Level N-Channel MOSFET

IRLZ44N

Logic-level N-channel MOSFET commonly used as a low-side switch for DC loads from 3.3V or 5V microcontroller GPIO. Use a gate resistor, a gate pulldown, and a flyback diode for inductive loads.

1

IRLZ44N Logic-Level N-Channel MOSFET

IRLZ44N

Logic-level N-channel MOSFET commonly used as a low-side switch for DC loads from 3.3V or 5V microcontroller GPIO. Use a gate resistor, a gate pulldown, and a flyback diode for inductive loads.

1

IRLZ44N Logic-Level N-Channel MOSFET

IRLZ44N

Logic-level N-channel MOSFET commonly used as a low-side switch for DC loads from 3.3V or 5V microcontroller GPIO. Use a gate resistor, a gate pulldown, and a flyback diode for inductive loads.

1

Push Button

Botão momentâneo

Momentary push button switch

1

Resistor

220 Ω

Um resistor que protege a saída do Arduino enquanto ela controla o transistor vermelho.

1

Resistor

220 Ω

Um resistor que protege a saída do Arduino enquanto ela controla o transistor verde.

1

Resistor

220 Ω

Um resistor que protege a saída do Arduino enquanto ela controla o transistor azul.

1

Resistor

10 kΩ

Um resistor que mantém o canal vermelho apagado enquanto o Arduino está iniciando.

1

Resistor

10 kΩ

Um resistor que mantém o canal verde apagado enquanto o Arduino está iniciando.

1

Resistor

10 kΩ

Um resistor que mantém o canal azul apagado enquanto o Arduino está iniciando.

Assemble it in 6 steps

1. Separe a fonte da fita

Use uma fonte USB de 5 V capaz de fornecer pelo menos 2 A para a fita. Não ligue o fio positivo da fita no pino 5V do Arduino: a fita pode puxar corrente demais e danificar a placa.

  • O fio comum da fita costuma estar marcado como +5V, V+ ou uma seta. Os outros três fios são R, G e B.
  • Não use uma fonte de 12 V: 12 V em uma fita marcada 5 V pode queimá-la imediatamente.

2. Faça o terra comum

Ligue o GND da fonte USB da fita ao GND do Arduino e aos pinos SOURCE dos três IRLZ44N. Essa ligação faz o comando do Arduino ter a mesma referência elétrica da fita.

  • Deixe o Arduino desligado e a fonte USB da fita desconectada enquanto monta.
  • Sem este GND compartilhado, a fita pode não responder ou mostrar cores erradas.

3. Ligue a fita aos transistores

Ligue o +5V da fonte USB ao fio +5V da fita. Ligue o fio R ao DRAIN do primeiro IRLZ44N, o fio G ao DRAIN do segundo e o fio B ao DRAIN do terceiro. Com a face plana do IRLZ44N voltada para você e as pernas para baixo, confirme no corpo ou na folha de dados qual perna é GATE, DRAIN e SOURCE antes de encaixar.

  • Faça uma etiqueta nos três transistores: R, G e B; isso evita trocar as cores.
  • Inverter DRAIN e SOURCE pode deixar a fita ligada de modo inesperado ou impedir o controle.

4. Ligue os três comandos do Arduino

Ligue D3 do Arduino a uma perna do resistor gate_r_1 de 220 Ω e a outra perna ao GATE do transistor vermelho. Faça o mesmo: D5 → resistor gate_g_1 → GATE do verde, e D6 → resistor gate_b_1 → GATE do azul. Em cada GATE, também ligue um resistor de 10 kΩ ao GND: pulldown_r_1 no vermelho, pulldown_g_1 no verde e pulldown_b_1 no azul.

  • D3, D5 e D6 são os três pinos que definem a intensidade de cada cor.
  • Não conecte nenhum fio R, G ou B da fita diretamente a um pino do Arduino; os transistores são necessários para suportar a corrente da fita.

5. Ligue o botão

Coloque o botão atravessando o vão central da protoboard. Ligue um lado ao D2 do Arduino e o lado oposto ao GND. Cada toque curto trocará a cor.

  • Se o botão tiver quatro pernas, use duas pernas de lados opostos; as duas pernas do mesmo lado já são conectadas entre si.
  • Não ligue o botão ao 5V neste projeto, pois o código já usa o GND como referência do toque.

6. Energize e teste

Conecte a fonte USB de 5 V da fita e depois conecte o Arduino ao computador pelo próprio cabo USB. Depois de enviar o código, cada toque no botão passa por: apagada, vermelho, verde, azul, branco e apagada novamente.

  • Se vermelho, verde e azul aparecerem trocados, mantenha a alimentação desligada e troque somente os fios R, G e B entre os transistores.
  • Nunca conecte ou desconecte os fios da fita com a fonte USB ligada, pois um curto acidental pode aquecer os fios ou a fonte.

Review all connections

1. Connections between "usb_power_5v_1" and "Arduino"

Functionusb_power_5v_1Arduino
power+5VFita LED RGB analógica de 5 V, 4 pinos +5VEXT
groundGNDGND

2. Connections between "rgb_strip_5v_1" and "Arduino"

Functionrgb_strip_5v_1Arduino
dataRIRLZ44N Logic-Level N-Channel MOSFET DRAINEXT
dataGIRLZ44N Logic-Level N-Channel MOSFET DRAINEXT
dataBIRLZ44N Logic-Level N-Channel MOSFET DRAINEXT

3. Connections between "mosfet_r_1" and "Arduino"

Functionmosfet_r_1Arduino
groundSOURCEGND

4. Connections between "mosfet_g_1" and "Arduino"

Functionmosfet_g_1Arduino
groundSOURCEGND

5. Connections between "mosfet_b_1" and "Arduino"

Functionmosfet_b_1Arduino
groundSOURCEGND

6. Connections between "gate_r_1" and "Arduino"

Functiongate_r_1Arduino
digitalP1GPIO 3
digitalP2IRLZ44N Logic-Level N-Channel MOSFET GATEEXT

7. Connections between "gate_g_1" and "Arduino"

Functiongate_g_1Arduino
digitalP1GPIO 5
digitalP2IRLZ44N Logic-Level N-Channel MOSFET GATEEXT

8. Connections between "gate_b_1" and "Arduino"

Functiongate_b_1Arduino
digitalP1GPIO 6
digitalP2IRLZ44N Logic-Level N-Channel MOSFET GATEEXT

9. Connections between "pulldown_r_1" and "Arduino"

Functionpulldown_r_1Arduino
digitalP1IRLZ44N Logic-Level N-Channel MOSFET GATEEXT
groundP2GND

10. Connections between "pulldown_g_1" and "Arduino"

Functionpulldown_g_1Arduino
digitalP1IRLZ44N Logic-Level N-Channel MOSFET GATEEXT
groundP2GND

11. Connections between "pulldown_b_1" and "Arduino"

Functionpulldown_b_1Arduino
digitalP1IRLZ44N Logic-Level N-Channel MOSFET GATEEXT
groundP2GND

12. Connections between "button_1" and "Arduino"

Functionbutton_1Arduino
digitalSIGNALGPIO 2
groundGNDGND

Deploy the firmware

#include <Arduino.h>

// Forward declarations
void setColor(byte red, byte green, byte blue);
void showMode();

const byte RED_PIN = 3;
const byte GREEN_PIN = 5;
const byte BLUE_PIN = 6;
const byte BUTTON_PIN = 2;

byte mode = 0;
bool previousButton = HIGH;
unsigned long lastPressTime = 0;
const unsigned long DEBOUNCE_MS = 40;

void setColor(byte red, byte green, byte blue) {
  analogWrite(RED_PIN, red);
  analogWrite(GREEN_PIN, green);
  analogWrite(BLUE_PIN, blue);
}

void showMode() {
  switch (mode) {
    case 0: setColor(0, 0, 0); break;          // apagada
    case 1: setColor(255, 0, 0); break;        // vermelho
    case 2: setColor(0, 255, 0); break;        // verde
    case 3: setColor(0, 0, 255); break;        // azul
    case 4: setColor(255, 255, 255); break;    // branco
  }
}

void setup() {
  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  showMode();
}

void loop() {
  bool buttonNow = digitalRead(BUTTON_PIN);
  unsigned long now = millis();

  if (previousButton == HIGH && buttonNow == LOW && now - lastPressTime >= DEBOUNCE_MS) {
    mode = (mode + 1) % 5;
    showMode();
    lastPressTime = now;
  }

  previousButton = buttonNow;
}

Remix this project

Make it yours in one click

Open a full copy of this project in your own Schematik workspace — diagram, code, parts, and assembly steps included. Swap the sensor, add features, or redesign the whole thing with AI. The author's original stays untouched.

Open in Schematik