Blog Posts

Eye-Lexa (Alexa Eye)

Nick Engmann gave his Alexa some personality by adding an ADC-controlled eyeball to it.

Nick picked up some Amazon Echo-Dots to hack during a sale.  He decided whip up a 3D printed enclosure and add some personality with an animated eye using a Teensy 3.2 and a TFT LCD display.  The project was partially inspired by Adafruit’s Uncanny-Eyes tutorial.

Code for the project is published on GitHub.

 

Automating Zelda: Breath of the Wild

Bertrand Fan got creative and automated part of the gameplay for Zelda: Breath of the Wild on his Nintendo Switch.

After *many* hours of gameplay, Bertrand had yet to defeat all of the Divine Beasts.  Anyone who has played Zelda knows that having advanced weapons and armor are they key to success, and those require rupees (the Zelda game currency).  To acquire rupees you need to either be really good at the game, or figure out how to hack the game.  Bertrand went with the latter.  By using a Teensy ++ to act as a joystick, he was able to automate playing the bowling game in Zelda to quickly acquire the elusive rupees.

There is a great write up of how the automation came about in this blog post.

Instructions on how to build your own as well as the source code are available on GitHub.

 

Pocket Operator MIDI Adapter

Hanz Electronics has made a cool MIDI Adapter to work with the Pocket Operator music devices.

Using a Teensy 3.6 and held in a custom 3D printed case this adapter uses pogo pins to make contact with the exposed button pads on the Pocket Operator allowing you to trigger all 23 buttons via MIDI.  It also has an internal digital polyphonic synth loaded with features.

This convenient adapter is available on Tindie and  the source code is available on GitHub.

PantherXL Game Controller Remade

Jeff Pearson has completed his remake of the Panther XL game controller with the addition of a custom joystick.

The first part of the project was the custom trackball controller.  Jeff continued on with the project and added a joystick to complete the remake of the PantherXL joystick (last produced in 1998).  While the PantherXL was popular, the lack of USB connector meant that it didn’t work with more modern computers of the time.  Jeff really liked the joystick/trackball combo and decided to make his own using a Teensy ++ and the USB Joystick functionality.

Code for the project is available on this Google Drive.

E-Paper Shield

Jarek Lupinkski has made a handy adapter board for use with e-paper displays.

This adapter board makes driving the Pervasive Displays 2.15″ e-paper display with a Teensy-LC or Teensy 3.x.

Adapter board kits are available on Crowd Supply.

Code for the project is published on GitHub.

Pressure Sensitive Virtual Reality Controller

Leslie Jenkins, Hunter Carter, and Matthew Tilton developed an input device to capture hand movement for a virtual reality controller.

The controller was part of an undergraduate research project undertaken by the trio to develop a pressure sensitive VR controller.  Their idea was to look at VR controllers from a different angle where rather than the player using their full body in a virtual world in a limited space, they wanted to come up with a controller that would trick the player into feeling like they are naturally moving from applying force to the controller and seeing that force being applied to objects in the virtual world. The prototype controller was made with some acrylic sheets, foam, some force sensitive resistors, and a Teensy 3.6.

The team’s write up on the project with their results is available on this project page.

 

Audio Controls Proto Shield

CircuitBaker (on Tindie) has put together a control shield to make prototyping audio projects a bit easier.

This convenient shield includes 6 pots, 4 buttons, 4 LEDs, 4 mini jacks, and 2 SPDT switches for use with your audio project.  Just add a Teensy 3.x and Teensy Audio Shield (optional) and you are ready to go.

Code, schematic, design files, and bill of materials are published on GitHub.

Flip Disc Tetris

Sinowin reverse engineered a on flip-disc display to play Tetris.

Back before LED displays and LCD screens were in common use, flip-disc displays were used to display information.  These displays are made up of a grid of discs that are yellow on one side and black on the other.  The discs physically flip to display information.  Sinowin got his hands on one of these displays and decided to reverse engineer it to make a Tetris game.

A adapter board was developed to provide an interface for a Teensy 3.5.  A 2-way joystick module was added and with a “small matter” of programming a Tetris game, the project was ready to go.

Code and schematics for the project can be found on GitHub.

RGB Lights for Mykle’s Lightbar

Addressable LEDs before it was cool…

In January 2011, Mykle Hansen put out a call for LED help for his Lightbar event.  I made this 3W LED board:

It’s incredibly bright.

Here it’s set to color pink (#FF20FF).

Mykle wrote more about the lights and using them at Lightbar. This blog entry is mostly about the technical details and design files. Read on for details…

This little project was inspired by Mykle’s Lightbar message on December 2. Well, probably intending to help prior years was a factor. Anyway, here’s that message:

Subject: [dorkbotpdx-blabber] LIGHTBAR cometh … LED help?

hi dorky people!

to any of you who remember LIGHTBAR from two years ago, or heard about it, i’d like to announce that LIGHTBAR 2011 is in the planning stages for this February.

LIGHTBAR is a Seasonal Affective Disorder (SAD) treatment center that appears intermittently in the month of February to bring inspiration, fresh air and wide spectrum light to the people of Portland.

This year I’m working on a Mobile LIGHTBAR system — a folding portable structure. But there’s some tricky parts I’m trying to overcome regarding the light itself.

For one: we’re going to be generator powered at best, so I’m investigating low-power lighting options. LEDs were not really wide-spectrum last time i checked, but maybe they’ve gotten better? Can anybody suggest types of LED lighting wider than the standard white and RGB varieties we’ve had bouncing around since 2005? I’m just not up on the latest LED fashions, I guess.

For two: I’m looking to rent or borrow a portable gas generator during the month of February. I’m asking everybody, yourselves included. I will treat it like a baby.

For three: My Mobile LIGHTBAR will have a folding skin, and I’d really like to integrate some kind of LED lighting system directly in the fabric, or else on some kind of net that easily hangs between the skin and the frame. this would be your standard controlling-a-bunch-of-LEDs project, but it has to be designed for durability, ease of repair, and fairly long runs of cable. If it was all RGB LEDs and they were independently addressable, that would be even better. Probably I’d be talking about something in the range of 100 – 200 LEDs, of 1 watt or less. (roughly!) Picture trying to spread those evenly across a 20′ diameter hemisphere, with the power & control system located somewhere on the edge.

I’ve thought about doing this with the BlinkM units, since they’re bus-addressable, but I feel like with this many units it might be cheaper to have something custom-fabbed. on the other hand, time is tight. i’d be thrilled if i could find system already designed to do exactly this.

and/or, does anybody in Dorkbot feel like taking this on as their own project? i think i could find some budget …

-m-

So, I started looking at some RGB LED specs. I pretty quickly found that the lower power LEDs, like the one on BlinkM, aren’t specified in Lumens (total light output), or if they are, the Lumens per Watt aren’t great.

After comparing lots of LEDs, I finally ended up with ASMT-MT00, which is in the 30-some Lumen/Watt range. It’s not cheap (about $10 to $15 in small qty), but it really works!

Here’s a close-up of the LED.

Today many more high power LEDs are available, some from Chinese sellers with questionable specs, but so cheap they’re hard to pass up!  Back in 2011, this seemed like the best option.

Mykle wanted to keep the cost low. In fact, he wanted to use cheaper LEDs… But this was my little weekend project-on-a-whim, and I wanted 100+ lumens! I also really wanted to make it run on 12 volts and have very efficient conversion and tolerate some voltage drop without changing the LED brightness, and I wanted RS485 communication so the signals can run a long distance (unlike BlinkM). This design does all that. In the end, it worked really well for Lightbar… so well that Mykle is building 18 more boards!

Pretty much on a whim, I ordered a few ASMT-MT00’s and other parts, and came up with a somewhat unconventional design.

IC manufacturers generally recommend using 3 of their LED drivers for RGB LEDs, one for each color. Of course, they love to sell 3 specialized chips, which aren’t cheap! Instead, I decided to try using only 1 special power supply chip, and the LM3407 from National Semiconductor looked like one of the most economical (cheapest) choices. And I was going to use only 1 instead of 3.

The basic idea was run all 3 LEDs in series. The ASMT-MT00 nicely provides each LED separately on 6 pins, instead of common anode or common cathode, which makes this possible.

The LM3407 can operate without any output capacitor. It is a constant current afterall. Normally a 22 uH inductor would be recommended. But I decided to increase it to 100 uH (the datasheet is light on details of stability in continuous vs discontinuous mode, but it seemed like continuous conduction buck mode would work). The LM3407 datasheet mentions being able to omit the output cap, with increased variance in output. Since I wasn’t going to have any output cap, I wanted the current to be better regulated, and upsizing the inductance is the way to do it.

The reason to omit the output capacitor is because I decided to change the color by diverting the current around each LED. Red is about 2 volts, and blue and green about about 3.5 volts. But when shorted by a PNP transistor, the voltage suddenly changes to about 0.5 volts. Better transistors would be less than 0.5, but I used cheap 2907’s.

Since the PNP transistors basically “float” at whatever voltage the power supply and drop on other LEDs or transistors happen to make, I used 3904 NPNs so a microcontroller can turn on and off their base current. When the processor drives 3.3 volts, about 2.6 volts is driven onto the 220 ohm resistor on the emitter, or about 12 mA in the 220 ohm resistor. That 12 mA comes mostly through the collector (which doesn’t care what it’s voltage happens to be when used in linear mode), which pulls the current from the floating PNP transistor base.

Yes, this is a pretty unusual transistor circuit… and I wasn’t completely sure if it’d work, but this whole thing was just a whim. I spend 2 days on it, the first one reading about the LEDs, LM3407 (and lots of other chips), and thinking about that circuit. The second day, I drew up the circuit board. I knew the LED gets hot, and so would the LM3407 and maybe the transistors too? I just drew some copper planes and thermal vias, and a big pad for a small heatsink (leftover from another old project). No prototype, no simulation, no real analysis… just a lot of guesswork and hunches, and at the end of the second day I sent off the files to Laen’s PCB Order (which is now OSH Park).

Here are the PCB files.

I never drew any schematic for the rest, but it’s just a ATTINY2313 chip to control everything. There’s 4 PWM signals, 3 connected to the transistors, and the 4th to the “DIM” control pin on the LM3407, so it can shut off when none of the LEDs need to be on. There’s also a RS485 interface chip and a few other necessary parts, but nothing really special.

Here is a full parts list:

qty  part number        part description                        sources
---  -----------        ----------------                        -------
1  ASMT-MT00-00001      RGB LED, 3W                             mouser, digikey
1  LM3407MYCT-ND        LED driver chip, 350 mA                 digikey
1  ADM3493ARZ-ND        RS485 chip, 3V                          digikey
1  556-ATTINY2313V10SU  ATTINY2313, SOIC-20 ("20SU" is ok)      mouser, digikey, avnet
1  296-26120-ND         LP2950 3.3V TO-92                       digikey
3                       MMBT3904, NPN transistor                digikey
3  771-PMST2907A115     PMST2907A, PNP transistor               digikey
1  B130-FDICT-ND        Diode, Schottky, B130, SMA              digikey
1  445-1208-1-ND        Inductor, 100 uH, 500 mA, 7mm           digikey
1  535-10211-1-ND       Crystal, 7.3728 MHz                     digikey
2                       Capacitor, 33pF, 603                    digikey
3                       Capacitor, 1uF, 16V, X7R, 603           digikey
1  490-5523-1-ND        Capacitor, 10uF, 25V, X5R, 805          digikey
1  311-.56SCT-ND        Resistor, 0.56, 1%, 805                 digikey (have 47 more)
2                       Resistor, 47K, 603                      digikey
3                       Resistor, 220, 603                      digikey
2                       Terminal block, 4 pin
1                       Header, 3x2, 0.1 inch (AVR prog)        (cut from 20x2 strip)
1  532-507302B00        Heatsink                                mouser
1                       Screw, 4-40, 1/4 inch
1                       Nut, 4-40
1                       Lock Washer, #4
1                       PCB                                     dorkbot

If anyone actually builds more boards (Mykle is building 18 more), here’s a parts placement diagram:

I pretty much set this thing aside and forgot about it, until the boards arrived a few weeks later. I set them aside for a few days, but the Dorkbot Monday meetup was the motivation I needed to get them actually working!

Then I spent one late night session Sunday night building and testing the hardware. Amazingly, the LM3407 chip worked great. I was worried the current regulation might respond too slowly when the output voltage suddenly changes by 3 or 6 or 8 volts! But it works great (at least without any output capacitor). It is designed by be PWM controlled by the DIM pin… but there weren’t any specs about how it’d respond to the ‘LED voltage” suddenly changing. I actually spent a couple hours with an oscilloscope and waveforms driving onto the transistors to make sure it really worked.

The other thing I tested and verified, is the switching power supply really does efficiently convert the power and adjust as the color changes. Even though the current is still “on”, when 2 of the lights are off, the voltage is only 0.5 volts (the cheap 2907 can’t get it any lower). Because power is voltage * current, the input current really does go down even though the output current stays the same, because the output voltage changed, and the switcher is pretty efficient. It really does work well that way. The switcher also does a great job of making exactly the same output, even if the input drops to 10 volts instead of 12.

About mid-morning Monday, with the Dorkbot meetup looming only hours away, but the hardware pretty well tested, I started working on the software side.

One confession I need to make is the ISP header was routed for the usual pinout with the header on the “top” side, but I soldered it to the “bottom” side (the side with the heatsink). Fortunately, I had a Teensy with ArduinoISP sitting on my desk, so it was pretty easy to just reverse the pinout to match. But if anyone else builds this little board and tries to use an off-the-shelf AVR ISP programmer, well, either solder the header to the LED side, or plan on wiring up a little adaptor to reverse the pinout.

In about an hour, I banged out this extremely simple code to run on the ATTINY2313 chip.

It listens for 8 character ASCII commands at 115200 baud. The input is hex, where the first byte is the board’s address, and the next 3 bytes are the RGB color. Any non-hex byte causes it to discard any data and begin listening for a new comment. Normally, sending a byte like “:” before a command, or pressing Enter after each command is a good idea. Here’s a few commands:

01FFFFFF Board #1, White
030000FF Board #3, Blue
02000000 Board #2, Off

Each board needs to have its address hard-coded. The makefile runs AVRDUDE automatically, so this isn’t very difficult.

Mykle has already added some new features to the code, like a broadcast address. I don’t have his latest code, but he’s planning to set up a CVS (or similar) server for the code. Hopefully he’ll post a reply below with a link.

The code could do a lot of things. The address bytes could be stored in EEPROM, instead of hard-coded. The protocol could be extended, or features like BlinkM could be added. Even DMX should, in theory, be possible.

I spent about 1 hour on the code. Much of that was making the PWM polarities correct.

With a few extra hours to spare before Dorkbot that Monday evening, I did some fiddling to make the lights work with Puredata. All 3 boards I made were working well that night.

I must confess, I’m not very experienced with Puredata. But quite a Dorkbot regulars are. Jason, Brian and others hacked on the Pd stuff and made the LEDs blink and fade. Here’s the Puredata Code, both my original attempts, and the end result of hacking on the code during 1 evening at Backspace.

The evening, Mykle took home the 3 boards, and a RS-485 converter I had (left over from other projects). They were used at Lightbar, and I made it out there one of the evenings. Good times.

Mykle is building 18 more lights, and plans to do fun things with the software.

I’m not planning to do much more with this, but I wanted to get this blog post written, so the info, and all the available design files and code would be posted publically. If you, dear reader, build these or use the ideas or info for another project, please post a comment below.

Enjoy!

 

This article was originally published on the DorkbotPDX website, on March 22, 2013.  In late 2018, DorkbotPDX removed its blog section.  An archive of the original article is still available on the Internet Archive.  I am republishing this article here, in the hope it may continue to be found.  But today, many awesome addressable LED products exist on the market, so this sort of project probably doesn’t make good economic sense compared to just buying a ready-made LED strip.