COLOR MIXER Version 2

by Arnov Sharma in Circuits > Arduino

762 Views, 4 Favorites, 0 Comments

COLOR MIXER Version 2

IMG_20230108_200311.jpg
01 (1).gif
28 (3).gif

Hey there, guys. I have a colorful project for you called The COLOR MIXER Version 2, which is a homemade version of the RGB Box that is used in photography and cinematography.

As previously stated, this is Version 2 of the previously created COLOR MIXER Box project, which functions identically to this version but has a new form factor, a WS2811 IC with 5050 LEDs instead of WS2812B LEDs, and an inbuilt power source to make this setup fully wire-free and portable.

The XIAO M0 Dev board drives it, and the SSD1306 OLED is used to display the RGB values.

The cinematography uses "RGB box lights," which are readily accessible commercially, to set the lighting in a variety of settings.

This homemade RGB controller has three pots for selecting different colors (R, G, and B). Additionally attached is an OLED that displays the value in 10-bit resolution.

This Instructables is about how this project was built, so let's get started.

Supplies

The following are the materials used in this Project-

  • Custom PCBs- LED board and Control Board
  • Seeed XIAO M0 MCU
  • WS2811 IC
  • 5050 RGB LEDs
  • 100nf capacitor 1206 package
  • IP5303
  • 10uF 0805 Package Capacitor
  • 5.6uH Inductor
  • 0603 LED Blue
  • 10K Resistor 0805 Package
  • Vertical Push Button
  • USB Micro Port
  • USB Port
  • SMD 18650 Cell Holder
  • PCB Standoffs
  • 3.7V li-ion cell

Body Construction From PCB

IMG_20230108_200505.jpg
IMG_20230108_200528.jpg
IMG_20230108_200537.jpg

The primary distinguishing factor of this project is that it was constructed entirely from two PCBs: the controller board on the rear and the front LED board.

The plan was to join two square PCBs—each of which contains electronic components and also serves as the project's body—by utilizing PCB standoffs on each vertex and nuts and bolts.

PCB Design- LED Board

LED Board_page-0001.jpg
02.JPG

Let's have a look at the front PCB's LED Board, which houses the WS2811 IC and 9 5050 Package RGB LEDs that are all connected in parallel.

The I/O pins of the WS2811 IC are linked to the Red, Green, and Blue pins of RGB LEDs, as well as a few other necessary components like a few resistors and a capacitor.

In order to add an MCU for powering and operating the LED Board, the WS2811's Din port is connected to a CON1 port, and VCC and GND are also attached to separate CON1 ports.

PCB Design- Control Board

control_page-0001.jpg
01.JPG

The second PCB is the control board, which, as its name suggests, uses a microcontroller and potentiometers to control the LED board.

Additionally, it has a lithium-ion battery that is connected to a Power Management IC (IP5303), which boosts the battery's 3.7V voltage to a stable 5V for powering the XIAO MCU, the OLED Display, and the RGB LEDs.

Three Pots are connected with XIAO M0 Dev Board's IO Pins D0, D1 and D2.

The SDA and SCK pins of the OLED display are connected to D4 and D5 pins of XIAO.

The IO Pin D3 of the XIAO is connected to the CON1 port; this IO Pin will be used to control the Din Pin of the WS2811 IC.

Seeed Fusion Service

IMG_20221231_224804.jpg
02 (1).gif
04.gif

As for both of the PCBs in this color mixer project, they were sent to SEEED Studio for samples.

An order was placed for a white solder mask with black silkscreen, and the PCBs arrived in less than a week, which was super fast.

The quality was very good considering the price, which was also pretty low.

The PCB Quality of both PCBs was just awesome!

Seeed Fusion PCB Service offers one-stop prototyping for PCB manufacture and PCB assembly and as a result, they produce superior quality PCBs and Fast Turnkey PCBA within 7 working days.

Seeed Studio Fusion PCB Assembly Service takes care of the entire fabrication process, from PCB manufacturing and parts sourcing to assembly and testing services, so you can be sure they are getting a quality product.

After gauging market interest and verifying a working prototype, Seeed Propagate Service can help you bring the product to market with professional guidance and a strong network of connections.

LED Board- PCB Assembly Process

05 (1).gif
06 (12).gif
07 (12).gif
  • We start first with the solder paste dispensing process by adding solder paste to each component pads one by one.
  • We then used an ESD tweezer to carefully pick and place all the SMD LEDs and components in their assigned places one by one.
  • After the "pick and place process, " we carefully lifted the whole circuit board and placed it on the Reflow hotplate.

The hotplate heats the PCB from below up to the solder paste melting temperature. As a result, the solder paste melts and components get solder on their pads.

Testing the LED Board

08 (14).gif

The color board is then prepared so that it may be connected to the XIAO MCU for the testing procedure.

When I say "prepare," I mean that we add jumper wires to the board's three CON1 ports by using a soldering iron.

Test Sketch

09 (13).gif
10 (12).gif

Then, using a breadboard, we connect the Din pin of the WS2811 to the XIAO M0 development board, the VCC of the LED board to the XIAO M0 development board, and the GND of the LED board to the GND.

Then we connect it to the Arduino IDE and upload the below sketch into it.

#include <Adafruit_NeoPixel.h>
#define PIXEL_PIN 7
#define PIXEL_COUNT 1

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);


void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}

void loop() {
rainbow(20);
}

void rainbow(uint8_t wait) {
uint16_t i, j;

for(j=0; j<256; j++) {
for(i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i+j) & 255));
}
strip.show();
delay(wait);
}
}
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

You must install the Neopixel Library before uploading this sketch because it is based on it.

https://github.com/adafruit/Adafruit_NeoPixel

Also, the #define PIXEL_COUNT 1 is set to 1, which means only one pixel is being controlled on this LED board.

However, this LED Board has 9 LEDs, so why do we use just 1 pixel? No matter how many LEDs are installed in parallel or series, or even in the SMD version of addressable LEDs, each LED has a single WS2812 or 11 wafer that is internally connected to each R, G, and B pin in the IC, hence the single LED or single chip is declared as 1 pixel.

Control Board- PCB Assembly Process

11 (13).gif
12 (12).gif
13.gif
14.gif
15.gif
  • Next, we prepare the Control board by first adding solder paste to all the SMD Components Pads
  • We then Pick and place all the SMD Components in their location with help of an ESD tweezer.
  • Next, we carefully lifted the whole circuit board and placed it on the Reflow hotplate.
  • After reflowing the hotplate, we attach the SMD Lithium cell 18650 Holder on the bottom side of the board.
  • At last, we place all the remaining THT Components which include Potentiometers, header pins, Vertical switch, and USB Port to the Control board and then use a soldering iron to solder components in their place.

Testing the Control Board

16 (11).gif
17.gif

After setting up the control board, we place the lithium cell in its holder and turn on the power management IC by pressing the vertical switch. This indicates that the circuit is functioning, and since the voltage across the VCC pin of the XIAO and the GND shows to be 5.1V, the circuit is functioning.

Adding XIAO and SSD1306 OLED to the Control Board

18 (8).gif

After making sure that the onboard power management circuit is working, we place the XIAO board and OLED screen in their respective locations.

Adding LED Board and Control Board Together

19 (9).gif

Next, we solder the VCC, GND, and Signal lines—the D3 Pin and Din Pin—of both the LED Board and the Control Board together. This completes the connection between the two boards.

Main Sketch

20 (6).gif
21 (5).gif

We connect the XIAO to Arduino IDE and Upload the below sketch in it.

#include <Adafruit_NeoPixel.h>
#define NEOPIXELS 1
//#define LEDsPin = D3 ;
const int LEDsPin = 3;

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

#define OLED_WIDTH 128
#define OLED_HEIGHT 64

#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);

const int redPotPin = 2;
const int greenPotPin = 0;
const int bluePotPin = 1;

int redValue = 0;
int greenValue = 0;
int blueValue = 0;

int redPotValue = 0;
int greenPotValue = 0;
int bluePotValue = 0;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NEOPIXELS, LEDsPin, NEO_GRB + NEO_KHZ800);

void setup() {
pinMode(LEDsPin, OUTPUT);
pinMode(redPotPin, INPUT);
pinMode(greenPotPin, INPUT);
pinMode(bluePotPin, INPUT);
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
Serial.begin(9600);

}
void loop() {
display.clearDisplay();

redPotValue = analogRead(redPotPin);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("BLUE="); //RED=
display.setCursor(50, 0);
display.println(redPotValue);


greenPotValue = analogRead(greenPotPin);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 20);
display.println("RED="); //GREEN=
display.setCursor(50, 20);
display.println(greenPotValue);




bluePotValue = analogRead(bluePotPin);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 43);
display.println("GREEN="); //BLUE=
display.setCursor(50, 43);
display.println(bluePotValue);
display.display();



delay(50);

redValue = map(redPotValue, 0, 1023, 0, 255);
greenValue = map(greenPotValue, 0, 1023, 0, 255);
blueValue = map(bluePotValue, 0, 1023, 0, 255);;

for (int i = 0; i < NEOPIXELS; i++) {

pixels.setPixelColor(i, pixels.Color(redValue, greenValue, blueValue));
pixels.show();
delay(50);
}
}

This test sketch utilises Adafruit's Neopixel Library, the same like the test sketch that was previously utilised, and a single pixel has been designated as output.

Additionally, this project makes use of the SSD1306 screen, which necessitates the installation of an additional library before uploading this sketch.

https://github.com/adafruit/Adafruit_SSD1306

Final Assembly

22 (6).gif
23.gif

The final step is to join the two boards together using four PCB Standoffs, which keep the two PCB intact and create a solid box-like body when fastened in place with nuts and bolts from both sides.

Result

24 (1).gif
25.gif
26 (4).gif

Here's the result of this build: a working RGB light source that is completely DIY and made by using stuff that I had, so no additional parts were purchased, and the cost of this project is super low compared with the actual RGB lightbox.

Problems With This Version

27 (3).gif
IMG_20230108_200017.jpg

As you can see, the setup's light is not quite half as strong as that of the earlier Color Mixer project.

This is due to the fact that a single WS2811 IC, whose maximum current output for each RGB channel is 18mA, is being used to drive nine LEDs in parallel.

I missed this information in the datasheet, and it was a frustrating oversight that I subsequently discovered.

https://cdn-shop.adafruit.com/datasheets/WS2811.pdf

This problem will be fixed in version 3 of the project. however, for the time being, the Setup is functional and fairly useable.

The next version must have an increase in light as a necessity.

That's all for today, folks. If this article was helpful or you need any assistance with this project, please leave a comment.

Peace.