Building the Infinite Matrix of Tamagotchis

Tamogachi is a digital pet, living in and cared for through a key-chain size piece of hardware. The mid-90’s toy lives in pop culture, but now it lives well beyond. A limitless network of Tamagachi has been created using some amazing tricks to feed, socialize, and monitor the beast now known as the Tamagachi Singularity.

Last weekend at the Hackaday SuperConference we were graced with a talk by [Jeroen Domburg], a.k.a. [Sprite_tm]. [Sprite] is a favorite of ours and over the years his hacker cred includes everything from reverse engineering hard drive controller chips to putting video games in his keyboard.

[Sprite] is also something of an Architect, and like all Architects he only wants what is best for the system he created. In this case, it’s a Matrix of Tamagotchis. [Sprite] created a hive of Tamagotchis that are able to interact with each other in their own separate world. The best part about this Matrix? There’s no allusions to violating the laws of thermodynamics in the exposition.

Like all good hacks, a Tamagotchi Matrix wasn’t created in a vacuum. A few years ago at 29C3, [Natalie Silvanovich] dumped the ROM in the current generation of Tamagotchis. This is an incredible feat of reverse engineering, that allows anyone to use the full capabilities of the 6502-based microcontroller that controls these digital pets

After [Sprite] figured out how to read and run the code in the Tamagotchi, the next obvious step towards a world of egg-shaped pods containing an entire population of Tamagotchis is virtual Tamagotchis. [Sprite] used a hard-coded state machine that takes care of pooping, flushing, training, feeding, and turning the lights off at bedtime.

With a single Tamagotchi described as a state machine, it’s a simple matter to build another. This is where things get interesting and Matrix-ey. Tamagotchis don’t live alone; they have an IR LED and receiver that allows them to interact with each other, eat, play, marry, and have kids. Emulating a single Tamagotchi is one thing, but controlling multiples is another thing entirely; some sort of protocol was needed to breed Tamagotchis and keep them happy and well-fed.

Continue reading “Building the Infinite Matrix of Tamagotchis”

LED Matrix Failure and Vindication

If necessity is the mother of invention, what’s failure the mother of? Improvement? Anyway, [prpplague]’s second version of his roll-up 70×30 RGB LED display looks a lot better and more reliable than the first, and that’s precisely due to “failing”.

Sometimes you design the hardware around the software, and sometimes vice-versa. It’s all about the balance of pain. [prpplague] initially wired the strips together in a consistently left-to-right raster arrangement to make the coding easier, but this means long wires on the backside of the fabric returning from the right side back to the start again at the left. These long wires snagged on stuff, and pulled the solder connections apart.

600px-Dotstar-adapter-solder3The fix? Alternate rows of left-to-right with right-to-left to minimize wiring and make nice, robust connectors for the ends, and a much more elegant implementation at the expense of more complicated software to drive the device. (Alternating rows have to be flipped horizontally, so this means custom driver routines.)

The second gremlin was that the interfacing board that [prpplague] was using didn’t have enough current sourcing capability on the SPI lines, and he discovered that he couldn’t communicate reliably with the strings if the first pixel was more than 24″ of wire away from the board. Once the signal got to the first pixel, though, everything was fine. [prpplague] figured out that the RGB LEDs themselves had more drive capability than the SPI source.

The solution? Add a single pixel at the front of the chain to buffer the SPI lines and serve as a bonus status indicator. Cute.

We’d hardly call these “fails”, but rather “learning experiences”. Anyway, here’s two design “mistakes” that we won’t make when making a roll-up flexible pixel display. Thanks [prpplague].

LED Matrix Plus Geiger Counter

A lot of projects get made because someone just has the parts lying around. In this case, [Ed Nisley] got given a nice 8×8 RGB LED matrix, and needed something to display. [Ed] details the transformation of stuff-lying-on-the-desk into a unique matrix display for a Geiger counter (which he also presumably had sitting around somewhere). The result is a lightshow that’s as random as radioactive decay, and that’s pretty darn random.

img_5583-random-led-dots-circuit-layout-rb-smd-resistorsThe first post covers the hardware layout. It’s build on protoboard, but ends up looking a lot nicer than our projects because [Ed] spent some time hiding the shift-register ICs and row-driver transistors underneath the matrix itself, which was nicely socketed above. A sweet touch is the use of SMT resistors soldered upright underneath the board to save space. Cute.

The second post covers the circuit design, and is worth a look if you’re new to driving many LEDs from a minimum number of microcontroller pins. There are eight rows, and three colors each for eight LEDs per row. Without using shift registers, this would require 8*8*8*8 = way too many pins to control. If you want a worked example of how to do this with just four microcontroller pins, have a look. (Spoiler: cascaded shift registers driven by the AVR’s hardware SPI peripheral.)

The third post starts to flesh out the software. [Ed] settled on seven colors (and off) for the display, so the matrix’s total state can be crammed into just 32 bytes, which fits nicely in even a tiny microcontroller, much less the gargantuan ATmega328. Wrapping this all up in an array of structs and providing a couple of helper functions makes quick work of the software side. The addition of a sync pulse to trigger an oscilloscope at the end of a row is a nice touch.

aware-rm-60-geiger-pulseNext up is the Geiger counter interface software post. When a radioactive decay event is detected, the code reads out the time in milliseconds and uses that as the source of randomness. To whiten the noise, the times are run through a simple hash function: the Jenkins hash (link). This hash function was new to us and seems pretty useful for quick-and-dirty microcontroller applications.

The last post details pre-loading the matrix on startup and running a test sequence that blinks each LED to make sure they’re all working. Using a single random value to seed a software pseudo-random number generator ensures that it will (almost) never start off with the same display twice.

Phswew! That’s a lot of well-documented writeup of a well-polished project! Hope it inspires you to dig out something cool from your junk drawer and build.

Arduino Tetris on a Multiplexed LED Matrix

[Alex] needed a project for his microcomputer circuits class. He wanted something that would challenge him on both the electronics side of things, as well as the programming side. He ended up designing an 8 by 16 grid of LED’s that was turned into a game of Tetris.

He arranged all 128 LED’s into the grid on a piece of perfboard. All of the anodes were bent over and connected together into rows of 8 LED’s. The cathodes were bent perpendicularly and forms columns of 16 LED’s. This way, if power is applied to one row and a single column is grounded, one LED will light up at the intersection. This method only works reliably to light up a single LED at a time. With that in mind, [Alex] needed to have a very high “refresh rate” for his display. He only ever lights up one LED at a time, but he scans through the 128 LED’s so fast that persistence of vision prevents you from noticing. To the human eye, it looks like multiple LED’s are lit up simultaneously.

[Alex] planned to use an Arduino to control this display, but it doesn’t have enough outputs on its own to control all of those lights. He ended up using multiple 74138 decoder/multiplexer IC’s to control the LED’s. Since the columns have inverted outputs, he couldn’t just hook them straight up to the LED’s. Instead he had to run the signals through a set of PNP transistors to flip the logic. This setup allowed [Alex] to control all 128 LED’s with just seven bits, but it was too slow for him.

His solution was to control the multiplexers with counter IC’s. The Arduino can just increment the counter up to the appropriate LED. The Arduino then controls the state of the LED using the active high enable line from the column multiplexer chip.

[Alex] wanted more than just a static image to show off on his new display, so he programmed in a version of Tetris. The controller is just a piece of perfboard with four push buttons. He had to work out all of the programming to ensure the game ran smoothly while properly updating the screen and simultaneously reading the controller for new input. All of this ran on the Arduino.

Can’t get enough Tetris hacks? Try these on for size.

LED Matrix Infinity Mirror

[Evan] wrote in to let us know about the LED matrix infinity mirror he’s been working on. [Evan] built a sizable LED matrix out of WS2812B LEDs and mounted them to a semi-reflective acrylic sheet, which makes a pretty awesome infinity mirror effect.

Instead of buying pre-wired strands of serial LEDs like we’ve seen in some other projects, [Evan] purchased individual WS2812 LEDs in bulk. Since the LEDs just had bare leads, [Evan] had to solder wires between each of his 169 LEDs (with some help from a few friends). After soldering up hundreds of wires, [Evan] drilled out holes for each LED in a piece of semi-reflective acrylic and inserted an LED into each hole.

To create the infinity mirror effect, [Evan] mounted the LED matrix behind a window. [Evan] put some one-way mirror film on the outside of the window, which works with the semi-reflective acrylic to create the infinity mirror effect. The LEDs are driven by an Arduino, which is controlled by a couple of free programs to show a live EQ of [Evan]’s music along with patterns and other effects.

What is the Matrix…Clock?

We’re surprised we haven’t seen this kind of clock before, or maybe we have, but forgot about it in the dark filing cabinets of our minds. The above picture of [danjhamer’s] Matrix Clock doesn’t quite do it justice, because this is a clock that doesn’t just tick away and idly update the minutes/hours.

matrix clock

Instead, a familiar Matrix-esque rain animation swoops in from above, exchanging old numbers for new. For the most part, the build is what you would expect: a 16×8 LED Matrix display driven by a TLC5920 LED driver, with an Arduino that uses a DS1307 RTC (real-time clock) with a coin cell battery to keep track of time when not powered through USB. [danjhamer] has also created a 3D-printed enclosure as well as added a piezo speaker to allow the clock to chime off customizable musical alarms.

You can find schematics and other details on his project page, but first, swing down below the jump to see more of the clock’s simple but awesome animations.

Continue reading “What is the Matrix…Clock?”

A Wooden LED Matrix Coffee Table

[johannes] writes in with a pretty impressive LED table he built. The table is based around WS2801 serially addressable LEDs which are controlled by a Raspberry Pi. The Pi serves up a node.js-driven web interface developed by [Andrew Munsell] for a room lighting setup. The web interface controls the pattern shown on the display and the animation speed.

[johannes] built a wooden coffee table around the LED matrix, which includes a matte glass top to help diffuse the lighting. An outlet to plug in a laptop and two USB charging ports are panel-mounted on the side of the enclosure, which are a nice touch. The power supply for the LEDs is also inside the enclosure, eliminating the need for an external power brick.

While [johannes] hasn’t written any software of his own yet, he plans on adding music synchronization and visualizations for weather and other data. Check out the video after the break to see the table in action.

Continue reading “A Wooden LED Matrix Coffee Table”