Invisible Accent Light with BlinkM MaxM & FreeM

Sometimes you just want a little extra light in a room. With RGB LED tape, you can put light anywhere. But controlling its brightness and making it the color you want is a bit harder. A BlinkM MaxM can easily control LED tape, either as a stand-alone device, with an Arduino, or your computer via a LinkM. Stand-alone mode is great if you want a specific color or color pattern (the BlinkMSequencer makes this really easy) For this installation, I added a FreeM to the MaxM to let you control the light with a standard infrared TV remote control.

Accent Light with BlinkM MaxM & FreeM

Another nice thing about the LED tape is that when it’s off, you can’t see where it’s installed.
Here’s a video showing how it all works.

How to make this

The parts you’ll need are:
- BlinkM MaxM
- FreeM
- RGB LED flexible tape
- 12V DC @ 1A power supply, you probably have this laying around
- Any universal TV remote, like this one

First up is to wire up the RGB LED tape with extension wires to go from the tape to the MaxM. This is so you can hide the MaxM where ever you feel like. Cut the wires to the length you need and solder them to the LED tape and a 4-pin male header like in the photo below. Note because the LED tape switches the Red and Green lines you’ll need to switch them because MaxM’s lines go V+,R,G,B.

Accent light with BlinkM MaxM FreeM

With that done, you should be able to hook everything up and have the MaxM drive the LED tape. The LED tape takes +12VDC. The amount of current it needs depends on the length of tape your driving. Chances are you have a 12VDC @ 1000 mA wall wart power supply from an old piece of computer gear. That should work fine.

If you want your accent light to play a constant color or color pattern, you’re now done and can place the LED tape where ever you like, like on top of a window sill. Peel off the sticker backing and stick the LED tape where it should go.
Accent light with BlinkM MaxM FreeM

Adding FreeM

If you want to go the step further and add a FreeM to give your light a remote control, then follow the steps on the Using FreeM with BlinkM MaxM page.

But it’s really not much more than plugging the FreeM into the bottom of the MaxM.

Accent light with BlinkM MaxM FreeM
FreeM with MaxM

BlinkM Cylon mkII

For Maker Faire this year I made a second version of my BlinkM Cylon: BlinkM Cylon mkII. This is not a very cost-effective way of getting a Cylon effect. It however is a good way of showing how to wire up multiple BlinkMs with a long cable, using our new WireM cabling kit for BlinkM. And unlike normal Cylon circuits, this has full RGB color effects and gradual fading.

BlinkM Cylon mkII

Here’s a quick video showing it in action.

BlinkM Cylon mkII consists of:
- 13 BlinkMs (one for each of the tribes of Kobol)
- one WireM cabling kit for BlinkM, consisting of IDC connectors and ribbon cable
- an Arduino
- two 4.7k resistors
- a single push-button
- 9VDC wall wart to power it all.
- laser cut acrylic enclosure

Below are all the files needed to recreate your own BlinkM Cylon. Click any of the images for larger versions.

Continue reading BlinkM Cylon mkII

BlinkM Smart LED as the Smallest Arduino

Did you know you can run Arduino programs on tiny BlinkM Smart LEDs? It might make BlinkM the smallest Arduino so far. To use a BlinkM as an Arduino, all you need is the free Arduino software, a low-cost AVR programmer, some wire, and a BlinkM.

Here’s a quick video showing how it all works.

Continue reading BlinkM Smart LED as the Smallest Arduino

Using FreeM with BlinkM MaxM

While FreeM is mostly designed to work with BlinkMs and MinMs, it can be made to work with MaxMs. FreeM cannot supply the power that MaxMs need (250mA and FreeM can only supply up to 100mA), but there are other ways. One way to do it is to power the FreeM from the MaxM’s built-in 5V power supply.

To do this, get a MaxM, a FreeM, a small scrap of wire, and a 12VDC power supply.

FreeM with MaxM

Remove the “pwrsel” jumper and wrap the small piece of wire around all three pins of the “pwrsel” jumper. Then plug the FreeM into the bottom of the MaxM and plug in the 12VDC power supply to the MaxM.

The MaxM will power the FreeM and the FreeM will control the MaxM.

FreeM with MaxM

You can also now control other LED clusters like flexible RGB LED tape.

FreeM with MaxM

BlinkM Battery Pack HowTo

BlinkM Battery Pack: Done!

Make a long-lasting, rechargeable battery pack for your BlinkM MaxM, BlinkM, or BlinkM MinM using just pliers, no soldering!

BlinkMs are perfect for portable, stand-alone uses. There are many ways to hook a BlinkM to battery sources. Here’s one way that works for all BlinkMs.

BlinkM Battery Pack: Step 1: Get all the parts together

BlinkM Battery Pack: Step 1: Get all the parts together

Parts are:

- BlinkM MaxM, BlinkM, or BlinkM MinM

- 4xAA battery holder with switch, like this Jameco one or Mouser one

- 4xAA NiMH batteries (not alkaline!)

- 2×8 IDC crimp connector (FCI 71600-308LF), from Digikey 609-3570-ND or Mouser 649-71600-308LF

Tools you’ll need:
- pliers with wide jaws to crimp
- cutters to trim excess wire

Continue reading BlinkM Battery Pack HowTo

ReflashBlinkM: Update your BlinkM's firmware

All BlinkM-family devices can have their firmware updated. This makes them great for tiny development boards for ATtiny processors. ReflashBlinkM is an application that makes it easy to put back the original firmware or update a BlinkM to the latest firmware.

Previously you needed an AVR ISP programmer like the AVRISPmkII or the USBtinyISP. Thanks to the ArduinoISP sketch that ships with Arduino, if you have already have an Arduino, you can easily reflash your BlinkM with new firmware.

The ReflashBlinkM application is a tool for Mac OS X and Windows that uses ArduinoISP to help you reflash BlinkMs to their default firmware.

This is what it looks like:

Here’s one way of hooking up a BlinkM to an ArduinoISP:

And here’s a video of a BlinkM MinM being reflashed:

For full instructions, see the ReflashBlinkM page in the blinkm-projects Google code site.

SoftI2CMaster: Add I2C to any Arduino pins

Ever wanted to use any pair of pins for I2C on Arduino, not just the dedicated pins on Analog 4 & 5? Me too, so I made a quick little Arduino library called “SoftI2CMaster”, available in the “blinkm-projects” Googlecode repository.

Get it here: SoftI2CMaster.h, SoftI2CMaster.cpp.

It’s still a work in progress, but it can write data pretty successfully and do it over longer cables than normal.

For the VIMBY/Scion Hackerspace Challenge, I created an array of BlinkM MaxM-powered accent lights for the device we made. Because the I2C cable was longer than a few feet, the normal Wire library that BlinkM_funcs.h uses to communicate with BlinkMs couldn’t be used. This is because the Wire library assumes a perfect bus. If there is any noise or other bus problems, the Wire library will currently lock up. For the SoftI2CMaster library, I wanted it to be very tolerant, even lazy, about bus problems and also have more tunable timing to let you slow the bus down. Of course, you still need pull-up resistors on the two lines. I’ve found using 2.2k resistors to be good.

The SoftI2CMaster API follows Wire’s API pretty closely:

  • SoftI2CMaster(sdaPin,sclPin) — create an new SoftI2CMaster for the two pins specified
  • beginTransmission(address) — begin sending data
  • send(data) — send some data (byte or byte arrays)
  • endTransmission() — stop sending data

In use it looks something like this:

#include "SoftI2CMaster.h"
const byte sdaPin = 7;
const byte sclPin = 6;
SoftI2CMaster i2c = SoftI2CMaster( sdaPin,sclPin );

i2c.beginTransmission( 9 );  // send to address 9
i2c.send('c');
i2c.send(255);
i2c.send(0);
i2c.send(200);
i2c.endTransmission();

There is a simple demo for BlinkMs that this library currently lives in. It’s called “BlinkMSoftI2CDemo” and shows off a simplified BlinkM_funcs called “BlinkM_funcs_soft.h“. The entirely of BlinkMSoftI2CDemo is shown below.

const byte sdaPin = 7;  // digital pin 7 wired to 'd' on BlinkM
const byte sclPin = 6;  // digital pin 6 wired to 'c' on BlinkM

#include "SoftI2CMaster.h"
SoftI2CMaster i2c = SoftI2CMaster( sdaPin,sclPin );

// must define "i2c" before including BlinkM_funcs_soft.h
#include "BlinkM_funcs_soft.h"

byte blinkm_addr = 9;

//
void setup()
{
  Serial.begin( 19200 );
  Serial.println("BlinkMSoftI2CDemo");

  BlinkM_off(0);

  for( int i=0; i< 100; i++ ) {  // flash the blinkms
    BlinkM_setRGB( blinkm_addr, 255,255,255 );
    delay(10);
    BlinkM_setRGB( blinkm_addr, 0,0,0 );
    delay(10);
  }
}

void loop()
{
  byte r = random(255);
  byte g = random(255);
  byte b = random(255);

  BlinkM_setRGB( blinkm_addr, r,g,b );
  delay(10);
  BlinkM_fadeToRGB( blinkm_addr, 0,0,0 );
  delay(1000);
}

void BlinkM_off(byte addr)
{
  BlinkM_stopScript( addr );
  BlinkM_setFadeSpeed(addr,20);
  BlinkM_setRGB(addr, 0,0,0 );
}