stuck on what type of sensor to use here.


These three cams rock back and forth, they don't rotate fully. You can see the two positions they can be in. I need some way to know what position they are in. An encoder at the motor only tells me direction and speed.

Something like a hollow shaft potentiometer but I can't find anything that's not super expensive or the right size. Any other ideas how I can track the position? Worse case I might put an accelerometer/gyro combo sensor on each cam and try to track it that way but that's a little pricey and I'm not sure ultimately how accurate it will be if the entire robot will be moving around and experiencing other forces on it.

isnt the gfx just showing one of the 2 positions? maybe an ultrasonic sensor (distance of an object), if one cam faces another in one position, and in the other it doesnt

The image on the left is all the way down in one direction and the other two are all the way in the other. It rotates so it can be in any position between those two points. The total range is about 90 degrees, 45 in each direction.

Proximity sensor picking up the bolt head or other metal part?

Proximity sensor is not a bad idea.

The other thing I thought about is a Hall Effect Sensor. I would need it to slide past some type of variable magnet so that at each point it would have a different amount of magnetism and I would know where the cam is. I'm having a hell of a time finding a magnet with different magnetic strengths on different points on it. Any ideas? Are Hall Effect sensors used for position or just speed/direction?

For something like this you would generally have a sensor at key positions of the travel (say the beginning and the end of the cam rotation). The start of the movement should pass the first detection point to confirm a movement, a timer is then started and if the second detection point is not reached within a predetermined time then something has gone wrong.

This scheme may not work in your case as I am not sure why you are trying to detect the movement. If you want to know the exact (actual) position of the movement, then you need a shaft encoder of some sort.

The cams are driving different parts of a robots arm. When one cam rocks up it pulls the shoulder, when another rocks up it pulls the bicep, etc. To coordinate the movements I need to know where the arm is. I haven't been able to find any shaft encoders that look like they'll fit and be affordable.

Shaft encoders don't need to be directly on the shaft that is being measured. You can drive them through gears or a belt (toothed preferably to minimise slippage) from the main shaft onto a secondary shaft in a more conviennt location.

If you have less than 360 dgeree rotation then maybe a pot will be sufficient - measure the resistance/voltage on the pot to infer the angle - but accuracy may be an issue if you are trying to accuratley position the robot arm.