Telepresence Robot Project
Today's project from Eric Lee is a simple, yet cool, Telepresence Robot, that includes 3D printing, ASP.Net, Arduino and more...
I’m teaching a high school astronomy class this year (which I thoroughly enjoy, by the way!), and one of my students lives a couple hours away and uses Skype to attend the class sessions. The class features a lot of group discussion and it’s kind of difficult for this student to follow what’s going on when all he can see on the screen is me. I thought, “wouldn’t it be great if the student could rotate the camera around to see who’s talking?”
After contemplating that for a few minutes I realized that I could actually build something to enable that pretty quickly. Most of my projects end up taking weeks of calendar time to complete (a couple hours here, a couple hours there, wait for an order to get shipped, etc.) but this one actually came together over the course of one weekend with parts I had on hand, just like I’ve always dreamed a project should go.
Here’s what the finished project looks like:
I usually run the Skype session with the student on my smartphone. I wanted a device that would have these features:
- Hold my phone upright in a secure fashion
- Be able to rotate the phone 360 degrees
- Allow the student to remotely control the rotation of the device
- Be reasonably responsive to rotation commands
- Operate silently so it doesn’t distract the class
- Be powered from a standard USB port or charger.
I have a 3D printer so building the physical body wasn’t a problem. I designed a sort of sleeve into which I could insert my phone, which would be attached to the shaft of a motor in the base of the device.
I designed the body of the telepresence robot in Fusion 360. As an aside, I highly recommend Fusion 360 for designing physical objects where you might need to iterate on the proper physical size, because you can easily go back and change just the dimensions you need to tweak without rebuilding the whole object. You can get a free hobbyist license as long as you’re not using it for profit.
I used stripboard to solder the electronics together, but regular perfboard would work just as well. I based the circuit on this Adafruit tutorial diagram, but using a Photon instead of an Arduino. Power to the L293D comes from the VIN pin on the Photon which is powered directly from the USB port. The layout needs to be kind of compact to fit in the base but it wasn’t hard to work out a good strategy after a little thought.
The code for the Photon can be found in the GitHub repository, but it’s pretty simple. Here it is:
My day job uses the Microsoft stack so the fastest route for me to get to a functional web site was to whip up something using ASP.NET Core. If you’re more comfortable with Node or whatever, that’s fine too. The full source code for the remote control web site can be found in the GitHub repository, but here are the important bits minus all the boilerplate code.
I hosted the web site in Azure but it’s using no special services so it can be hosted pretty much anywhere that can host ASP.NET Core apps. Total response time, from clicking one of the buttons on the web site to having the device rotate the phone, is typically under one second, which is good enough for my purposes.
That’s all you need to an internet-enabled device up and running. It doesn’t get much simpler than that!