Would I be able to control such a motor appropriately with a standard board like the arduino? Imagine I were moving 2kg 30centimers, and I want this to react as a human hand would (same speed, start time), would this even be possible?
Would I be able to control such a motor appropriately with a standard board like the arduino? Imagine I were moving 2kg 30centimers, and I want this to react as a human hand would (same speed, start time), would this even be possible?
And controlling it with an arduino is no problem. You've got to main options for the sensor - either an optical tracker that is pointed at the shaft and detects the presence of a striped/marked point which appears once every revolution, or the (cheaper but just as reliable, really) solution of an iR sender/receiver pair monitoring the turning of something (imagine a motor shaft turning a fan. The iR pair would be positioned perpendicular to the fan blades, each time a blade crosses the path of the iR, a signal is generated).
iR is cheaper.
An arduino (or just about any other microcontroller) has an operating frequency way over the rotational speed of the motor. Both optical and iR sensors can easily handle the relatively-slow rotational speed of the shaft. I've used an MC68k from, what, 20 or 30 year old production lines(?) to pull this off. The code is dead simple, just connect the iR/optical output to a counter (which comes built-in in several of the arduino input ports) (you'll need to run it through an inverter first, if you're doing the iR approach) and then loop over the count until it's moved as far as you need it to.
The human hand isn't crazy fast the way you're thinking. If you've ever seen a stepper motor snap from one position to another, that is real acceleration. Basic DC motors typically have lower acceleration than that - their acceleration and speed will vary greatly depending on the model chosen.
2KG is not a light weight. I would have recommended the stepper approach, but you'll need motors about the size of your fist running at 12V and a relatively high current to rotate an object of that size. Basic statics says that the farther away from the point of rotation a weight is applied, the stronger its force. You've got 2KG distributed (I assume) evenly across the 30cm surface, it's going to be quite the weight to turn against gravity, so stepper motors are out.
Servos, which are basically your run-of-the-mill DC motors with their own close-lood feedback system will work. But you'll have better luck with the larger variety of DC motors available online or in your local electronics store.
Thing is - I don't want to skimp on the positioning logic - I need it pretty accurate in space (sub millimeter) and in time. Overshooting the target is fine, I'll correct it with one of those algorithms.
What is the most arduino compatible and accurate measurement method that will handle both use-cases? I should be able to use it both to control my DC motor, and also to record the position of the wheel being turned, even when the motor is switched off?
It was a ball mouse which featured two scroll wheels, meaning we could recieve feedback from 4 DC motors using a standard USB interface & mouse driver.
We used the mouse buttons as triggers to mark the rotation stop points for use in the initialization routine.
The motors we ended up using were high end electric RC car motors. They were the highest torque in the smallest package we could realistically get that still fitted our budget.