The way I approached this project was odd. I wouldn't call it efficient.
I started with the art when I probably should've thought about the functionality first. But then again, I had a much more solid grasp on the art because that's what I'm familiar with. I've had experience screen printing in the past and designing the artwork for this SAO was very reminiscent of some of the printmaking projects I've worked on in the past. My first two iterations of PCBs were fueled by artistic decisions with little to no attention paid to the functionality of my circuit. Now, as I am figuring out my circuitry, I find myself going back to KiCad and editing the schematic and pcb, and then making a bunch of edits to the silkscreen layer of art to accommodate the changes to the pcb layout that I've made.
I now understand why I've seen so many badge makers start with an artless rectangular prototype board. I just had a lot to overcome as far as deciding what I wanted the SAO to actually do and how I would make it happen.
Thankfully, the ANDnXOR crew shared a handy SAO reference design on github that helped shape the direction I was to take my SAO. I also went through everything that Krux and Darknet have made available about their badges and Eggplant SAO. In addition to the online resources, I had my badges and SAOs from DC26 to draw inspiration from. I really liked how the Darknet badge could change the LED animations on the Eggplant SAO, and this seemed like something I could emulate without TOO much trouble. Reading through the ANDnXOR SAO documentation, I was really really intrigued by the idea of a badge being able to identify an SAO via data stored in EEPROM on the SAO. Both the EEPROM and LED control went way over my head but I want to learn.
I at least had a plan now. Add a microcontroller to blink LEDs and accept I2C commands to change the animations and an EEPROM chip to store info about the SAO. I went with an ATtiny85 and AT24C32 respectively. I ordered some parts from Digikey and got to breadboarding when they arrived in the mail.
After settling on an ATtiny controlled by i2c, I ended up finding an arduino sketch someone had written that could control an RGB LED with an ATtiny85 via i2c. How fortunate. This was a great place to start learning about i2c and being able to apply it immediately to my SAO. This involved a serious RTFM lesson.
I had a lot of trouble figuring out the I2C com. This is partially because I have never used it before, but also because I'm super impatient and refuse to read documentation as thoroughly as I need to. I have a bus pirate, and it turns out those are really good for sending i2c data. I didn't know this because I've never actually used the bus pirate before. I had purchased it 2 years ago when I started going to Defcon and Hackaday Supercon as I heard it was a good tool for hardware hacking. I'm looking forward to making a list of all the basic skills and tools that I'm getting around to learning/using for the first time because of #badgelife.
After watching this video on i2c/bus pirate usage , sending a whole bunch of i2c reads and writes that did seemingly nothing (NACK NACK NACK), and taking my time to read the data sheets for my components (this is so important), I finally had it figured out and communicating consistently.
This is great. I now have the circuitry and functionality figured out. This is probably where I should've started.
I was even able to add a bit of a flag/puzzle in the SAO. This makes me very happy as that is one of my favorite aspects of the other conference badges I've seen.
The latest version of the board coming my way has a 6-pin ICSP footprint included to hopefully allow me to reprogram the SAO after they are assembled, it also has what should be the last bit of big tweaks to the artwork. The ICSP bit is working on a breadboard so I have high hopes for the PCB. Unfortunately I already need to make another change to the PCB to include the EEPROM that I've now decided on. Turns out the AT24C32 is overkill and I'm switching it out for a chip with less memory that costs slightly less.
This week was all about the core functionality of the board and it feels really good to have made some solid forward progress on it.