PROJECT DEMO VIDEOS
LED WRISTBAND — JUMP TO STAGES OF DEVELOPMENT
The finished LED Wristband in the dark. Its form factor is not nearly as small as it could be, but due to it being my first approach I still have a lot of debug circuitry on top. The comparably huge LiPo battery doesn’t improve on that.
TINY GAMEBOY — JUMP TO STAGES OF DEVELOPMENT
I have programmed a small game engine as well as a physics engine from the ground up in C++ for this tiny GameBoy Replica. It can handle Sprites (Images) for the characters that are animated [source code included], which posed quite the challenge with multidimensional pointer-arrays (it’s a pain!). It runs on a NodeMCU MicroController wired to a custom perfboard. I have yet to come up with a fully-fledged game for it, but I found myself lacking time recently.
POCKET SYNTH — JUMP TO STAGES OF DEVELOPMENT
The final case has been printed with a different, translucent, material that made me want to wire up an LED to the buzzer.
MAKER PORTFOLIO QUESTIONS
- What kind of things do you make? – Code & Hardware.
- What do you make?
I mainly do software and hardware development, with the recent addition of 3D modeling (I finally saved up for a 3D-Printer). My projects include conversion / ease of use tools for my fathers small business, as well as his website and lots of one-off tests to improve my coding skills or to try things out. However, the most mentionable of my software projects is an open-source remote administration tool on which I will go into detail about in the fourth section. On the hardware end I tinker up small gadgets, like a self-made LED wristband, a pocket-sized arpeggiator (makes noise) and a tiny gameboy replica, which I then fit into custom enclosures I have designed.
- How do you make?
I do most of my work in Visual Studio with the languages C# and C++, but for the occasional web-development I can also handle html / css and php as well as SQL.
Early on I had to rely on a lot of tutorials to get started and adapted other peoples source code, but now I do the coding on my own, my primary resources being things like stackoverflow or cplusplus.com to look up winapi functions.
Depending on the project, the hardware development I do also involves coding in the form of MicroController programming with C++. Besides that I needed to teach myself soldering, circuit design and electronics in general, which was a bit overwhelming in the beginning. But through working my way up slowly and the help of youtube / written tutorials and datasheets I managed to get a grasp of the techniques.
- What’s the most meaningful thing you’ve made?
The project that I have put most of my energy into is my Remote Administration Tool Lilith, which I have recently open-sourced on GitHub after one year of development. This project was and still is especially challenging, since it involves a lot of networking and a new approach on process-tunneling that I had to develop myself without any reference. As with any program, there are a lot of issues you have to work around. Some of which I had to concede on, only to return a couple weeks later with a different attack vector. It is also one of the very few RATs that is available open-source and serves as a guidance for many others who googled the same things as I did. Due to the attention of programmers looking for help, Lilith also attracted some collaborators. I am proud to have worked with a fellow developer to implement new features and happily respond to any questions asked by others.
STAGES OF DEVELOPMENT
LED WRISTBAND — JUMP TO DEMO VIDEO
Early development of the wristband (me poking LED’s through a ribbon)
All LED’s are set, the wires have been soldered to them and organized accordingly. One side of the ribbon is already sewn together.
Both sides have been sewn, however there is still a lot of wiring to the controller to do.
Picture shows all the intricate wiring necessary for CharliePlexing 12 LED’s with only 4 I/O Pins. Hot glue holds it all together, I would be lost without it.
The only thing missing is the LiPo battery
POCKET SYNTH — JUMP TO DEMO VIDEO
First breadboad / arduino attempts to create some sort of arpeggiator (music device, progressing chords / sounds) with a piezo buzzer (limited audio capabilities, only frequencies through pulsing at specific Hertz)
Soldering the basic components onto the board: three potentiometers (knobs / dials), ATtiny85 (microcontroller) and the piezo buzzer (speaker)
Functional assembly almost complete with power switch and 3D-printed dials. Battery is still missing
First attempts to 3D-Print a case after carefully measuring and designing it in the free AutoDesk Fusion 360 modeling software.
This is the parametrically (variable wall thickness etc.) designed case for the Pocket Synthesizer. The animation shows the custom sliding door to allow for screwless opening and closing.
TINY GAMEBOY — JUMP TO DEMO VIDEO
EXCERPT 1: GameBoy.ino
First variable / object initialization, followed by the setup() function that sets the chip up for the following game loop.
EXCERPT 2: Engine.cpp [Physics]
The physics engine, more specifically the method that updates the velocities of all characters (according to their acceleration) and their positions (according to velocity), causing them to move on screen. For example if a character jumps, he receives an instantaneous velocity to propel him upward (not 100% like real physics of course!), while a gravity constant decelerates him.
EXCERPT 3: Engine.cpp [Code Problem]
This code excerpt shows the Sprite::getImage() method. The method is called every frame and asks for a current image of the sprite. However, because I wanted to have animated sprites (see: walking animation in the GameBoy Demo) I needed to figure out a way how to accomplish that feat. Due to the character images themselves being an array, the final array to return the frame had to be multidimensional. Now if you also get pointers involved, things start to get really messy, as they tend to do in c++. After countless failed attempts, I managed to get it working with some code that doesn’t look too scary. But let me tell you – all of that pointer-casting and 2D array handling was a huge pain.