BlinkStick Strip Heat

Hello!

Love my blinkstick strip! Should I be concerned about heat if it is on for an extended period of time? It might be possible to build a heatsink for it.

Thanks,
Kevin

Hey Kevin,

welcome to the forums!
We all love BlinkStick :slight_smile:

My experience is, that you don´t need to worry about heat. We operate ten devices 8 to 10 hours each day, already for month. The device of course getting warm but this will not reduce the lifetime.

1 Like

@kevin Thanks for all your love! :blush: BlinkStick Strip should be fine when used for prolonged periods of time. The PCB acts as a heatsink.

Hi,
We plan to use the blinkstick in an enclosed chassis with limited air flow. I understand you are confident the blinkstick can handle the sustained heat that is generated by the 8 LEDs, but we too would like to reduce the brightness and hopefully the heat that will be generated. Currently, our only method would be to illuminate 50% (every other one) of the LEDs. We would prefer to illuminate all 8 LEDs at 50% brightness. Is there a way to control the brightness ?

Chris

Hey Chris,

how do you control the BlinkStick? With the BlinkStick Client or a selfmade application?

Hi,

We have written our own control that turns all on and all off as required. But the heat in a small enclosed area may become an issue.

@chris2 which API implementation are you using?

In regards to the heat dissipation, BlinkStick Strip LED operating temperature range is -25°C to +80°C. Other components have even higher temperature ranges. PCB itself works as a heatsink, but if you are still concerned, the you could attach it to a metal surface with double sided tape. Even though enclosures for BlinkStick Strip are very small, there haven’t been reports of failed devices due to heat so far and none of them failed in our test environment.

Thank you for the reassurances, but we still would prefer to illuminate all 8 LEDs at 50% rather than 4 LEDs at 100%. Is there a capability to set the brightness / intensity of each LED ?

I would need to know the API implementation you are using in order to provide this information.

Thank you again for such quick responses. I will ask my programmer to send me the information.

I am the developer that works for Chris that asked you a heat question. Is it possible to lower/control LED intensity - either for all 8 LEDs by calling a single API call or by calling individual APIs for each LED? Here is my current code that turns on all 8 LEDs to while color:

                       // Turn the LEDs ON
                    try
                    {
                        BlinkStick device = BlinkStick.FindFirst();
                        if (device.OpenDevice())
                        {
                            device.SetMode(2);
                            Thread.Sleep(100);

                            byte byteGB = 255;

                            if (IsRecording == true)
                            {
                                byteGB = 0;
                            }

                            byte[] data = new byte[3 * 8] 
                                                        {255, 255, 255,     //GRB for led0
                                                         255, 255, 255,     //GRB for led1
                                                         255, 255, 255 ,    //...
                                                         byteGB, 255, byteGB,
                                                         byteGB, 255, byteGB,
                                                         255, 255, 255,
                                                         255, 255, 255,
                                                         255, 255, 255      //GRB for led7
                                                        };


                            device.SetColors(0, data);
                        }

                    }
                    catch (Exception ex)
                    {
                        Log.Verbose(ex);
                    }

Hey Leon,

I solved it with a HSLColor class.

Maybe it is not the simplest way but it was a good one for me for many purposes regarding the brightness thing. opt.brightness is a property for a brightness value.

public class HSLColor
    {
        // Private data members below are on scale 0-1
        // They are scaled for use externally based on scale
        private double hue = 1.0;
        private double saturation = 1.0;
        private double luminosity = 1.0;

        private const double scale = 240.0;

        public double Hue
        {
            get { return hue * scale; }
            set { hue = CheckRange(value / scale); }
        }
        public double Saturation
        {
            get { return saturation * scale; }
            set { saturation = CheckRange(value / scale); }
        }
        public double Luminosity
        {
            get { return luminosity * scale; }
            set { luminosity = CheckRange(value / scale); }
        }

        private double CheckRange(double value)
        {
            if (value < 0.0)
                value = 0.0;
            else if (value > 1.0)
                value = 1.0;
            return value;
        }

        public override string ToString()
        {
            return String.Format("H: {0:#0.##} S: {1:#0.##} L: {2:#0.##}", Hue, Saturation, Luminosity);
        }

        public string ToRGBString()
        {
            Color color = (Color)this;
            return String.Format("R: {0:#0.##} G: {1:#0.##} B: {2:#0.##}", color.R, color.G, color.B);
        }

        #region Casts to/from System.Drawing.Color
        public static implicit operator Color(HSLColor hslColor)
        {
            double r = 0, g = 0, b = 0;
            if (hslColor.luminosity != 0)
            {
                if (hslColor.saturation == 0)
                    r = g = b = hslColor.luminosity;
                else
                {
                    double temp2 = GetTemp2(hslColor);
                    double temp1 = 2.0 * hslColor.luminosity - temp2;

                    r = GetColorComponent(temp1, temp2, hslColor.hue + 1.0 / 3.0);
                    g = GetColorComponent(temp1, temp2, hslColor.hue);
                    b = GetColorComponent(temp1, temp2, hslColor.hue - 1.0 / 3.0);
                }
            }
            return Color.FromArgb((int)(255 * r), (int)(255 * g), (int)(255 * b));
        }

        private static double GetColorComponent(double temp1, double temp2, double temp3)
        {
            temp3 = MoveIntoRange(temp3);
            if (temp3 < 1.0 / 6.0)
                return temp1 + (temp2 - temp1) * 6.0 * temp3;
            else if (temp3 < 0.5)
                return temp2;
            else if (temp3 < 2.0 / 3.0)
                return temp1 + ((temp2 - temp1) * ((2.0 / 3.0) - temp3) * 6.0);
            else
                return temp1;
        }
        private static double MoveIntoRange(double temp3)
        {
            if (temp3 < 0.0)
                temp3 += 1.0;
            else if (temp3 > 1.0)
                temp3 -= 1.0;
            return temp3;
        }
        private static double GetTemp2(HSLColor hslColor)
        {
            double temp2;
            if (hslColor.luminosity < 0.5)  //<=??
                temp2 = hslColor.luminosity * (1.0 + hslColor.saturation);
            else
                temp2 = hslColor.luminosity + hslColor.saturation - (hslColor.luminosity * hslColor.saturation);
            return temp2;
        }

        public static implicit operator HSLColor(Color color)
        {
            HSLColor hslColor = new HSLColor();
            hslColor.hue = color.GetHue() / 360.0; // we store hue as 0-1 as opposed to 0-360 
            hslColor.luminosity = color.GetBrightness();
            hslColor.saturation = color.GetSaturation();
            return hslColor;
        }
        #endregion

        public void SetRGB(int red, int green, int blue)
        {
            HSLColor hslColor = (HSLColor)Color.FromArgb(red, green, blue);
            this.hue = hslColor.hue;
            this.saturation = hslColor.saturation;
            this.luminosity = hslColor.luminosity;
            //opt = hslColor;
        }

        public HSLColor() { }
        public HSLColor(Color color)
        {
            SetRGB(color.R, color.G, color.B);
        }
        public HSLColor(int red, int green, int blue)
        {
            SetRGB(red, green, blue);
        }
        public HSLColor(double hue, double saturation, double luminosity)
        {
            this.Hue = hue;
            this.Saturation = saturation;
            this.Luminosity = luminosity;
        }

    }


Usage:

			HSLColor hslColor = new HSLColor(col);
			hslColor.Luminosity *= opt.brightness / 100.0; // 0 to 1
			col = hslColor;

			byte R = col.R;
			byte G = col.G;
			byte B = col.B;

My wish is some kind of brightness control directly in @arvydas API.

Just change all 255 to 128 and you should be good to go. I’ve also removed the SetMode call, because you do not need that as BlinkStick Strip is always in Mode 2.

If you want quarter brightness, just change 128 to 64 and etc.

// Turn the LEDs ON
try
{
    BlinkStick device = BlinkStick.FindFirst();
    if (device.OpenDevice())
    {
        byte byteGB = 128;

        if (IsRecording == true)
        {
            byteGB = 0;
        }

        byte[] data = new byte[3 * 8] 
                                    {128, 128, 128,     //GRB for led0
                                     128, 128, 128,     //GRB for led1
                                     128, 128, 128 ,    //...
                                     byteGB, 128, byteGB,
                                     byteGB, 128, byteGB,
                                     128, 128, 128,
                                     128, 128, 128,
                                     128, 128, 128      //GRB for led7
                                    };


        device.SetColors(0, data);
    }

}
catch (Exception ex)
{
    Log.Verbose(ex);
}
1 Like

If it is for fix colors it is the best solution!

Thanks p0ke, Although I had a thought bout HSL your solution is brilliant…Many thanks again. Will try it tomorrow.
I agree that it should be done at the API level - may be they will adopt this…

I´m glad to hear :slight_smile:

But it is not really “my” solution. Found it as I started controlling the BlinkStick with the .NET API and adapted it for my case.

Look at my API proposal: API proposal - stacked filters
I may be convenient for you problem.