PICO Studio Light

by Arnov Sharma in Circuits > LEDs

508 Views, 4 Favorites, 0 Comments

PICO Studio Light

25.gif
28.gif
23.gif
IMG_2941.JPG

Greetings everyone and welcome back.

Meet the DIY PICO Studio Light, an ergonomic and minimal solution for lighting up your workstation with a professional touch. Powered by the latest Raspberry Pi Pico 2, this project combines RGB's vibrant hues with the soft glow of cold and warm white LEDs.

Brightness settings can be simply controlled using easy-button controls. The SSD1306 OLED screen gives real-time updates, indicating which LED is illuminated and to what percentage. The complete arrangement is constructed by merging different PCBs, PCB standoffs, and 3D printed parts, resulting in a robust and neat design.

We created this project to improve the lighting in my shots, and it's an essential tool if you make YouTube videos or simply enjoy taking beautiful photos.

This article is about the whole build process of this studio light project, so let's get started with the build.

Supplies

These were the materials used in this project:

  1. Custom PCBs (provided by HQ NEXTPCB)
  2. Raspberry Pi PICO 2
  3. WS2811 IC
  4. SEOL 0.25W 2835 LED: COOL WHITE
  5. SEOL 0.25W 2835 LED: WARM WHITE
  6. Resistor 5.1Ohms 2512 package
  7. IP5306
  8. 10uF capacitors
  9. CON 20 female header Pin connector
  10. SSD1306 OLED Screen
  11. Push Buttons
  12. SMD Push Button
  13. 10K resistor
  14. 8205S mosfet IC N channel

3D Model

Screenshot 2025-03-06 101832.png
Screenshot 2025-03-06 101855.png
Screenshot 2025-03-06 102014.png
Screenshot 2025-03-06 102038.png

We begin this project by creating the model in Fusion 360. The model consists of up of two boards stacked together, with a single PCB standoff on top and a 3D-printed special clamp-like part on the bottom that also connects the two PCBs using M2 screws.

This clamp-like device can be used to mount this device to a tripod.

The model comprises of two PCBs: the LED board, which contains all of the SMD COOL WHITE, WARM WHITE, and RGB LEDs, as well as their load resistance.

The second PCB is the PICO DRIVER board, which consists of a Raspberry Pi PICO connected by five buttons, an SSD1306 OELD screen, and two Lithium cells for power.

After finalizing the model, we exported the CLAMP mesh file and 3D printed it with a 0.4mm nozzle, 25% infill, and 0.2mm layer height.

PCB DESIGN: LED BOARD

LED BOARD_page-0001.jpg
Screenshot 2025-03-06 100301.png
Screenshot 2025-03-06 100005.png

The PCB design for this project is divided into two primary boards: the LED board and the PICO driver board. Let's start by looking at the LED board.

The LED board is made up of 15 Cool White LEDs, 15 Warm White LEDs, and 15 5050 RGB LEDs that are all joined together in a special way.

Let's start with the COOL WHITE LED SEGMENT, where all LEDs are linked in parallel, and the anode of each LED is connected to the board's VCC pin. The cathode is connected to three load resistors in series with a CON 1 terminal. The CON 1 terminal will be used to connect this board to the driver board.

Similarly, all Warm White LEDs are connected in parallel, with the anode linked to VCC and the cathode connected to three resistors in series via the CON 1 terminal labeled Warm.

Both warm and cool LEDs have an operating voltage of 0.2W or 3.3V and a forward current of 60mA.

In regards to RGB LEDs, we did not use addressable Neopixels, instead opting for a cheaper non-addressable 5050 RGB LED. To add smart functionality to the non-addressable LEDs, we added the WS2811 driver circuit, which is connected to all 15 RGB LEDs and can operate all of them with a single GPIO pin.

For board layout, we extracted the board outline from our cad file and used it to create the PCB design, which included the LED position, board size, and, most importantly, the mounting hole location.

Downloads

PCB DESIGN: PICO DRIVER

PICO DRIVER_page-0001.jpg
Screenshot 2025-03-06 095936.png
Screenshot 2025-03-06 095841.png

The PICO DRIVER circuit is primarily composed of three sections: the IP5306 Boost Module part, which acts as the primary power source for all of the components. The PICO Setup consists of a Raspberry Pi PICO 2 coupled to an OLED display, buttons, and a two-mosfet gate.

The third section is the Mosfet Driver, which consists of two 8205S N channel mosfet integrated circuits that will power the Warm and Cool LEDs. The LED board will be linked to the PICO Driver board via the CON 1 terminals on the board.

For the PCB Design, we follow the Cad file and place all of the SMD components on the top side of the board, along with buttons and an OLED display; on the bottom side of the PCB, we place the Lithium Cell Holder and PICO 2.

NextPCB PCB Service

IMG_E0929.JPG
01.gif

After completing both PCB designs, Gerber Data was sent to HQ NextPCB, and two orders were placed in a white soldermask with black slikscreen.

After placing the order, the PCBs were received within a week, and the PCB quality was pretty great.

In addition, I have to bring in HQDFM to you, which helped me a lot through many projects. Huaqiu’s in-house engineers developed the free Design for Manufacturing software, HQDFM, revolutionizing how PCB designers visualize and verify their designs.

Take advantage of NextPCB's Accelerator campaign and get 2 free assembled RP2040-based PCBs for your innovative projects.

https://www.nextpcb.com/blog/rp2040-free-pcba-prototypes-nextpcb-accelerator

This offer covers all costs, including logistics, making it easier and more affordable to bring your ideas to life. SMT services can be expensive, but NextPCB is here to help you overcome that hurdle. Simply share your relevant project, and they'll take care of the rest. Don't miss out on this amazing opportunity to advance your tech creations!

HQDFM: Free Online Gerber Viewer and DFM Analysis Tool

Screenshot 2025-03-06 102954.png
Screenshot 2025-03-06 103038.png

Also, NextPCB has its own Gerber Viewer and DFM analysis software.

Your designs are improved by their HQDFM software (DFM) services. Since I find it annoying to have to wait around for DFM reports from manufacturers, HQDFM is the most efficient method for performing a pre-event self-check.

Here is what online Gerber Viewer shows me. Would not be more clear. However, for full function, like DFM analysis for PCBA, you need to download the software. The online version only provides a simple PCB DFM report.

With comprehensive Design for Manufacture (DFM) analysis features, HQDFM is a free, sophisticated online PCB Gerber file viewer.

It provides insights into advanced manufacturing by utilizing over 15 years of industry expertise. You guys can check out HQ NextPCB if you want great PCB service at an affordable rate.

PCB Assembly: LED Board

02.gif
03.gif
04.gif
05.gif
  1. We begin the LED Board Assembly procedure by applying solder paste to each component pad. We are utilizing a solder paste dispensing syringe with 63/37 Sn/Pb solder paste.
  2. Next, we use ESD Tweezer to pick and put all of the SMD components on the PCB, which included 15x Cool White 2835 LEDs, 15x Warm White 2835 LEDs, 15x RGB LEDs, the WS2811 IC, a pair of 2512 package resistors, and a decoupling capacitor for the WS2811 IC.
  3. We then carefully lifted the whole circuit and placed it on our Reflow hotplate, which heated the PCB below until the solder paste melted. Solder paste melts and all smd components are attached to their pads as soon as the PCB achieves this melting temperature of approximately 190°C.

PCB Assembly: PICO DRIVER

06.gif
07.gif
08.gif
09.gif
10.gif
11.gif
12.gif
13.gif
14.gif
15.gif
  1. We begin the PICO DRIVER assembly by applying solderpaste to each component pad using a solderpaste dispensing syringe.
  2. Next, we pick and place all of the SMD components in their proper location.
  3. Using the reflow hotplate, we heat the PCB to solder paste melting temperature in order to solder all SMD components to their respective pads.
  4. We next continue to add the THT components by attaching two CON20 female header pin connectors to the bottom side of the PCB in the Raspberry Pi PICO location.
  5. We soldered the pads of the CON20 header pins with a soldering iron after turning the board over.
  6. Next, we place the Raspberry Pi PICO 2 over the CON20 header pins.
  7. Next, we installed the display, USB port, and all five push buttons from the top side of the PCB.
  8. Then we turn the board and solder all THT component pads with a soldering iron, ensuring that all THT components are permanently linked to the PCB.
  9. Finally, using soldering iron, we attach the lithium battery holder to the backside of the PCB.

Power Source/Testing Driver Board

16.gif
17.gif
18.gif

We are using two 3.7V 2900mAh 18650 Lithium cells in parallel to power the device, giving us a battery pack with a total capacity of 3.7V 5800mAh.

We set both cells on the cell holder on the bottom side of the board, making sure they are in the correct position or the entire setup will short out.

Pressing the SMD Power button once turns the device on; pressing it twice turns it off. The SMD indicator LED shows the device's ON/OFF state.

Using a multimeter, we measured the output voltage emitted by the IC, which was 5V, indicating that our setup is working and that we can now begin the final assembly process.

Driver Board & LED Board Assembly

19.gif
20.gif
21.gif
  1. We begin the final assembly process by attaching an M3 PCB standoff to the PICO driver board. Next, we place the LED driver over the mounting hole of the PCB standoff and secure both PCBs together with one M3 screw.
  2. Next, we place the 3D-printed clamp part between the two PCBs on the assembly's bottom region and then use four M2 screws (two from each side) to connect the LED board and PICO driver.
  3. Next, we connect the tripod holder to the Studio light clamp section with a long M6 bolt and nut, which is used to secure both clamps together. This section is customizable and differs from tripod to tripod, so you must create your own or modify my existing design.
  4. Finally, we began the wiring process, which was straightforward. We began by connecting both boards' VCC together, followed by GND. As a result, we connected the WARM pin of the LED board to the warm pin of the PICO DRIVER, COOL to COOL, and RGB Pin to RGB Pin.

The assembly process has been completed.

Main Code

Here's the main code we prepared for this project and its a simple one.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <FastLED.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C // Define the I2C address for the SSD1306 OLED
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Define the number of LEDs and data pin for WS2812B
#define NUM_LEDS 1
#define WS2812B_PIN 6
CRGB leds[NUM_LEDS];

// Define the GPIO pins for other LEDs
#define WARM_WHITE_PIN 2
#define COOL_WHITE_PIN 3

// Define the GPIO pins for buttons
#define WARM_WHITE_BUTTON 11
#define COOL_WHITE_BUTTON 12
#define RED_BUTTON 13
#define GREEN_BUTTON 14
#define BLUE_BUTTON 15

// Define brightness levels
#define BRIGHTNESS_LEVELS 5
int warmWhiteBrightness = 0;
int coolWhiteBrightness = 0;

// Keep track of button states
int lastWarmWhiteButtonState = HIGH;
int lastCoolWhiteButtonState = HIGH;

// RGB values
int rValue = 0;
int gValue = 0;
int bValue = 0;

void setup() {
// Initialize FastLED
FastLED.addLeds<NEOPIXEL, WS2812B_PIN>(leds, NUM_LEDS);

// Initialize OLED display
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000);
display.clearDisplay();

// Set other LED pins as OUTPUT
pinMode(WARM_WHITE_PIN, OUTPUT);
pinMode(COOL_WHITE_PIN, OUTPUT);
// Set button pins as INPUT
pinMode(WARM_WHITE_BUTTON, INPUT_PULLUP);
pinMode(COOL_WHITE_BUTTON, INPUT_PULLUP);
pinMode(RED_BUTTON, INPUT_PULLUP);
pinMode(GREEN_BUTTON, INPUT_PULLUP);
pinMode(BLUE_BUTTON, INPUT_PULLUP);
}

void loop() {
// Read the state of each button
int warmWhiteState = digitalRead(WARM_WHITE_BUTTON);
int coolWhiteState = digitalRead(COOL_WHITE_BUTTON);
int redState = digitalRead(RED_BUTTON);
int greenState = digitalRead(GREEN_BUTTON);
int blueState = digitalRead(BLUE_BUTTON);

// Check for warm white button press
if (warmWhiteState == LOW && lastWarmWhiteButtonState == HIGH) {
warmWhiteBrightness = (warmWhiteBrightness + 1) % BRIGHTNESS_LEVELS;
analogWrite(WARM_WHITE_PIN, warmWhiteBrightness * 255 / (BRIGHTNESS_LEVELS - 1));
}
lastWarmWhiteButtonState = warmWhiteState;

// Check for cool white button press
if (coolWhiteState == LOW && lastCoolWhiteButtonState == HIGH) {
coolWhiteBrightness = (coolWhiteBrightness + 1) % BRIGHTNESS_LEVELS;
analogWrite(COOL_WHITE_PIN, coolWhiteBrightness * 255 / (BRIGHTNESS_LEVELS - 1));
}
lastCoolWhiteButtonState = coolWhiteState;

// Control WS2812B RGB LED and update RGB values
if (redState == LOW) {
rValue = 255; gValue = 0; bValue = 0;
leds[0] = CRGB::Red;
FastLED.show();
} else if (greenState == LOW) {
rValue = 0; gValue = 255; bValue = 0;
leds[0] = CRGB::Green;
FastLED.show();
} else if (blueState == LOW) {
rValue = 0; gValue = 0; bValue = 255;
leds[0] = CRGB::Blue;
FastLED.show();
} else {
rValue = 0; gValue = 0; bValue = 0;
leds[0] = CRGB::Black; // Turn off RGB LED when no buttons are pressed
FastLED.show();
}

// Update OLED display
display.clearDisplay();
// Display RGB values
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(F("RGB VALUES"));
display.setCursor(0, 10);
display.print(F("R = ")); display.println(rValue);
display.setCursor(0, 20);
display.print(F("G = ")); display.println(gValue);
display.setCursor(0, 30);
display.print(F("B = ")); display.println(bValue);

// Display Cool White brightness in equal-sized box
display.setCursor(64, 10);
display.println(F("COOL WHITE"));
display.setCursor(64, 20);
display.print(F(coolWhiteBrightness * 25)); display.println(F("%"));

// Display Warm White brightness in equal-sized box
display.setCursor(64, 40);
display.println(F("WARM WHITE"));
display.setCursor(64, 50);
display.print(F(warmWhiteBrightness * 25)); display.println(F("%"));

display.display();
}

The setup consists of a Raspberry Pi PICO 2 with an OLED screen and a WS2812B RGB LED, as well as two extra LEDs (warm white and cool white), which are all connected to the Raspberry Pi Pico 2 GPIO pins.

These LEDs are controlled using buttons, which allow for interactive lighting adjustments. The FastLED library controls the WS2812B RGB LED, while the Adafruit SSD1306 library manages the OLED display.

This code allows you to regulate the brightness of warm and cold white LEDs via button presses. Each button click cycles the LED brightness through 25%, 50%, 75%, and 100%, giving you more control over the lighting.

The status of these LEDs, including their current brightness level, is presented on an OLED panel. The screen is separated into two sections: the left side displays the RGB values of the WS2812B LED, and the right side has two equal boxes.

The top box displays the brightness percentage of the cool white LED, and the bottom box displays the brightness percentage of the warm white LED. This setup ensures you always have a clear visual indication of the LED states directly on the OLED display.

RESULT

IMG_2954.JPG
28.gif
24.gif
25.gif
26.gif
27.gif
29.gif
IMG_2938.JPG
IMG_2941.JPG
IMG_2947.JPG

As we wrap up this exciting studio light project, it's clear that we've achieved a highly interactive and functional setup. The project features a WS2812B RGB LED and two additional LEDs (warm white and cool white), all controlled by buttons connected to a Raspberry Pi Pico.

This setup allows for precise control of LED brightness, with each button press cycling the warm white and cool white LEDs through 25%, 50%, 75%, and 100% brightness levels. The OLED display provides a clear and organized visualization of the current states, showing RGB values on the left and the brightness levels of the cool white and warm white LEDs on the right.

One thing we need to change in the future version is the use of the WS2811 CHIP. We utilized 15 LEDs connected in parallel, with each LED drawing 60 mA; therefore, 15 LEDs would draw around 900 mA of current, but we are using a single WS2811 chip that only supports LED current up to 18 mA, which is significantly low. Meaning that our setup works, but the light is faint and cannot be used in a practical manner. This can be handled by using three mosfets as a switch (one for each color).

This issue will be addressed in an upcoming version, so stay tuned.

Overall, this project not only enhances your workspace with customizable lighting but also demonstrates the seamless integration of various components to achieve an efficient and user-friendly system.

Special thanks to HQ NextPCB for providing components that I've used in this project; check them out for getting all sorts of PCB or PCBA-related services for less cost.

Thanks for reaching this far, and I will be back with a new project soon.