I'm enamored with the use of the ultrasonic range sensor for Blame. It currently gives me a very solid indication of anything within 5 feet. The active IR sensors can theoretically detect up to 5 feet, but they really get noisy out beyond 4 feet.
For Look, Scott and I chose passive IR motion sensors because we wanted a larger range, plus Look moves its eyes at motion now, rather than just detection of someone.
For Sycophant, ultrasonic range sensors would have been bad because of 1) clicking noise 2) inter-sensor interference and 3) latency (the ultrasonic sensors need about 0.3 second to get a good reading). Sycophant needs to move down the track really fast when it detects someone, and it is continuously talking.
For Blame, ultrasound works because 1) the clicking is kind of cool and creepy 2) I can turn the sensor off when the work is talking and 3) people might not get too close to the swinging arm, so a long distance is needed and 4) if people crowd around it, the long distance of sensing is less of a problem because it can accuse anyone in the crowd, then move to someone else.
On PWM, currently I am using the 1:4 prescalar on TMR0, with a 4khz internal clock. The on period of the PWM begins at 0xC0. This moves the arm a little fast, but moving the on period to begin at 0xD0 makes the arm a bit weak. I might have to re-jigger the prescalar to 1:2 then drop the on period length to get a solid yet slower movement.