CoinOp Badge

Hardware badge inspired by my favorite Coin-Op video game

Similar projects worth following
What's your favorite coin-operated video game? You said Galaga, right? That's the favorite for most people, and the hero of the game is the spectacular space ship that keeps us all safe from invading space hordes. To celebrate our hero I've designed a badge shaped like the ship!

The major components of this badge include an ATmega48 microcontroller that drives 18 red LEDs, 4 blue LEDs, takes input from 2 momentary push buttons, and is powered by a CR2032 coin cell.

I wanted a fast-paced project that let me do everything, from concept to assembly, and this is it. I just received a toaster oven to do the reflow (previously I had been using a hot air rework station). I built a programming jig using pogo pins. I ordered a solder stencil for the project and did two PCB runs, receiving a total of 59 boards.

Here's a brief demo of the functionality:

The badge sleeps for 4 seconds between each visualization, consuming just 4.3 uA. Short button presses on the left and right buttons fires the lasers on that side of the badge. Holding the right button scrolls between visualizations. Holding the left button powers the badge on or off. When in the off mode the power draw is 0.1 uA.

Assembled by hand in my basement, I was able to do 4 boards in about 90 minutes. Populating all of the components wasn't that bad, but because of the fine-pitch on two of the resistor networks I had to hand rework every badge (openings in the solder stencil needed to be smaller).

Check out the time lapse video I made of the final four badges:

Current Status:

I have reached v2.1 and fully assembled and packed 59 badges. The firmware is currently using 4080 bytes out of a total of 4096 available.

Here's a PNG of the current schematic: 

View all 9 components

  • Packaging the Badges

    Mike Szczys08/08/2018 at 00:40 0 comments

    These badges need a lanyard and battery to be fully functional. If you're going to be handing them out at a big event you don't want to deal with this with every interaction so I decided to pre-bag every badge.

    I designed the badges to use key rings through the PCB which will give the lanyard a connection point. The key rings were 1 cm in diameter and are quite robust. A quick internet search found a great little trick, use those claw-like staple removes you have in your desk drawer to separate the key ring to get it started, then use a need-nose pliers to finish it off. Here are the badges with rings:

    From there I added a lanyard to each and wrapped it nicely around each badge.

    I orderd ESD bags that were 10cm by 15cm. Since by PCBs are 9.6cm by 9cm you would think this would be perfect. The gotcha is that the bag measurements are outside dimension and not inside dimension. To my dismay the badges did not fit.

    I already have the bags in hand and instead trying to send them back and buy new, larger bags (which is more wasteful since these are likely to be thrown away), I cut a slit along half of one side and the nose of the badge sticks out. The slit is sealed with tape after the badge and battery are inserted:

    It didn't take long to package 50 badges (I have 59 but only ordered 50 bags). It was an easy job over part of one evening.

  • CoinOp Badge Assembly

    Mike Szczys08/08/2018 at 00:27 0 comments

    This badge would have been impossible to assemble without a solder stencil. I've never used one before and the important lesson learned is that fine-pitched components need very small openings in the solder mask. This was about $45 (delivered) so I wasn't going to order another, but unfortunately I had to rework every badge by hand to remove excess solder from the two 1506 resistor arrays (16 pins).

    I made a little jig to use the solder stencil. This keeps it perfectly aligned with the pads on the board. Because of the odd shape of the badge I used two other PCBs as part of the jig and used a credit card (came with the stencil) as the squeegee.

    Placing all of the parts was a big job. I had previously made a vacuum tweezer using an aquarium pump. You just crack it open and turn the diaphram around to make it suck instead of blowing (heh).

    Here's a timelapse I made of the final four boards I assembled. You can see in the video the solder wick I used to remove excess solder that was bridging the resistor network pins.

    An inexpensive toaster oven was used to reflow two of the badges at once. I set it on high, and switched from bake to broil a few times so the bottom wouldn't get too cooked. The boards were often slightly smoking by the time all of the solder flowed. I will likely add a thermocouple and some type of controller for future projects so I can get closer to a proper solder profile.

    Here's the first run of 15 boards... they really turned out great!

  • Power Button Behavior

    Mike Szczys07/08/2018 at 18:01 0 comments

    I've made a lot of progress on visualizations and setting up the state machine. Now I want to implement power button behavior since it needs to be globally available.

    Because there is no hard power switch and the momentary push buttons that wake and sleep the badge are the tallest parts I want a somewhat robust sleep and wake sequence to prevent accidentally turning the badge on and draining the battery. Here is my sketch that I will work on implementing today:

  • Firmware Design: Low Current LED Tricks

    Mike Szczys07/07/2018 at 18:08 0 comments

    I have 22 LEDs on this board and they're powered by a CR2032 coin cell. The more current you try to pull out if this cell, the higher the internal resistance and the shorter the expected capacity.

    This is a conference badge so I only really need the batteries to last about 72 hours. But even that means I can go around buring all the LEDs at once. So how do you light them all up if you can't run them all at once? By scanning the display!

    I have already implemented a 1/6 duty cycle at 1kHz and I'm pulling about 28mA with all LEDs "on". Now I'm looking toward a wider design that let's me dim the LEDs as needed. Above are my sketches on this.

    My solder stencil should arrive Wednesday or Thursday so I'm not doing any more assembly until then. I'll try to get all of the above implemented by then and do some battery life testing.

  • Slapped with a Routing Error

    Mike Szczys07/06/2018 at 22:57 9 comments

    I was sooooo over confident. I did assembly of the first board at about 11pm last night and when I went to bed about 12:45 I was fairly certain that things were all working:

    The six red LEDs at the bottom are a Charlieplex and I had two that lit up which indicates that I put one on backwards. A quick rework and everything cycled. I congratulated myself for rolling a design without testing the footprints and not making any mistakes... but I was wrong.

    At lunch I ordered a solder stencil because the old syringe method last night was painful (hence the 1:45 assembly process). I want to do at least 30 of these boards so making the paste application easy is a must. I went to each lunch and suddenly realized I hadn't tested any of the buttons.

    When I flashed code with the button handling enabled, the LEDs didn't come on at all. I tried a simple, non-debounced button read and it also didn't work. A check with the multimeter showed 3.3V across the pull-down resistor and that shouldn't be happening.

    I quickly ate lunch while scratching my head and came up with this:

    I used an existing schematic symbol and then altered a footprint myself to match the button's datasheet. Can you spot my mistake above? Look at the silk screen; pins 1 and 2 are electrically connected inside the switch. I needed to route to pins 1 and 3 or pins 2 and 4 for the switch to work.

    The footprint is not square so I can't rotate the buttons. I need to reroute. The similest thing I could think of for the 15 boards I have on hand is to slip the lead on one side of the switch, and jumper the pad to the one below it:

    Not bad, huh? This will work for now. I was going to order more boards anyway so I'll fix the routing for rev2. I may still use these boards and just rework the switches by hand like this, we'll see. At any rate, it's not nearly as painful as it could be since I will still be able to use the stencil I ordered.

    Everything else worked great. I accidentally ordered 0201 decoupling caps instead of 0603 but I had some 0805s lying around and they just barely fit the footprint. I need to put in another parts order anyway since I only picked up enough red LEDs for 9 boards (and already dropped one so we're down to 8).


  • Boards Have Arrived!

    Mike Szczys07/05/2018 at 19:09 1 comment

    Boards have arrived and I'll try to get the first assembled this evening if I can somehow fit it in. Wanted to get pictures up right away though since these look really really great!.

    The silk screen as a bit of an alignment issue. I don't have calipers to measure it exactly but I'd say it's something like 0.5mm higher and further to the right than it should be. It also looks like it's slightly fatter than it should have been. I'm not too worried about this, these are nit-picky remarks that don't affect performance and are only noticed if you look really really closely.

    I'm a bit worried about the pitch on the two 1506 resistor arrays. Should be fun to see if I can get them to reflow without bridges. Stay tuned!

  • Layout Complete, Boards Ordered

    Mike Szczys07/02/2018 at 01:12 1 comment

    I began this project on Sunday, and Thursday night into Friday at 2am I put in a board order. If everything works out perfectly I should have PCBs and parts in hand on July 3rd and can do assembly and testing of the first board on my July 4th day off.

    Routing actually went pretty well. I knew that LED control wasn't particularly fussy about IO pins. I did make sure that all of the charlieplexing pins are on the same port. Speaking of that, for aesthetic purposes it became clear that I didn't have room for 8 engine LEDs to I reduced it to 6 and now need only 3 pins to address those.

    So with global labels on the schematic it was pretty simple to swap pins around as needed to reduce the number of signal crossings needed. The top if the board is minimalistic and when I exported the gerbers I didn't export the text layers. The front of the badge features a ship al-a @Andrew Sowa who wrote the book on art in KiCad.

    I didn't want to do through-hole 3x2 header for the AVR ISP because it would show up on the front and there's no aesthetic reason for that. I chose to route a 1x6 SIL header on the back to one side of the badge. I'll make a pogo-pin adapter to program badges on this header.

    Keep your fingers crossed that the international shipping gods smile upon me. I'd really love to get these populated this week!

  • Blue LEDs, Coin Cells, and Bench Supplies

    Mike Szczys07/01/2018 at 20:41 0 comments

    I'm doing the assembly for these badges by hand so every component that I don't use is a time speedup. Looking at the blue LEDs for the badge, I decided to drive them without resistors. They have a forward voltage of 2.85V and at the high end I expect the coin cell to have 3.2V. Subtract the forward voltage and target 5 mA and here's our Ohms law:

    You can expect a CR2032 to have an Internal resistance (IR or sometimes called ESR) to have 10-15 Ohms of resistance. That's a bit low, allowing between 23 mA and 35 mA to flow when the max continuous current for this LED is 15 mA.

    Also, I don't want to have to do development with a battery. If I run this from a bench supply, I don't get the ESR benefit of the battery. I considered putting  a footprint on the back for resistors, with a trace shorting them that could be cut for the development board. But in the end I opted to add a resistor network.

    What resistance is best here? Ideally this LED should have 30 Ohms, assuming an (also ideal) 2.85V drop on a 3V supply and 5mA of drive:

    I'm banking on 15 Ohms from the battery and using 15 Ohms on the board. This will drive the LEDs too hot during development but I'm taking my chances on that.

  • PCB v0 of CoinOp Badge

    Mike Szczys06/29/2018 at 14:59 0 comments

    I'm playing catch-up to document a week's worth of late nights. This is the version 0 of the CoinOp badge schematic before doing any layout. I based my parts choices on the following:

    • Cheapest TQFP microcontroller I could find with as many pins as possible. I found some ATmega48 chips on Digikey for $0.70 at low volume and this is less than using constant current drivers.
    • Coin-cell battery (CR2032). They're cheap and easy to find. I'll be somewhat limited on current by directly driving from the uC but this battery doesn't have much juice so the two are a good pairing.
    • 3 red LEDs for each blaster so I can do a back to front animation
    • 2 blue LEDs for each shield
    • 4 red LEDs for each engine. I've run out of pins so I used a charlieplex for these
    • 2 buttons, one will be used to wake from sleep. I decided to connect these to VCC and us an external pull-down resistor so that I'm not burning the internal pull-up during sleep mode. If my power-down mode sucks I've also included a 2-pin pad that is shorted. I can always cut the trace and put a pin header so that jumper can be used to disconnect the battery.

  • I've been bitten by the badge bug

    Mike Szczys06/29/2018 at 14:28 0 comments

    I've been in love with hardware badges since the moment I first saw the Ninja Networks back about ten years ago. Since then, the badge world has evolved into a movement called #badgelife. I've met a lot of badge makers and have gotten my hands on a lot of badges. This is an awesome community and I don't want to be sitting on the sidelines.

    Hackaday has done several badges and I have been involved in three of the Superconference badges (one still upcoming) and also this year's Hackaday Belgrade badge. But this week I decided to jump in feet first and take on my first solo badge project!

    Best. Coin-Op. Ever.

    I really, really love the game Galaga. Recently I realized that whenever I see a stand-up of the game I mention it to the people around me -- "Hey... Galaga!" -- reflexively. From the side art, to the pre-roll music, and even to the little ship icons used as player 1 and player 2 buttons, there is a really warm place in my heart for the game.

    And so, I'm basing the badge on the iconic ship from Galaga. The PCB will be white and pixelated, with LEDs matching the color of the blasters, shields, and motors. 

View all 10 project logs

Enjoy this project?



thelogicofpi wrote 10/02/2018 at 21:20 point

did you have extras from defcon that you are intending to list on tindie ???? inquiring minds want to know if i should just get these boards made :)

  Are you sure? yes | no

thelogicofpi wrote 03/05/2019 at 21:51 point

and no answer becomes the answer. I'll get my own via the open source channels :) Thanks Mike!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates