SparkFun Support and Front Desk will be closed on Thursday 11/14 from 1-2:30pm for a company event. Please plan to pick up your orders before or after this timeframe.
They say, "play stupid games, win stupid prizes," but the joke's on them: I love stupid prizes.
As rewarding as it is to build something that actually improves your day-to-day life, I happen to think — to nobody's surprise — that you can get just as much satisfaction from extravagantly useless projects. If you are one of those who enjoys "making" for its own sake, there is actually a lot to learn from these futile design exercises. Challenges such as the Flashing Light Prize and International Obfuscated C Code Contest are brilliant examples of events that encourage needlessly elaborate solutions to "solved" problems. Often, although the finished product is useless, the technologies and implementations that enable them can have useful applications. At the very least, these types of exercises help to illuminate otherwise obscure aspects of a technology or a process. In the spirit of such endeavors, I'd like to introduce you to a pastime of mine: Stupid Arduino.
Stupid Arduino is the practice of designing elaborate and pointless implementations of the Arduino platform. I chose Arduino as the phrase on which I would be free-style improvising for a few reasons. First of all, it's a popular and accessible platform — far fewer people would be excited about stupid implementations of, say, HyperCard. Secondly, the ingredients for an "Arduino" (in the generic sense) are few and well defined: Any microcontroller with accessible GPIO running the Arduino bootloader can be reasonably referred to as an Arduino. And finally, it's a platform that comprises multiple disciplines: An Arduino can be "stupid" because of its controller, its electrical design, its mechanical design or even its firmware or bootloader design. Stupid Arduino only has three rules: The device must run a functional, Arduino-flavored bootloader; it has to execute the example "blink" sketch (with appropriate delays); and it must have some form of GPIO broken out from the controller. Beyond that, anything goes: fun clock speeds, clock sources, architectures, form factors, power management - it's all fair game.
With that explanation out of the way, I submit the first installment:
Let me show you its features:
1) Convenient and well-supported Micro-ATX form factor
The Micro-ATX form factor is compatible not only with Micro-ATX PC cases but also Standard- and Extended-ATX cases. The Pro Micro-ATX conforms to the mechanical specs for footprint size, stand-off placement and expansion card position for the widest possible compatibility across case manufacturers.
2) Support for enthusiast-grade cooling hardware
The heart of the Pro Micro-ATX is an ATmega32u4 microcontroller that has been positioned (along with the necessary support components) within the mechanical footprint of an LGA 1151 socket. This gives the user a wide array of options for (pointlessly) cooling the microcontroller, including many AIO air and liquid coolers designed for modern Intel processors.
3) 24-pin ATX power support
Arguably the only useful feature on this board is the 24-pin power connector, which allows the ATmega32u4 and its peripherals to draw from any external, ATX-compatible power supply.
4) Expanded EEPROM
You may be surprised to find that I had, uh, some room on the board. I decided that one way of utilizing this space might be to stack as many I²C EEPROM chips as I could on the one available bus. That number turns out to be eight (with capacities up to 512k), giving this board a whopping 2Mbits of storage! I stopped just short of Shawn's suggestion of laying out I²C DIMM footprints and compatible "RAM cards," because you have to draw the line somewhere...
5) Card Slots!!!
...but NOT at expansion cards! After all, what's a motherboard layout without expansion slots? It's not enthusiast-grade, that's for sure. So I created a system of expansion cards for the Pro Micro-ATX. It could be argued that the Arduino already has a system of expansion cards — shields — and that they are the best possible expansion system given that they have access to literally every I/O of the host controller. I decided that there was no electrical improvement to be made here and that, instead, adapting the shield system to the ATX form factor would be my main focus. I found the idea of using PCI connectors a little excessive, even for an undertaking of this magnitude, and opted for a smaller 28 Position Card Edge Connector. The compatible cards adapt the pinout of the edge connector back to the familiar Arduino shield form factor, so any existing shield can be connected and accessed through the expansion slots in the back of the case.
6) Rear I/O
Any good motherboard has rear I/O and the Pro Micro-ATX is no exception. Accessible from the rear panel are a standard shield footprint, a 6-pin Atmel ISP header and a USB type-B connector for serial communication.
7) RGB Lighting
The oversized spoiler and sweet flame paint job of the custom PC world. Not only does it make your computer faster... it also makes your computer better.
Mechanical specs for ATX and its derivatives are widely published and the topic of a lot of discussion online. This makes it easy enough to grab hold of a dimensioned drawing laying out the card slot, rear I/O and standoff placement. Following these standards allowed me to design a board that fit seamlessly within a random Cooler Master ATX case on the first try.
Take a moment to admire the USB traces leading from the 32u4 to the type-B connector in the rear I/O window. In the words of Sir Mix-A-Lot, "[They're] long, and [they're] strong, and [they're] ready to get the friction on." And by friction, of course, I mean induction of noise. Those things are antennas and no consideration was made for shielding of any kind. Not to mention the two data lines are, uh, approximately matched length... but they're not strictly matched length. Finally, the prescribed impedance for USB data pair traces is 90 Ohms. Would you like to know what the impedance of my USB data pair is? So would I; hold on a sec... it's about 120-140 (depending on the dielectric properties of this particular FR4) - that's pretty lucky! Anyway, at the relatively low speeds at which this device operates, the USB interface seems to have absolutely no problems!
A microcontroller development board that comes in an ATX tower case is obviously a little... much. However, there are a lot of features PC cases offer that I could see being incredibly useful in certain situations. For instance, if you packed a multiplexer and a bunch of relays into the empty space on the Pro Micro-ATX and then seated it in a reasonably sized Micro-ATX case with a good power supply, that would be a pretty clean industrial control solution. This doesn't just go for Arduinos and PC cases, either. If you have a project in need of an enclosure, look at what's available and design for compatibility!
There are a few types of connector footprints that make hobbyists bristle: FFC/FPC landings and card-edge connectors. Despite many of us becoming familiar with them at an early age thanks to cartridge gaming consoles, card edge can seem mysterious and cumbersome for hobby designs. I'm here to tell you, however, that there's really no fancy trick to it. Pick a card-edge socket and look at the datasheet; it'll tell you the thickness of the card and the depth/pitch of the fingers, and that's all you need! I made custom parts in KiCad for the 28-position connectors that I sourced from Digikey, and it was as simple as making rectangular SMD pads and then spacing them correctly. Edge connectors are robust, durable and relatively inexpensive so don't count them out when you're designing your next widget! Plus, you could 3D-print your own cartridge housings!
The Pro Micro-ATX would get a lot of attention at the LAN party... for a few minutes. In the extreme, this teaches us a lesson that we all probably knew already: You can water-cool anything; that doesn't make it TEH 1337 Gam3r RIG.
All that being said, this is a computer, and it only took a few hours to design. There's no magic inside even the most cutting-edge motherboard offerings, and if you can get your hands on the appropriate sockets and I/O controllers, there's nothing stopping you from going full custom on a Ryzen ThreadRipper build... as long as you have a working understanding of high-frequency signal routing and power management. The point is, there's a spectrum between the Pro Micro-ATX and a top-of-the-line gaming PC: You can build a computer of some description without being handed it from on high. There's something nice about that, to my mind.
So that's Stupid Arduino. Is this a fun game? Should I make more of them? Is there anything that an Arduino absolutely shouldn't do that you would like me to make it do? Let me know in the comments! Also: because of minimum order quantities from PCBWay, I have three unpopulated Pro Micro-ATX boards and a handful of "expansion cards" left over, so if you would like one of them, say so in your comment and I will pick three people at random to receive a very stupid package!
Update: I almost forgot, you can get a closer look and even make your own by checking out the source over at the StupidArduino Github Repo!
Nick rolled the dice and chose three people to receive a Pro Micro-ATX Stupid Arduino! Congrats to thops, lizclark777, and dwpatter! If you're not one of those three people but you still want to get your hands on one, you can always check out the Github repo to get the design files and order them from OSHPark or PCBWay.