Skip to content

Final Project - Original Design

This is the original and introduction of the Final Project. Things have changed so much as I have worked on this project I’ve started a similiar but different page. But I wanted to keep this page to help understand where I started from.

I think for projects such as this, watching the process and progress is much more educational than the final device.

Project Digitialzing Arm

A digitizing arm for metrology and reverse engineering, using a touch probe.

Introduction

I’ve been interested in metrology for a number of years now. I find the precision and accuracy needed to build high quality parts, and to ensure that they meet stringent requirements fascinating. A modern method of measuring parts is using a Coordinate Measuring Machine (CMM). CMM’s are highly accurate, but also highly expensive. They’re common in the manufacturing world and labs, but less common in small shops. I would like to create a small digitizing arm that can be used to accurately measure and reverse engineer parts.

There are two common types of CMM’s. One is a typically gantry style, that looks very similar to a wood router. Instead of having a spindle that cuts, it has a probe that touches and takes measurements of the specimen. The specimen is placed inside the CMM and measured within. This makes the CMM limited to the extent of the part that can fit within. They are usually built on granite surface plates, use air bearings, and move in a cartesian coordinate system (X, Y, Z plane). The sensors are glass scales. They are high accuracy, but are permanent installations (most require air compressor, some now do not require air.) with a high weight (they’re built on granite surface plates.) and high cost. ($70,000 and up.)

The other form is an arm style (sometimes referred too by a “Faro Arm” (though Faro is manufacturer of this arm.) This is a kinematic system that looks more like an industrial robot, with arms that have multiple degrees of freedom. Digitizing arms are more flexible in what they can measure, are typically based on rotary sensors and polar coordinate system. They typically have a low weight, the ability to be transportable, and can be moved while in use so they can be used to measure very large objects such as cars. Their accuracy tends to be less than a gantry style CMM, but they also cost less ($8000 and up.)

This project is designed to build a digitizing arm, and to see with a relatively small budget, how accurate they can be made. High accuracy is unlikely, but I consider this a learning enviroment, and from starting we can build a higher accuracy arm.

Digitizing Arm

Rough Sketch

Digitizing Arm Sketch

Shown: Blue = printed part, beige = Omron Rotary Encoders, Black = Carbon Fiber rods, probe and probe stylus shown at the end of the connected rods. Blue box on side is to hold electronics and the interface. 3d sketch made in OpenSCAD. Really ugly OpenSCAD code for this part can be found here: Arm

Design

This digitizing arm consists of 3 arms, each connected by a moveable joint attached to a rotating base, and with a touch probe attached to the end of the last arm. The joints are connected to quadrature rotary encoders which give an angular position of each joint. There is also a rotary encoder in the base, which allows for the rotary position of the arm to be captured. Finally, there will be a probe that detects any contacts with the part being measured. The data will be captured by an Arduino or similar microcontroller, and sent to a computer in order to capture a point cloud, that can then later be turned into a 3d model.

The arms will be created from a 0.300” (7.65 mm) carbon fiber arrow shaft. One of the benefits of carbon fiber is not just it’s stiffness and strength, but also, it’s low coefficient of thermal expansion.

The arm connectors will likely be 3d printed, and will consist of two pieces for each arm. One piece will hold the encoder, as well as connect to the previous rod. The other part will connect to the shaft of the encoder, and attach to another rod for each subsequent arm.

The base of the unit itself will consist of multiple 3d printed parts, and possibly a laser cut/machined wood base. This will have a fixed stand, with another encoder attached. The encoder will support a plate that holds the first arm rod, and the encoder for the arm. It will likely need an extra and larger bearing of some type around this entire base to help support and smooth the rotation of the arm. This is due to the weight of the entire arm being supported by the encoder without the extra bearing.

There will be a small probe tip placed at the end of the arm to contact the part.

Finally, there will be an electronics enclosure that will have the wiring from the probe, encoders, etc. going in, and have the connection to power and/or computer coming out. This will either be 3d printed or laser cut out of thin plywood (maybe even machined.)

Design Goals:

This unit will be designed to be accurate, repeatable, and inexpensive. I also want the unit to be sturdy, and to be able to take abuse from inexperience users. The unit needs to have an accuracy of 0.006” (0.150 mm) or greater, and a repeatability of 0.003” or better. These are actually fairly stringent for a digitizer arm, and even more so for a DIY arm. However, this is a target, and in reality, if I can get anywhere near these goals, I will be happy.

In order to reach these goals, I’ll have to ensure that the stiffness of the arms, base and all the connections are very rigid. Any flex can be a major source of error, and with multiple connections, the error of one connection will be magnified to the next. Carbon fiber rods will help, but the 0.300” diameter may not be large enough over the given length. This is also a reason to keep weight down to a minimum on the end of the arm. The most likely issue will be the 3d printed connectors and the base of the unit. Because of their being made of plastic, they’ll need to be well designed and printed with large infill. Even this may not be enough to ensure their rigidity.

In order to maintain repeatability, especially if the unit is being moved, I will try and avoid using any wood in this project due to its high propensity to be influenced by humidity and temperature. Plastics can also be affected by humidity, but not to the same extent as non-stabilized wood you’re typically use for this type of project.

Designs and Prototypes

The below are images of some of the different design iterations of the project.

arm two rod experimental arm0

another arm design closer to final design

This design is getting close to the final design.

super close to final design

And the First Prototype

prototype 1

latest prototype

Notes and Challenges for Arm

While designing this part and sketching it out, I thought of a number things, such as:

  • Will need a good way to keep base down. High weight is obvious, but would like to keep weight down. Large flat base would also work, but would cause issues with usage. Could always bolt it to a surface plate, but that makes It less portable. Maybe suction cups? Good old C-clamps?

  • Rotary Encoder wires are about 5mm in diameter with sheathes. Won’t fit through current small diameter carbon fiber tubing. Would need to invest /re-engineer for much larger tubing. The wiring is going to be very unclean. I could make a sleeve around the entire part to hide wiring, but this is a less elegant solution, but probably best solution given constraints.

  • Design currently relies on the internal bearings of the Rotary Encoders for movement. This could cause multiple issues. First, relying on these bearings to support weight of the entire system. Second, relying on bearings (which retain the encoding wheel in precise position) could cause movement of wheel and thus inaccuracy of measurements. If we switch away from rotary encoders (optical mouse sensors), then we need to add bearings.

  • Adding the above bearings of rotary encoder may increase weight. The bottom base, x-y encoder is likely to need a larger bearing for support to keep it from leaning.

  • The specific Omron encoders are now very expensive, at around $500 for a 1000 ppr (pulse per revolution, essentially a measurement of resolution.) It’s likely I will use a cheap Chinese knockoff of these style optical encoders that are closer to $30 a piece.

  • The probe on the end of the arm is currently very large based on prototypes. To be more useful, (to fit in smaller areas without the probe body getting in the way) it would be necessary to shrink the probe body.

  • Moving the probe tip is a large issue. First, simple probes are moved in 1 axis at a time, and this allows easy interpolation of point. With multi-axis/polar movement of probe, will be much more difficult to determine where the probe tip actually makes contact. With cartesian CMM’s, probes usually deal with multi-axis movement by the direction they retreat from the part after triggering probe sensor. This movement after the probe goes back to un-triggered helps the software determine which way to compensate for the probe tip. This solution, however, requires better programming skills than I have.

Other Challenges

Software, software, software. I can not program, so the idea of getting the data from the arm into software is an unknown for me. And to be able to accurately capture this data in order to turn it into a 3d model map seems incredibly difficult to me. In the same vein, this is not an cartesian coordinate system (XYZ) with fairly simple way to determine location, but rather is going to require an understanding of kinematics and polar coordinate math. Yikes!

There are going to be questions concerning the mechanics and geometry of the arms. May require offsetting arms side to side. Need to make sure there is no slop in bearings (regardless of using encoders for the bearings or not.) Also, the strength of 3d printed parts to not allow flex of the arms. All of these will can create inaccuracy.

Finally; unknown unknowns. I don’t know what I don’t know yet. And I don’t know a lot.

Manufacturing Processes

3d printing is an obvious large part of the physical parts of this build. The most likely parts that will be 3d printed are the rod and arm connectors, the swivel base, some of the touch probe internal parts.

There will also be CNC machined parts (most likely made from Aluminum or steel). Especially the base of the unit, and the body of the touch probe. Some of the internal and precise touch probe parts will likely be machined from plastic, as 3d printing may not afford the necessary tolerances.

The electronics will be based around a modified arduino board and/or Attiny85 boards, and be milled out of copper clad pcb. I’ll be soldering them and preparing them to be connecting to the sensors as well as one another.

The sensors for the arm positions are based off rotary encoders, but I am most likely going to attempt to create other sensors to replace/accentuate the rotary encoders. The sensor for the touch probe is going to be a kinematic, mechanical switch.

The output will be data that is sent through both an LED’s (for a “touch” on the probe tip). The data of the touch, and relative location of the probe will be displayed on an small LCD.

The data for the arm position and probe points will be output to a local computer, where it will be translated via software into Cartesian coordinates and mapped into a 3d environment as point cloud.

Material and Parts:

DIY parts:

Many parts can be 3d printed and CNC milled.

  • Base, arm connections, encoder holders, probe section, etc.

Prototype of the encoder and rod holder. (For more info, see Week 1 Worklog)

Finished print

Prototype of the ball bearing print. I used POM ball bearings, and this worked better than I expected. (I was expecting it to be rather rough. And it was, but it wasn’t the worst ball bearing I’ve seen.)

Design of ball bearing system

(For more info, see Week 1 Worklog and Week 3 Worklog

Off the Shelf Parts:

For the Digitizing Arm:

  • 4 Omron Incremental Rotary Encoders 1000 ppr (E6B2-CWZ6C) (I have 2 of these, I’m 99% sure they’re counterfeit. I bought them off ebay a few years ago for about $30 each. A google search just revealed they are being sold for $530 from Newark.) https://www.ia.omron.com/product/item/2450/
  • Carbon Fiber Arrow Shaft (0.300” (7.65mm) diameter, 31” length)– cheap after hunting season.
  • 50 POM ball bearings (for ball bearing system on base.)
  • assorted hardware, set screws, nuts/bolts (30 m3 x 8mm SHCS, 20, 6-32 x 1/8” set screws).
  • 4 Attiny85’s and support electronics for encoder positioning data collection.
  • One AVR and support electronics for DIY arduino

Electronics:

There are 4 rotary encoders, which require multiple inputs due to quadrature setup. (maybe more if we use the 1 rev counter). The plan was to use an Arduino, but this will quickly max out the inputs available. An Arduino Mega would work, but there are other options. A common option is a MCP23017 I2C GPIO expander. With this chip, you can use I2C to allow for more inputs to an Arduino.

The Touch probe will have at least 1 signal connection, and possibly 3 if two buttons are included. These will be also connected with an arduino for signal connection.

It may be necessary to use ATTiny85’s to connect to each encoder, and then connect each of these to a motherboard arduino. I’m still researching and trying to figure out what methods to use here. Which one of these methods will work? Which will be the most efficient, which will be the most reliable, etc.

See Week 13 for more information on Rotary Encoder Sensors

See Week 14 for more information on the network system that will send sensor data over i2c.

netwoooork

And I finally came across the final board that I’ll be using, a SAMD21 board.

final samd21)

Building the electronics.

I decided the best way for the electronics was to create a number of attiny412 boards that would take rotary encoder data (or the other input data) at each sensor, and then forward this data to a final system (maybe samd11c14a or Raspi).

Prospective boards:

One of the first versions of the board.

attiny412 neopixel board attiny412 neopixel board

One of the latest versions of the board:

Attiny Neopixel v4 - F.Cu Attiny Neopixel v4 Eco2_user

This board should be able to catch the quadrature data from a rotary encoder (pins A and B, with the 5v and GND). I’ll be working more on this during embedded programming and input sensors week. (UPDATE: NOPE. Having huge problems getting rotary encoder working with interrupts.) See Week 13

Software:

Your guess is as good as mine. Though probably Processing, as a number of other similar designs and projects are using processing to seemingly good effect. I’ve never used Processing before, so this will be another hurdle to leap.

The software should be able to take data from the digitizing arm and convert it to cartesian coordinates. As data come in through the electrical connection, touches and touch probe will trigger the software to grab the data from each of the rotary encoders, and their position. The software will then convert the data from the arm’s rotational positions for each joint of the arm (in a polar coordinate system) and then convert these into positions in a cartesian coordinate system. (That sounds easy! I have no idea what I’m doing!)

The data should then hopefully be able to be mapped into a 3d space and show the location of each “touches” of the probe and provide a representation of these in a 3d point cloud, that can then be used for further processing in other software.

Right now, I have no idea how to do any of this.

Using Processing

The below was my first 2d sketch using Processing that grabbed data from the encoders, used my samd21 board and sent it to a PC over USB serial, and used that data to display the position of the arms.

processing 3d sketch

And then I moved on to working on an arm in 3d.

processing 3d sketch 2

Testing

As with any type of metrology equipment, if it’s not tested and calibrated, it’s not much use. I will need to find a way to test the accuracy and precision (repeatability) of this arm when it is finished.

While I’m still to think of proper ways to do this, I believe I can start by testing with gage blocks of known lengths, and ball gages of known sizes, as well as using 1-2-3 blocks and other precision equipment to test with. This will at least give me some indication of basic accuracy. Further tests will be created for examining other aspects of the arm at a later date.

Future Goals

These are things that I’m sure I will not have time to do, but things I would really like to happen (or at least experiment) at a later date.

  • Better Software
  • Extra degree of freedom at base of probe tip to allow it to rotate.
  • Moveable Base – put optical mouse in base, to allow for measurements around a larger part (would necessitate a large surface plate for high accuracy of course.)
  • 3d depth camera on arm to allow for more precise measurements using a depth camera and 3d scanning.
  • Currently as designed, the arm is not self-supporting. It would be nice to have this feature. Maybe add springs? (think desk lamp)
  • higher accuracy, less inexpensive system to capture positions of arms than industrial/commercial rotary encoders.
  • Strain Gauge load cell used for the touch probe. This should allow higher accuracy, and simpler design. But requires more complex electronics, and has a number of design challenges of it’s own.

Prior Art

I have to say; before doing any research, I started sketching the design based off of what I knew of rotary encoders and digitizing arms/cmm’s/touch probes. You’re not supposed to do that, but I did it anyways. I got excited and I have fun designing things. Afterwards I started to look for prior art and other DIY digitizer arms. Imagine my embarrassment when one of the very first to appear was one from a previous Fab Academy. Oh well.

Digitizing Arms prior designs:

https://fablab.ruc.dk/diy-digitizer/

http://blog.dzl.dk/2018/08/21/3d-digitizer/

https://www.thingiverse.com/thing:2882172

  • I like the way that he added the weight, as well as the large ball bearing around the top of the base. I had previously thought of the bearing, but the weight is a good idea.

https://forum.makerforums.info/t/ccm-digitizing-arm-5-axis-faro-arm/78981

Touch Probe Prior Art

Touch probe for small and diy CNC machines are common projects. I had previously created a touch probe, and so was aware of many of the designs already out there. These are some of the many resources available, and from which I have gotten information and ideas on how to design and construct my touch probe.

A smaller probe using piezo’s: https://www.youtube.com/watch?v=xUk5MslH_nk&t=163s

Found this late, but found it: A fablab digitizing arm project http://fab.cba.mit.edu/classes/863.17/Architecture/people/djmm/0.html

(And his DIY capacitive sensor, which apparently didn’t work: http://fab.cba.mit.edu/classes/863.17/Architecture/people/djmm/10.html)

Ricardo Marques is also building a CMM this year: https://fabacademy.org/2022/labs/fct/students/ricardo-marques/projects/FinalProject/Week10/

“Arm Style” CNC Mill http://fab.cba.mit.edu/classes/863.12/people/will/final/index.html

Digitizer Tutorial http://fab.cba.mit.edu/classes/863.13/tutorials/DigitizerTutorial.html (it uses Rhino for data capture, and has a foot pedal, and seems to use a HID)

Just an overview of scanning https://fab.cba.mit.edu/classes/865.21/topics/scanning/02_mechanical.html

Rotary Encoder References

Arduino Info on Rotary Encoders, contains a lot of information: https://playground.arduino.cc/Main/RotaryEncoders/

Helpful introduction to encoders: https://www.bristolwatch.com/arduino/arduino2.htm

More helpful encoder info: https://brendaabell.com/2014/02/17/arduino-series-working-with-an-optical-encoder/

very helpful, my code comes from here: https://forum.arduino.cc/t/rotary-encoder-using-interrupts/469066/10


Last update: June 15, 2022