I admit it: I'm a total geek. I love electronics, programming, 3D printing, 3D art, and vintage Apple hardware. I'm always juggling half a dozen projects. I also enjoy documenting it all: my successes, my failures, my experiences... and everything geeky along the way.

The Tesseract Build, Part I | Kevin Rye.net - Main

Kevin Rye

Geek Extraordinaire. Yeh, I said it.

The Tesseract Build, Part I

After about two weeks, my Tesseract PCBs arrived. I couldn’t wait to put them together.

DSC_0001 1

I first started by soldering in the 3mm white LEDS.

DSC_0003 3

As far as the blue LEDs, I didn’t want to buy 25 blue LEDs when I already had a ton of RGB LEDs left over from the RGB Night Light I built. The likes of SparkFun charge upwards of $1 a piece. The goal here was to throw this thing together with whatever I already had. That’s the main reason I didn’t design a board from scratch that included an ATmega and some shift registers and/or LED drivers. I basically wanted something that I could easily drive with my Bare Bones Arduino using LEDs that I already had.

I just cut the red and green legs off the RGB LEDs and soldered them in as-is. I could have designed the board with traces connected to all colors, but that would have added to the complexity of the design, made it bigger, and increased the price. In addition, it didn’t make any sense to do so considering the final build is only ever going to display blue. If I was going to go to that kind of trouble, then I’d sooner just order a NeoPixel Board and throw it in a box. But what fun is that?

DSC_0004 4

After the white and blue LEDs were in, all that remained were two 100 ohm resistors. This was a very easy build.

DSC_0005 5

I programmed an ATmega328 to blink the LEDs just to make sure that everything worked. I popped it into one of my Bare Bones Arduino boards and soldered some leads to the pins that I’d need.

DSC_0006 6

I connected a battery pack and fired it up. It works.

DSC_0009 9

With the first board proofed and the design validated, it was safe to go ahead and assemble the other 4 sides.

DSC_0017 17

In order to connect one side to the other, I soldered in some right-angle headers.

DSC_0018 18

They connect together perfectly.

DSC_0019 19

I then went ahead and connected all 5 boards together.

DSC_0021 21

Since the ATmega328 only has 6 PWM pins, I can’t drive all 10 sets of LEDs independently of each other. I only have 3 pins for white and 3 pins for blue. What I did was connect the two adjacent sides together and leave the top panel by itself. This model illustrates how the boards are grouped. Each group is connected to its own white and blue PWM channel.

3sides_tesseract

The right angle headers physically connect the boards together, but in order to electrically connect one panel to the other, I have to short the solder jumpers for the blue and white PWM channels.

LED_display_board_0025 25

I cleaned up the wiring a little bit on the Bare Bones Arduino and connected each PWM pin to the appropriate PCB.

DSC_0027 27

I connected the battery part once more to make sure that all my connections were correct. Success!! Everything works.

DSC_0037 37

It’s pretty bright. That’s a good thing. Hopefully it’ll remain bright enough to illuminate the room after I spray paint the inside of the enclosure. I want to give it a thick enough coat to obscure the electronics from sight.

DSC_0031 31

With the hardware complete, it was time to focus on the software. I wrote a sketch that included a few simple animations. For the most part, it’ll just slowly cycle through the LEDs and fade in and out. Every now and then, it’ll do something a little more elaborate.

For the default animation, the blue and white LEDs take turns fading in and out across the boards. A random number is chosen during each loop. Depending on the random number, a different function will be called for a different animation. That way, the default animation will play for the most part, but every now and then it’ll do something unexpected.

void loop() { 
  randomNumberOne = random(20);

 //default animation 
  b1FadeDown();
  w1FadeUp();

  b2FadeDown();
  w2FadeUp();

  b3FadeDown();
  w3FadeUp();

  delay(300);

  w3FadeDown();
  b3FadeUp();

  w2FadeDown();
  b2FadeUp();

  w1FadeDown();
  b1FadeUp();

  if (randomNumberOne == 1)  {
    flashLEDs();
  }

  if (randomNumberOne == 2)  {
    allFade();
  }

  if (randomNumberOne == 3)  {
    altBlink();
  }

  if (randomNumberOne == 4)  {
    quickWave();
  }
}

Here’s a short demo of it in action. For the purposes of the video, I altered the code slightly so that the various animations would be called back-to-back.



Now it’s just a matter of painting the enclosure.

See this project from start to finish:
The Tesseract
The Tesseract Build, Part I
The Tesseract Build, Part II