The system works off of rotary encoders. Using an encoder and software program to interpolate the coordinates into 3D space an Arduino reads each encoder and does the raw math required to calculate the tip location. When you turn on the device, the arm is "parked" in a known location and each encoder is at a known angle. Once the system is started, any change in the arm position results in changes to the 4 encoders. One pivot in the base, a "shoulder", "Elbow" and "Wrist" joint are all connected to fixed length arms. The Arduino sends the X,Y, and Z coordinates via serial to a PC running a software program operating in "processing". The serial data is converted into a virtual 3D space where I can save points on surfaces, locate holes, create flat features and generally bring what ever I need into a virtual model space.
Modeling the assembly and determining the dimensions of a usable arm was the first task. Followed closely behind with the work surrounding the math to determine where in the three dimensional space the tip would end up. Wanting to truly understand the program and math behind the calculation was a bake my own solution. Sometimes the hardest part of a problem is finding the right questions to ask. I went pretty far down the Google rabbit hole before coming up with the KEY questions and formulas needed to solve the math problems. Forward kinematics and end effector calculations were the correct path. Basic trig... Yey? Working with some basics described on Robotshop's site I slowly built the correct formula's that calculated the tip location.
To Be Continued....
I also needed a way to export point cloud data. My software of choice is able to import a tab-delimited text file that consists of X,Y,Z coordinates of any point, and with the Processing sketch it is pretty easy to export a .TXT file with each point I select on a part. As this point I have a working CMM arm and its a matter of software changes to best suit my work flow as well as finalizing the hardware enclosures for various items such as the Arduino, cable management and panel mount cable connections. During the next while I will be adding features to the system with the initial wish list as follows:
When measuring physical objects sometimes calipers, squares, rulers and height gauges feel inadequate and accuracy is questionable . I wanted a tool that can pick up any point in a 3 dimensional space and easily import into my CAD software of choice. I found an design by Nikolaj Møbius from FabLab RUC that got me pointed in the right direction for a cheap alternative to a $3000 want to have "problem". A few other makers have made arms of various "quality" but there was no definitive guide that I could find. I started out modeling various methods of mounting the encoders and 3D printed 3 or 4 variations before coming up with a suitable setup that was ridged and repetitive in positioning.
CCM Arm coordinate measuring machine