DC27 Done - Project Summary

A project log for Space Force! DC27 Badge

Defending Space since 2019

truetrue 08/16/2019 at 01:450 Comments


Basically, it's Space Force!

OK, the story goes: at DEF CON 26, a bunch of people in the Whiskey Pirates room were talking while at that stage of weird stage tired... you know, where you say and do dumb things. At some point, someone threw something and yelled SPACE FORCE so that was a thing now. Object throwing (mostly at BK) and SPACE FORCE persisted for some long amount of time.

I thought that we needed to take it a step further, and so created Space Force One, the Elite American Space Ship (slash paper airplane).

The rest is what you made of it at DEF CON 27. =)

PCB Order

After getting the design done, while sleep deprived and working on 3 unrelated PCB projects, I sent out the order.

There were several things fixed on all designs I sent out that day. All the others came back OK ... but Space Force still had a fault in the design. Turns out I did not actually fix one of the mistakes and was blowing up the battery protection circuit. =( (fun fact: there are 7 blue badges out there that are reworked versions of this PCB)

I had to re-order PCBs. Sadly, the second run was worse quality than the first. I took the best boards and used them to fabricate Space Force.


By the time I got good boards I had already spent a shitload of time fighting with my pick and place. This fighting happened with the GAT Nametag and Internet of Batteries projects. By the time I began placing Space Force, I had most of the quirks worked out. The machine still cries at me sometimes but it's not so bad now.

Many parts had to be hand placed or soldered. These included: the first 40 or so DW01 and FS8205A, the first 40 or so TP4056, all OLEDs, all accelerometers (my machine hates the tape), all USB (reel too big), EN and IO0 buttons (had to be modified), on/off switch, ESP32 module, IR TX/RX, and battery holder.

At peak I was getting 7-8 badges done per hour to the 60% done mark. This means everything was done except for the OLED, IR RX/TX, LEDs, jumper wire and battery.

As I was only one person running between the pick n place, desk, and oven, some boards were ... overcooked. Oops. They work fine though and look like the rest... mostly... :)

Only suffered maybe a dozen lacerations and a couple dozen burns, including one second degree burn.


To gauge interest, I opened reservations via a Google form on twitter. Pickup by people actually reserving was very low, less than 10%. Not sure I'll do this again.

I made this badge to sell to raise funds for WP projects: that is, to buy the tools and parts necessary to keep making badges. I was asking what people thought the badge and what WP doing what we do was worth, and this was a bit of a mistake. Some people said things like $10, and when I explained that that is less than BoM and what it was for they were generally disinterested. Most were happy to help out.

I think most people who wanted one were able to get one during con. There will be some for sale soon for those who still want one. Most people spent $100.

I am thinking of bringing a bunch to Supercon 2019...should I?

What's next


(I hope. No promises. As usual.)

Design review (what happened, and mistakes I made)

This is a very boring read of each subsystem in Space Force.

As is usual with my designs, I cost optimized as much as possible, favoring lower parts cost over reduced labor. I also had a tight design deadline which led to some decisions. Had I had more time, I would have done some things differently.

I roughly calculated, based on time remaining, had things generally gone well with few problems that I would have between 250 and 500 badges by DC27. In the end, many more things went wrong than anticipated - not just with Space Force, but with other projects that took my time. There were ~250 nearly complete badges requiring only LEDs and testing before DC27. In the end, more than 100 hit the floor. This is my most successful badge in terms of completed numbers. Not as many as I would have liked hit the floor, but it isn't bad.

Here are some thoughts and quirks to my design.

First, the power is supplied by an 18650. On some badges. On others, it is a thinner LiPo. This was a last-minute hack as I thought the 18650 was a bit thick and I knew some people would prefer a thinner badge. I exposed a battery negative pad, and soldered to the input side of the fuse to attach LiPo. VHB keeps the cell secure to the badge.

The battery circuit includes a pretty standard china DW01/FS8205A protection circuit. My power switch cuts power to the battery right after the protect circuit to prevent any draw when off; this is useful in case of part failure going thermal. However there is no polarity protection, so 18650 users can blow up the DW01, resulting in some heat or smoke though usually not enough to catch anything on fire. Oops. This also means the power switch must be on in order to charge the battery. I will probably change how I do this in future rechargeable designs.

Oh, and yes, the badge does do recharging! Turns out I wasn't clear about this, even though the badge makes clear on the back to turn the badge on to charge. I was asked about changing or charging batteries more than once...

Core 3v3 is provided by an MPS switcher. Unlike my DC24 badge, my switcher nor the inductor went thermal this year. I think I got my power figured out.

This badge uses an ESP32-WROOM-32. I did not like this choice for two key reasons. First, this chip is power hungry, even with WiFi off. One can't halt the core and keep peripherals running. This is really meant to be an ancillary WiFi chip, and does not well fit the role of low-power micro. Second, I knew it would be a bitch to write code for and debug. And it was. I ran into a number of brick walls writing the code for this thing. I also made the conscious choice of using the debug pins, because, well, I needed pins. This means I was stuck printf debugging. When the cores are crashing for weird reasons and my toolchain can't easily tell me why, it made developing code for this not very fun.

LEDs are in a matrix, driven directly by 3x PWMs on the ESP and 4x transistors driven by channels on a shift register. Considering I could have used 4x lines to drive the LED matrix, and I used transistors on the outputs, why did I use the shift register? Well, the plan originally was to have even more LEDs. Time and routing constraints mean I had to cut those out. I kept the design as the shift register was already stocked, routing was mostly done, and they only cost pennies each.

The infrared receiver works well. This unit is custom mounted through a hole and bridge soldered to pads on the board.

Infrared TX, on the other hand, is shorter range than I would have liked. The reason it is weak is because I the anode and cathode each connected directly to the ESP, limiting current to ~24mA. This is without a dropper resistor (I did test the badge using the IR for days and the pins weren't damaged). The reason I did things this way was to use the IR TX as a photodiode. And that works pretty well...but because of PCB design, when the letter A is lit, this will be read on the infrared IR and more or less sets a baseline level that is pretty high. Oops. I didn't get the actual brightness scaling code done in time for DC27, but the code to read brightness is there and working.

IR was only used for the pewpewpew sending out some TV IR toggle codes. The IR RX would respond with "we've been hit!" on any valid IR code. People made a game out of this and were dodging eachother behind doors and around hallways. Not intended but glad people had fun with it!

There is an ADXL345 accelerometer, but right now that is only used to enter the menu. There were going to be games involving it, but I didn't have time to get them done. Maybe next year.

USB is CH340C USB to UART. This is a crystalless version of CH340G. No complaints, worked well.

My serial reset circuit is slightly different than others. Instead of the standard dual BJT with base resistors, I use a dual ESD-protected P-channel FET in a tiny SOT363 package. Seemed to work fine.

OLED is a standard china 0.91" module. But instead of pin mounting, I soldered it SMD style through a hole in the PCB to reduce height, improve aesthetics and reduce opportunity for damage. The retention is a bit unique too. I think there were only a couple of damaged OLED during con, so that's good!

LEDs are standard 2835, but flipped upside down. This did mean having to manually solder LEDs on each badge. (We got 2/3 done in the last two weeks before con!) I didn't have time to change the design to reduce the "bright spot" effect they have, but it worked well enough and people were happy.

There is an LED jumper wire as I could not find a route after a couple days of working with it that would not heavily interfere with the top layer.

I learned a lot selling this badge this year. There are design elements that I will not use again, and others I can improve on. I think I can streamline sales a bit too - I'm not a sales guy and don't really want to sell badges so wasn't very comfortable with it.

Mostly made up statistics (based on memory with grain of truth)