Star Wars Scomp Link USB Port
2023-05-04 | By Zach Hipps
License: See Original Project 3D Printing
There's a really cool thing in Star Wars called a scomp link. It's basically a computer terminal built for droids so that they can access data. I thought it would be cool to build one of these scomp links and even make the center rotate like it does in the movies. To make it even more interesting, I want it to be a functioning USB port for my computer. There are going to be a lot of technical challenges to overcome. I'm unsure what type of material I want to build this out of or how to get that rotating piece to work. The tricky thing about this project is that that piece needs to rotate around a static center where the USB port is going to be. So, I know I need to find some sort of bearing so that the outer piece can rotate while the inner piece remains still.
I'm going to make an aluminum faceplate that is purely decorative. I’ll attach the front faceplate to a front body piece and then have a back body piece where a motor can be attached. I'll 3D print a mid-body piece that I'll be able to screw those parts into. I don't have the machines available in my shop to machine the center rotor piece out of aluminum, so I asked my friend Winston Moy for some help. Winston is an amazing hobbyist machinist and digital fabrication guru. He took a look at my model and gave me a couple of pieces of feedback to make it easier for him to machine this part.
The next piece I need to figure out is the central hub where the USB connector is located. I have an idea of how I'm going to do this, but I haven't actually tried it to see if it's going to work, so I may not know until the very end when I put everything together and write some code whether or not this is going to work.
One of the requirements of this device is that it needs to detect when something is plugged into the USB port. I’ll use a USB Type A connector for the front of the device, and a USB Type C connector for the back of the device. I can plug a USB C cable from my computer into the device from the backside. I figured that I would need to get some sort of proximity sensor to detect the presence of my hand, but as I look closer at this USB Type A port breakout board, I notice that the shield has a separate pin from ground. I just assumed that the shield is always connected to the ground pin, but they're actually independent from one another. Out of curiosity, I tested the continuity between the shield pin and ground with and without something plugged into the port. To my surprise, the shield pin gets pulled to ground when I plug in a flash drive or other USB cable! So that is how I'm going to detect whether or not something is plugged in. I don't have to worry about proximity sensors or distance sensors or anything like that. I literally just have to read the state of that shield pin, and I can use that to determine whether or not something is plugged in and then spin the rotor. I'm super excited about this discovery because that's going to simplify this project a whole lot!
This project will need a microcontroller so I’m using an ESP8266 Feather Huzzah with a DC motor + stepper featherwing. I could have also used an Arduino Nano and a separate motor driver. I ordered a little stepper motor for this project to spin the central rotor and it's a good thing I tested it before moving forward because it is definitely too slow. The gearing ratio just doesn't allow it to spin fast enough. So instead I'm going to use just a regular geared DC motor. This one is rated at a much higher RPM and is plenty strong to spin the rotor.
I've got the sprocket installed on the motor and I've got the pulley that goes around and spins the rotor. I did a belt calculator online to try to get the right ratio so that my 200 mm belt would be a perfect fit, and I even left myself a little bit of room in there so that the belt wouldn't be too tight. But my calculations were off because the belt is really just too tight. It's putting way too much friction on that sprocket and the motor is having trouble spinning. Right now, I'm using a pulley that has 92 teeth and that's too big. I thought about trying to stretch the belt a little bit, but the gt2 timing belt is designed to not stretch so that may be a non-starter. The other option is to reprint the pulley with fewer teeth. First, I’ll try printing two more pulleys, one that has 80 teeth and one that has 84 teeth. This will take three hours to see if they are the right size.
Bad news. I overcorrected. The 80-tooth pulley and the 84-tooth pulley are too small. There's just no way I can take up the extra slack that I created so unfortunately, I have to do another three-hour print to print two more.
Now that the 88-tooth and 90-tooth pulleys are done being printed, I think this is going to be much closer. The 88-tooth pulley was a little bit loose, but the 92-tooth pulley fits perfectly, so let's go ahead and test this. I'll plug the motor in and see that it spins freely without all that friction. It's a little slower than I had hoped, but you know what? It's working at this point, so I'm just going to go with it. I drilled a little hole in the side of the rotor, and that will accept a little set screw that will lock it to that rotating hub in the middle.
As far as the microcontroller code, basically, all I do is just read the state of the shield pin, and when it goes low, I can start spinning the rotor. Fortunately, that new pulley size seemed to fix the problem, and this thing is working great. The Star Wars scomp link USB port sits on my desk beside my keyboard. Any time I plug in a flash drive or USB cable, the rotor spins back and forth using a random interval for some variance. I realize this is a super nerdy project that serves no real use, but I had a blast building it and solving all the little problems that arose!
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.
Visit TechForum