Jianan Li has designed a breadboard-based Tetris game built around two Atmel microcontrollers (MCUs). As the HackADay crew notes, Li’s breadboard Tetris creation is so impressive that it probably should be considered “wire artwork.” To be sure, the layout of the ‘board and circuits are as elegant as the carefully written code.
“There are two microcontrollers at work, each running the Arduino bootloader. The main chip is an [Atmel] ATmega328 which is responsible for monitoring the buttons and controlling game play,” writes HackADay’s Mike Szczys.
“The other is an [Atmel] ATtiny85. The 8 pin chip listens to it’s bigger brother, playing the theme song when the game starts, and pausing or resuming to match the user input.”
No matter which way you slice it, this is definitely one of the most stellar interpretations of Tetris we’ve seen over the years. As some of you may recall, Tetris is a modern digital classic originally designed and programmed by Alexey Pajitnov in the Soviet Union. The very first version of the game was released on June 6, 1984, while Pajitnov was working for the Dorodnicyn Computing Centre of the Academy of Science of the USSR in Moscow.
According to Wikipedia, the name “Tetris” was derived from the Greek numerical prefix tetra- (all of the game’s pieces contain four segments) and tennis, Pajitnov’s favorite sport.
Powered by Atmel’s stalwart ATmega328, the microcontroller (MCU) accepts inputs from the neat row of 10k trimpots as well as a series of tactile switches. Feedback is provided by a row of 8 LEDs – driven from a 595 shift register to save pins on the microcontroller.
“The remaining chip is an OpAmp which works in conjunction with a 3-bit R2R ladder DAC to output audio. Turn your speakers down just a bit before taking in the demonstration,” writesHackADay’s Mike Szczys.
“[Below] you will also find an image version of his schematic that we made for your convenience. It is only available as a PDF in the code repository he posted.”
As previously discussed on Bits & Pieces, Atmel’s ATmega328 is a a high-performance 8-bit AVR RISC-based microcontroller that boasts 32KB ISP flash memory with read-while-write capabilities, 1KB EEPROM, 2KB SRAM, 23 general purpose I/O lines, 32 general purpose working registers and three flexible timer/counters with compare modes.
Additional key specs include internal and external interrupts, serial programmable USART, a byte-oriented 2-wire serial interface, SPI serial port, 6-channel 10-bit A/D converter (8-channels in TQFP and QFN/MLF packages), a programmable watchdog timer with internal oscillator and five software selectable power saving modes. Operating between 1.8-5.5 volts, the ATmega328 executes powerful instructions in a single clock cycle – achieving throughputs approaching 1 MIPS per MHz – neatly balancing power consumption with processing speed.
The wheels and motor were taken from a smaller IR vehicle, cut in half and soldered with an old battery mount to the lower part of the Arduino. The IR switch was selected simply because the Sean Hodgins of the IdleHandsProject crew didn’t have a gyro/accelerometer on hand at the time.
“Its just a simple on or off that determines the direction of the robot. There is a potentiality on the IR switch that needs to be changed depending on the surface,” Hodgins wrote in a recent blog post. “Also because the motor is so tiny, I’m able to power it directly from the Arduino. A two motor version [would] most likely have to run a motor controller (which is also on the way).”
As HackADay’s Mike Szczys notes, the black PCB seen to the right of the robot is the IR reflectance sensor.
“[Basically], it shines an IR led at the floor and picks up what reflects back,” he explained. “The board [also] has a trimpot which is used to adjust the sensitivity. You have to tweak it until it stands on its own… [Remember], self-balancing robot builds are a great way to teach yourself about Proportional-Integral-Derivate (PID) algorithms used in a lot of these projects.”
As previously discussed on Bits & Pieces, the low-power sipping 8-bit AVR RISC-based microcontroller boasts 8KB of programmable flash memory, 1KB of SRAM, 512K EEPROM, and a 6 or 8 channel 10-bit A/D converter. The device also supports throughput of 16 MIPS at 16 MHz, while operating between 2.7-5.5 volts.
“Brushless motors have no brushes in them (duh). But what does that really mean? In order to spin the motor a very carefully crafted signal is sent through the motor coils in the stationary portion (called the stator), producing a magnetic field that pushes against permanent magnets in the rotor,” writes HackADay’s Mike Szczys.
“A big part of crafting that signal is knowing the position of the rotor. This is often accomplished with Hall Effect sensors, but can also be performed without them by measuring the back EMF in the coils not currently being driven. The AVR-GCC compatible library which Davide Gironi put together can be tweaked to work with either setup.”
Three Makers – Filipp, Saluka and Michael – recently participated in a 24-hour hackathon hosted by Microsoft. In just one day, the talented trio managed to build a complex labyrinth game powered by an Arduino board and controlled by a Nexus 4 smartphone.
“There are several elastic bands connecting the base to the maze. These act as shock absorbers to help keep the movement smooth and to prevent any oscillations from the frame flexing,” HackADay’s Mike Szczys explained. “For us this is an important design element that we’ll keep in mind just in case we need to win another competition by designing a labyrinth.”
As we mentioned previously, a versatile Atmel-powered Arduino controls the servos via Bluetooth, linking the board with the Nexus 4 Android handset.
Interested in learning more? Be sure to watch the video above for additional details.