Wednesday, October 18, 2017

Extracting CAD from PDFs

While creating documentation of a pinout for a project I discovered that what I thought was an image of the connectors for the enclosure I was using actually had a lot more to it than meets the eye.

Source PDF:
Tools Used: Foxit PhantomPDF editor, Inkscape, SolidWorks

Selecting the face view that I wanted revealed that this was an object, not a picture. What's more, there were hidden elements to the object:

It turns out that there were three different views of each of the connector options hidden in the object. I wasn't able to do much with the object in PhantomPDF, so I opened the pdf in Inkscape. From there I was able to make all of the items items visible, and copy the object to a new file and export it to a .png, .svg, and most usefully, a .dxf

This was especially useful because the manufacturer didn't have any CAD models of the enclosure on their website. With a DXF it's a straightforward process to import the data into a SolidWorks sketch. Using the dimensions in the 2D mechanical drawings provided, you can scale the DXF to the correct size. You can then reconstruct a 3D model from the sketches

While in this case (no pun intended) you probably could have created a workable CAD model from the 2D drawings by themselves, it is interesting to see how much data can be extracted from a PDF of a product brochure. It is also possible to get a DXF from this PDF even if the connector view was an image using some contour tracing methods, but this would likely take longer and may not produce as good of a result.

Note: Many manufacturers have user agreements that forbid the extraction of data for the purposes of design reconstruction/reverse engineering. This was not the case with this enclosure at the time of this writing. This post should not be taken as an endorsement of such behavior, and is intended for educational purposes only.

Wednesday, April 27, 2016

Hendo 2.0 Hoverboard

In July of 2015 I started work as the only electrical engineer at Arx Pax, a startup company that makes real hoverboards using magnetic levitation(!!!). It was as much fun and work as you think it would be.

There was a ton of different projects that I worked on there, but the coolest one has to be the Hendo 2.0 hoverboard. For obvious reasons (read: NDA) I can't really talk about this project with the depth that I normally do. Suffice it to say that designing a hoverboard comes with the same challenges that electric vehicle design does.

Our big release event happened on October 21st, 2015-- the same date that Marty McFly travels to and rides a hoverboard in Back to the Future II. I naturally had to wear a Marty McFly costume complete with light up shoes and jacket signed by Back to the Future writer Bob Gale.

I've since moved on to start working at Farasis Energy to work with my good friend Jackson aka Farfle to work on lithium batteries for electric vehicles and other cool stuff. I had a blast working on this project and with the awesome engineering team at Arx Pax, and think that "Hoverboard designer" may have a permanent place on my resume ;)

Since the event there have been some cool videos that have come out that you can check out:
Wired Video and Article about the Hendo 2.0
CNET's Hendo 2.0 Video

Beerpong Robot

Final Results
At the end of our 10 week robotics class we had a robot that could play beerpong! We placed third at the competition, losing to Team 12: "The Hammer" (1st place) in the quarter-finals and then to Team 7: "ZZZZ Best" (2nd) in the sixth or seventh lightning round of the semi-finals.
The robot performed fairly well minus a few software issues mainly related to IR sensor threshold values used for detecting the ping pong ball's position when reloading not suitable for the outdoor sun and lightning round code that was written hastily and not designed to run for multiple rounds without restarting the robot.

The final loading mechanism used a motorized sleeve that acted as a "sealed" door to keep the airflow through the tube more consistent.

You can watch the video below to see how it performs. We also added a defensive ball swatting unit with an Arduino Uno a couple of days before the competition. It used a speaker taped to the bottom of the playing table as a microphone input and would swing the flyswatter back and forth a few times whenever it detected a ball hitting the table. It was surprisingly effective, and the signal response for a ball hitting the table was much higher than any ambient noise that we didn't have any false triggers furing gameplay.

Wiring Diagram
We chose to use Fritzing to do the wiring diagram for the robot to keep things straight when working on everything (it got to be a bit of a ratsnest sometimes)

Robot GUI
The GUI was written in Python and allowed for control of the robot and for displaying data from the various sensors such as the LIDAR and the tachometer for the fan.
There was work for a feature that would display a 3D model of the robot using pythonocc that would adjust the pan and tilt angle to match the robot to make remote control easier.
While we were able to open and view a STEP file of the robot, we took the feature out of the program before it was finished due to a lack of time.

Monday, May 11, 2015

Beerpong Robot Update 5/11/2015

After spending a lot of time wiring and rewiring the robot, we are getting closer to being completely out of "hardware mode" and can spend more time on the software end of things.

We've added some sensors to the loading system for detecting the position of a ping pong ball, which has made the loading process much more simple to code.

We've also started working on a GUI for displaying data from the robot and controlling it remotely using Python and PyQt.

There's still definitely a lot more work to be done, but things are coming together well right now.

Monday, April 27, 2015

Beerpong Robot Update 4/27/2015

We have been hard at work on the Beerpong robot for my Applied Robotics Class and have gone through a couple of changes in the design.

Previously, we had planned on using a gravity fed, revolver style method for loading the ping pong balls into the barrel. But we found that there was a significant loss of power when test firing with the hole on top open, and the robot could only fire a ball halfway across the table at full power to the fan. We considered incorporating a servo actuated lid into the design for the revolver or adding additional "blank" tubes that would act as lids in between the actual tubes, but in the end we decided to go for a different approach, using two tubes that run parallel to the barrel to hold the ping pong balls.

We also did some testing for accuracy, and added a strip of electrical tape to the bottom of the barrel to give the ball some topspin.

After working over the weekend we have most of the mechanical frame assembled, and we verified that we could move the stepper motors and stop them with the limit switches.

Friday, April 17, 2015

DIY Drill Press Mill

In my junior year at OSU I found myself needing a mill frequently and had no way to access one without driving several hours. I came up with a small, lightweight solution to the problem by attaching a small xy table to my drill press and using an aluminum miter jig as a clamp. The results are passable for light duty work, but the setup time isn't the best and you have to feed the pieces slowly in order to keep everything from vibrating too much.

Custom Pump Control System

In winter term of my senior year at OSU I had someone come in to TekBots with a homemade water cooling pump system in a state of disrepair used for cooling a reactor in a research lab and offered to pay me to make it functional again. I replaced the old control system with my own and laser cut a new top plate with a printed label inside and panel mounted switches and potentiometers (the original system had trimmer pots on protoboard). He was pleased enough with my work that he has since come back to me asking me to make three larger systems that each have six pumps. I've built him a working prototype and the parts for the rest of the systems are ordered and waiting for me to design a case to hold them.

Smoothing 3D Prints with Acetone

Several months ago I experimented a bit with smoothing 3d printed ABS parts with Acetone. I tried using an acetone pen used for removing fingernail polish with little (no) success. I then tried using a vapor bath approach, by putting a small pool of acetone in the bottom of a glass jar and holding the part above it by some string. After 5-10 minutes there was some slight smoothing, but not at the level I was hoping for. I then bought a cheap electric stove to heat the acetone in the jar and had much better results. However, even on the very lowest setting the stove was hot enough to boil the acetone almost instantly. This had the effect of smoothing the part in 5-10 seconds but even using the setup outside I wasn't very comfortable about the fumes I was releasing. This definitely falls under the category of "do not try this at home", and especially not inside.

Rover Chassis

During the summer of my internship at Tektronix my roommate was interning at Intel working on a rover. I can't say much about it, but I can show you the chassis frame that I made for him (including the custom shocks I made).

The motors that my friend ended up with were much smaller than the ones I had designed the arms for

The most complete photo I have of the rover:

Thursday, April 16, 2015

Beerpong Robot for Applied Robotics Class

As I only need a few more credits to receive my Bachelors degree in Electrical Engineering, I thought I'd take the applied robotics course, where students work in teams of 3 to create a robot to play a game against the other teams by the end of the term. This year's game is Beerpong, and we've been busy trying to come up with the best way to locate the cups and launch ping pong balls accurately.

We decided to go with a pan/tilt design for aiming using NEMA 17 stepper motors that will allow us to attach many different types of firing mechanisms so we can get good test data for different methods as we progress, and chose a standard spacing for the mounting holes to let us fit 80 20 extruded aluminum if we wanted. Our method for locating the cups is to use the (relatively) cheap LIDAR-Lite module mounted to the turret which will scan back and forth, allowing us to find the closest cup. The other teams that we have talked to are all planning on using a webcam or a Kinect camera and OpenCV for detecting the cups, but we would like to avoid the additional complication of using a computer and are opting to instead keep everything on an embedded system (plus the LIDAR-Lite already has example code for the Arduino written for it, which will dramatically cut down on the time it takes to develop the low level code for our system. We chose to run with the Arduino Mega 2560 so we could make use of the existing libraries for driving stepper motors, servos and other modules that we may decide to use (and you can't ever have too many UART channels).

We verified the pan/tilt design by cutting it out of cardboard before moving to acrylic:

The first method is based on designs used by a lot of professionally made ping pong launchers, using some premade motorized wheels for launching hotwheels style cars:

After putting in a solid weekend of work we had a prototype version to test:

Not long after we got that method working we were discussing with another group and found that they were getting more consistent results by simply attaching a fan to the end of their barrel and blowing the ping pong ball through the barrel. We had to test for ourselves, and printed a test adapter to fit a 38mm fan that I had which is an absolute champ for it's size.

Our latest design will involve a revolving set of tubes for holding the 18 ping pong balls we're allowed while keeping us within the 24"x24"x72" size restriction, and we are aiming at getting a finalized design done by the beginning of next week. We have also ordered some polycarbonate tubing to ensure a more consistent inner diameter than the schedule 40 PVC pipe we were using before (and it also has the benefit of being transparent).

This is the rough approach that we want to go for, we are planning on some improvements over this design including tilting the tubes for the ball holders to a 45 degree angle to make it more compact.
We are almost at the end of the third week of the term, and we will need to have the robot finished for the competition during finals week (week 11).