Machine Design
Result:
We made a multidevice modular scanning system, with the goal to make a full body scanner, in this case using a Kinect.
The scanner is comprised by 3 parts
-The base on which the person rotates -The scanner carry that moves up & down -The control interface made with processing.
The system is controlled with an Arduino Mega through a RAMPS board, and is powered by two power supplies, 12 for the carry motor and 24 for the base motor.
The base supports the weight of the person on a laser cut MDA gear base(for lightweight and sturdiness) on lazy susan bearing mounted on a wooden encasing cut with CNC which also encases the reduction gear system (from 40 to 1) which multiplies the motor par from 1N to 60N. As a heavyweight had to be moved, a NEMA 23 motor with an integrated driver moves the base, connected to the X axis of the RAMPS.
The scanning device carry is made with a laser cut methacrylate piece and aluminium to obtain maximum sturdiness and lightweight. It moves along a rail made out of two 20/40 aluminium profiles which provide the much desired modularity, light weight and stiffness.
We have two configurations, with the motor mounted on the carry or the motor on the base in case when the height is increased the weight of the motor hinders the carry’s movement.
In the mounter motor config.
As the motor had to pull its own weight the motor had to be light, yet strong and precise, we choose the NEMA 17 connected to the RAMPS´ Z axis. Moves the carry thanks to a system made of a timing belt and two 3d printed pieces in HIPS for strength, that hold the profiles together as well. The system has also two endstop sensors to help the system to know where to stop.
In the motor at the bottom config. a pulley is used and the belt is fixed at the carry. This was implemented to minimize the weight at the top of the rails, that can perhaps tilt the whole thing. The weight of the motor can also provide stability to the rail system.
Electronics
Turn table motor
Model: IHSS60-36-30-31
Input voltage: 20-50VDC (36V typical value)
Output shaft diameter: 8mm
Torque: 3Nm
Maximum pulse frequency: 200K
Default communication rate: 57.6Kbps
Continuous current: 4A
Datasheet: https://www.cnc-technics.de/stepper_motoren_integrated.pdf
Since this motor already has a driver, I've decided to wire it directly into an Arduino to test. It took a while to understand what was needed in order for it to work. I only managed after finding this wiring diagram and with the help of the instructor to get the AccelStepper library up and running.
#include <AccelStepper.h>
#define stepPin 2
#define dirPin 4
#define enablePin 6
#define pedPin 8
AccelStepper stepper(1,stepPin,dirPin); // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
void setup()
{
pinMode(enablePin, OUTPUT);
pinMode(pedPin, INPUT);
digitalWrite(enablePin, HIGH);
delayMicroseconds(10);
stepper.setMaxSpeed(1000);
stepper.setSpeed(200);
}
void loop()
{
stepper.runSpeed();
}
Once we managed to get everything in place, it started working.
Since the power supply is 24v, one little addition in this setup was wiring a voltage regulator to power the Arduino board with 5v through the Vin port, and the motor would spin without the need of a computer.
Our timing was really good with this one. A couple of minutes after wiring the motor, the other students arrived with the base plate ready, so we could test the whole setup.
Scanner motor
In order to set up another axis, I've decided to go for an easier way to control both in the future. After searching the lab I found a RAMPs 1.4 with an Arduino 2560.
This together with a 3D printer firmware like Marlin would be great to control the machine with any Gcode sender like Pronterface.
Searching for RAMPs documentation, most I could find was focused on full 3D printers, getting a bit overwhelming from start.
But then I found this really helpful video showing how to do it only for one motor:
After following the instructions to wire the motor with the driver, I've uploaded the firmware to the Arduino and everything seemed ok. But whenever sending a command, the motor would move just a little bit and freeze. Needing a complete reset in order to do the same thing again.
It was only then I realized one of the capacitors of the board was broken.
After getting another board. It started working normally.
Controlling both motors
Since the motors work in different voltages, I had to use two power supplies. One 12 and the other 24v.
After wiring everything and connecting the Arduino to the pc, I was able to control them individually.
Turntable and Construction
Lazy Susan (diameter: 305mm, inner circle: 230mm, holes 4mm, distance to inner circle: 2mm, width ring: 36)
Designing the components with Grasshopper.
Sending the file to the laser cutter.
After some corrections in intensity and speed, the cut seemed to be well done.
At the CNC we were cutting the base and a ring, that will protect the fingers of the big gear.
The
The Carry
M3 hole means Metrica3 and corresponds to 2.5mm diameter You find that here.
raster: allways raster is black select raster and always raster before cuting
acrylic 4mm white
The end stop
We started talking about how the design of the parts should look like, how they should work and everything. After we shared some opinions we started drawing and compairing the design as we worked.
After we agreed on a design we could start 3D printing, laser cutting and testing the parts, like this belt clamp:
Interface
We decided to create a simple interface to control the machine. As we didn't have much time, we used Processing to control the motion of the two axis, but we also need the Skanect program to control the Kinect, those 2 functionalities could be join in the future.
This interface is really simple, it only let you adjust the parameters and the movements of the machine. Here you can see how it looks like:
As you can see, you can adjust the Rotation speed, the vertical Speed, the Maximum Height that will be a percentage of the whole lenght and then the motion. To control the motion you have to options, to move the Z axis more than once while the base rotate one time, or rotate the base multiple times in one single vertical movement.
The default values are settet up, and the limits are set up too.