"Steve's Physical Map" - A2: Physical Output

  By Christian Salvador

Final Prototype Image


Description

  Man if only I didn't have to waste both time and hotbar space to pull out a map to see where I'm going, huh? Well do I have the TUI for you!

  My initial idea for this assignment was to create some sort of 2D location mapper using motors. A 3D printer's rail system was the first thing to come to mind and so I played with the idea of creating my own rail system from scratch. The project was quite ambitious and to be honest, there were a lot of things I wish I could have done better if I had the time but I will touch upon that later in this description. Now for the data stream. I was trying to figure out what data stream to use and overheard the professor talk about using minecraft and that sparked the idea of using a player's position as the data stream. However, it seemed that a fellow classmate, Omar Khan[1] had a similar idea. So we devised a plan and figured out how we would differentiate the two TUIs. To create twin sister TUIs that would utilize different aspects of a player's position. I would create a horizontal TUI and Omar would create a vertical TUI. You can see Omar's vertical TUI on his portfolio here: https://okhan.me/tangible

  For the design, I decided to use a 3D printer screw rod linear rail for both the axis. This involves using two Nema-17 motors, motors used in an actual 3D printer, two screw rods with a diameter of 8mm and length of 300mm for both axis and a Polulu A4988 motor driver for each motor. I also used two capacitors which will be shown in the circuit diagram below. I wired them up in a way that one motor represents the X-axis of a player's position and the other represents the Z-axis. The Arduino code can be found below. Furthermore, I had also used two force sensors to act as end stops for auto calibration. A push button is also added to allow for forced calibration if necessary.

  The code is quite simple. Omar had sent me a link to a tutorial that pretty much enabled MCPI commands in a Minecraft Java server.[2] This allowed me to get Python to read the player's position and with the help with code from the Arduino forums to allow for Serial communication[3], I was able to pass the player position to the Arduino, convert it into steps and mapped it to the motors with the help of the AccelStepper library[4]. In the end, I was able to actually get a working physical mapper that matched the player's position with a set space in the physical world.

  I did run into a few issues concerning time, and especially underestimating certain build choices. If I had more time, I would have 3D printed the carts rather than cut them and build them myself with chipboard and tape. I'd even consider trying to get longer rods for much better precision and size. Currently, with 300mm rods, only about 8" is actually usable, so I had to keep the area within 8"x8". I would have also tried tinkering with different magnets as the current setup pulls the very light rail carts up and also doesn't glide smoothly along the top.


Concept Development Images

Initial Sketch

Second Sketch

Cardboard Prototype

Cart Prototype Design

Cart Rail Prototype

Two Cart Rail Prototype


Concept Development Videos

Prototype Motor Tests


Demo Video

Demo Video


Circuit Diagram


Arduino Code

In order for Python Script to work, Minecraft Server must be running with a player currently online. The Arduino must also run first.

Github Repo With Arduino Code, Python Script and Minecraft Server (https://github.com/KittenInAMitten/CPSC59988A2)


References

  1. O. Khan. "Omar’s Tangible HCI Portfolio." [Personal Blog]. Accessed: Mar. 14, 2024. [Online.] Available: https://okhan.me/tangible
  2. J. Pedersen. "Using the mcpi Python library to control Minecraft Java Edition 1.8 on macOS 12.3." [Personal Blog]. Accessed: Mar. 14, 2024. [Online.] Available: https://jeremypedersen.com/posts/2022-03-28-mcpi-macos/
  3. Robin2. "PC - Arduino comms using Python -- updated." Arduino Forums. Accessed: Mar. 14, 2024. [Online.] Available: https://forum.arduino.cc/t/pc-arduino-comms-using-python-updated/574496
  4. M. McCauley and P. Wasp. "AccelStepper." Arduino Libraries. Accessed: Mar. 14, 2024. [Online.] Available: https://www.arduino.cc/reference/en/libraries/accelstepper/