Inspiration
This was inspired by Professor Mann's SWIM demonstration. We believe that it can be revolutionary if implemented in 3D. All of us have faced problems imagining in 3D plane while trying to understand complex calculus questions, Fourier series, electromagnetic waves, 3D atomic orbitals, and many other important concepts. Having the means to display 3D data holographically using lights helps students and professors understand and explain concepts that are hard to visualize.
What it does
The 3D SWIM is capable of mapping any 3-dimensional object in a virtual space holographically with the use of LED Strips. This virtual space is predefined in Unity and extended to an Oculus framework to make the object any shape, form, or quantity desired. By spinning the motor of the SWIM in the z-x plane at 160 RPM (Rotations per minute), a 2-dimensional image can be depicted from the LED strip display. A third dimension is added by manually moving the system forward and backward in the y-axis, thus being able to model the depth. Therefore, with the addition of electromagnetic input, difficult structures such as the quantum mechanical view of the atom can be viewed through the LED's.
How we built it
The SWIM:
To build the Sequential Wave Imprinting Machine, a recent model of Professor Mann’s kit was used as the frame. Attached to the frame is an LED strip consisting of 30 LEDS linked through a data input. Moreover, a motor driver is used to provide the rotational torque required by the SWIM. Both of these components are connected to the ESP32 Microcontroller which acts as a wireless communication device between the SWIM system and the serial output.
Virtual Environment:
The virtual environment was set up on Unity, which allows an Oculus plugin that configure the headset and VR controllers into the Unity game environment. Thus, the position and orientation data can be used to determine the 3 dimensional coordinate, and 3 dimensional rotation (pitch, roll, and yaw) of the SWIM through this plugin. Once this has been determined, a long-jointed prism was implemented into Unity to simulate the SWIM. To simulate each of the 30 LEDs in the SWIM, 30 corresponding cubes were jointed in the prism. With this jointed prism, we precisely determined if or if not each of the 30 cubes was colliding with a secondary object. Hence if the program detects a collision with a secondary object, it would send a “HIGH” signal to the corresponding LEDs, showing the specific shape and boundary of the object.
Overall system architecture:
To collect positional and rotational data from Unity, each prefab or object made had to be attributed to a C# file. These files are used to command the position of the SWIM prism (in unity), and if this prism detects an object or not. To organize this data for 30 distinct cubes, an “ID” (1 - 30) was set for each cube, and a corresponding boolean value displayed true or false. This set of live data was then communicated to the Arduino serial port in a series of 0’s and 1’s across the LEDs. Finally, we wirelessly communicate the data from the Serial port to the ESP32 attached to the LED strip and turn the LEDs on/off accordingly.
Challenges we ran into
One challenging aspect of this project was the proficiency required in C# and Unity. From the set-up of the Oculus virtual reality system to constructing a controller-following SWIM prism, we were challenged by an unfamiliar coding environment for all members of our group. Specifically, it took the team many hours, and significant consulting to develop the jointed SWIM prism as adjusting 30 different cubes was an insanely difficult process. Additionally, due to the nicheness of C# communication into serial ports, it took many attempts to get data across the two platforms with low latency. The lack of documentation and inability to debug using the Serial monitor added to the difficulties.
Accomplishments that we're proud of
The completion of such a complex project in such a short period makes this project as a whole an accomplishment to be proud of. Additionally, being able to transfer a real-world object into a virtual object for simulation and odometry was very rewarding. Since systems like SWIM are not widely known or documented, we were able to get a taste of what engineering research and development is like.
What we learned
We expanded our understanding of the intricacies of motors as well as the complexity of simulating a virtual environment and pulling raw data from the aforementioned environment. Furthermore, skills in simulation and virtual imaging were developed and we now have a more advanced comprehension of the potential relationships between software and the information that travels between platforms.
What's next for 3-Dimensional Sequential Wave Imprinting Machine
In the near future, we plan on utilizing denser LED strips to give a higher resolution image, a more stable chassis with built-in sensors for the position of the SWIM, and faster refresh rates and tick speeds to ensure minimal visual lag and delay. Future development of the 3D SWIM will continue by interfacing with the MUSE or MUSE S to be able to be controlled using the mind rather than images within a digital interface.
Built With
- arduino
- autodesk-fusion-360
- c#
- esp32
- oculus
- swim
- unity
- vscode
Log in or sign up for Devpost to join the conversation.