As an experiment to play around with multi-mesh-instancing and compute shaders in Unity, I created a small project to render as many moving 3D low-poly ants as possible at the same time. Each ant was vertically offset by a few units and each was just pseudo randomly walking until hitting the virtual boundaries of the square. This was all done in a compute shader, and the result then rendered by the mesh-instancing unity provides.
This way, it was possible to render ~900k ants moving around all visible at the same time with stable 13 FPS. (This was achieved with a AMD Ryzen 9 5900X and a NVIDIA Geforce RTX 2080 Ti) To force them to be rendered at all times, an orthographic camera from above was used, which always sees all the ants.
Together with a teammate, I created a multiplayer MR experience in which you can play Chess and Go. This was for the module “Windows App development” Used for this project was Unity3D, MRTK and PUN2. Check out the description and code on the GitHub repository.
The project was made to work on an Augmented Reality device such as the Microsoft HoloLens and Virtual Reality Headsets such as the HP Reverb. The idea was that two players could connect with either platform and play with each other. Initially there were plans to integrate the table recognition of the MRTK for the AR devices, but that was scrapped due to time constraints.
In the end, project had the following features:
peer to peer Online Multiplayer
AR and VR support
Builtin Chess and Go modes (no rules, just board and figures)
import of custom games with board texture, 3d models, snap positions, etc.
As a university project for the module “Multimedia”, I was in a team to develop hardware which would recognize single notes or cords being played on an instrument (tuned to piano sounds).
The project was run on a Raspberry Pi, and used the Fast Fourier Transformation to get the information needed. For a full writeup you best checkout the GitHub repository and the Printables entry.
Dodge-box is a university project for the module “Software Engineering” in which we were supposed to do some sort of programm in a group with version control. We, as a group of three, decided to do my go-to learning project “Dodgesquare” in javafx.
We didn’t have all too much time, so the project ended up pretty crude, but it works and we got a good grade.
With the want to create a more professional NAS solution than the one in my apprenticeship (just a raspberry pi with two external USB 1TB HDDs lying on the floor), I wanted to create something cheap, but still good and with good capacity.
Since ready made NAS Enclosures would work, but are really expensive, I decided to Design my own in Fusion 360.
After finishing the model and printing it, I filled it with 4 2TB HDDs, which I configured in Raid 10.
In the back I placed the Raspberry Pi 4 and connected a daughterboard to control the Fans, as well as connecting the external ethernet port to enable a fast wired connection to outside the case. I also added a status LED, as well as a simple push button in order to have a “soft shutdown” button, which initiates a software shutdown. You can also just cut power with the power switch, but the soft shutdown is safer.
I’ve experimented with 3D scanning for some time now, and I thought that a turntable would help tremendously. Previous tries often had my hand interfering with the scans and it was difficult doing a “live scanning” with the kinect.
So I decided to build an arduino powered turntable that would have different modes and maybe even the ability to sync with my PC in some sense. Later on I decided to just focus on timed auto program with different levels of speed.
The idea of the internals came up fairly quickly, and I settled on: a cheap Stepper motor from my arduino set, an arduino nano (enough number of pins and a smaller footprint in size than an arduino uno), a digital encoder for input (acting as a dial, and the press to switch modes), a button as an additional input to switch the dial between modes and a 7 segment display with decimal point to display information.
I started out with modelling the actual table part of the assembly. This was also my first time using the Gear script in Fusion 360. After playing around with the parameters of the script I completed the table part. Next up was the middle part to hold the motor and gears. For this I found the spec sheet of the stepper motor and used the dimensions to create the cutout. To keep it modular and easily accessible also made two differently sized holes to the bottom to slot into, and made the stepper motor slot with screw holes instead of a snap fit.
I started out the bottom with the cylindrical part and the notches. After this, I estimated the needed size of the interface and used join/cut operations to put the cube interface to the cylinder body.
The only thing left now was the face plate to keep the look clean. Since I decided to glue/weld it, it was fairly easy and quick to design.
After everything out, I had some real problems getting the motor to turn consistently. It got stuck very often and I had a hard time finding out why exactly that was. My first thought was the friction of the (not so smooth) 3D printed surfaces, but lowering friction with foil or tape proved difficult, since those seemed to catch on the rough surface even more.
Then I realized the biggest mistake: the fit in the ball bearing was way too loose, to keep it in place enough. After printing out a lot of samples of new gears and the axis part, I finally got a good fit which was really tight. It turned out that I had to choose a wider diameter of the axis than the measured size of the ball bearing. I’m guessing that this is due to the shrinkage occuring when the PLA cools down combined with the small cylindrical shape of the axis.
Prototyping the perfect diameter of the axis
I also extended the axis enough so I could fit a second Ball Bearing below the mount of the first one. And I planned to hotglue it to keep it in place.
And my second Revision of the table worked out great. Since I created the body in 3 parts, I only had to print the Table part again, which saved me a lot of time and material.
While the table printed, I went on and started to solder the components on the perf boards with mounts to keep it still fairly modular. The main things I soldered were: resistors for the 7 segment so I could directly drive it off the Arduino pins.
After soldering, I started to figure out the pins of the display for the Arduino code, but made a big mistake… I forgot to use a resistor while testing and ended up blowing out the decimal point of the display I had. No problem, I just go and get more of them. Or so I thought.
After getting replacement for the display (+ 4 spares) I tested the pins correctly and finished the code. Now I tested if the code actually displayed the numbers correctly, aaaaaaand… Nope. I was really confused since I couldn’t figure out the patterns at first. At some point I again tested the 7 segment display by itself, and realised my problem: Instead of a configuration of all pins corresponding to an LED being + and the two additional pins being ground, these display actually functionend the other way around. Meaning, that the two additional pins take input current and you have to ground the pins you want to light up.
This made me angry, since I didn’t see why you would need the wiring this way around and I thought that I couldn’t use the circuit I already soldered. Fortunately, after some research (and great help from a friend) I realized that I could just pull the arduino pins to HIGH to eliminate power flow and setting them to LOW when they should let power flow through. Testing this confirmed that I just had to slightly alter where and how I plugged in the breadboard cables in between the Interface perf board and the arduino one.
I already completed the arduino code at this point and went into the tweaking phase, where I slightly altered the variables of speed and distance to make more sense for the use case.
FINALLY COMPLETE – after a lot of time sunken into this project, I finally got a working product out of it. And since I built it from ground up it was a great feeling having it actually work.
As I were rounding up the organising of my new room, I thought about where to put my HTC Vive. And I remembered the various holders I’ve seen on Thingiverse in the past.
And I ended up printing these two designs:
https://www.thingiverse.com/thing:1491610
https://www.thingiverse.com/thing:1624894
And padded the Headset Holder with foam to prevent scratches.
After moving I found a neat little space to put my Printer:
And to prevent it being like a little echo chamber I added the sound dampening foam in the back, that already helped a lot.
But vibrations were still a big problem, so I applied the cheap fix a lot of people recommended on reddit: the concrete plate at the bottom:
The Weight and structure of the plate pretty much cancels out the vibrations induced into the shelve. And to prevent damage to the furniture I put a piece of cardboard underneath the plate. Now the only noise I hear are the printer itself. It started rattling recently, probably because something is getting lose… But otherwise it still remains pretty much silent when it runs in stealth mode.
Also when I close the door, the top half of the printer is hidden and only the base peaks out. I might get a problem when I use the maximum height of the print area, but even then I could just leave the door open for the duration of the print.
I’m especially happy with the mounted power outlets.