Cassette tape speed control
Speed controlling a cassette player sounded like potentially nothing more than a potmeter and done.
It turns out that cassette tape motors are designed to keep constant speed under varying load and varying supply voltage. Which makes a lot of sense, particularly in portable designs where battery voltage will vary, but also in general because mechanical load from the tape does (though note that the tape is not pulled by the reel, but by the capstan/pinch roller beside the head, and the reel just takes up the slack with a slipping construction so that it works at varying speeds. Still, that slipping construction will often be driven by the same motor and still present some varying load), and even audio peaks might contribute(verify).
The player pictured here has a fixed-speed motor of the electromechanical variation, a governor made of weights on the commutator contacts that lift off at the intended speed (it also help it be a flywheel). See also cassette tape motors.
Modulating the power still wins in the end, because you're starving it of speed before that liftoff, though note that this will make it more warbley at low speeds. We'll call it lo-fi, and now it's a feature.
As such, the electronics consists of little more of a transistor, and the code nothing more than reading the dial value (and CV input to allow control directly from a sequencer), mapping to useful range of voltage/speed, and writing that to PWM registers.
The range in which the speed is usefully modulated between full and probably-too-slow is relatively narrow (0.8V of the ~5V range, iirc), but this is one-time calibration for a specific motor.
I'm setting the PWM registers directly, because Arduino analogWrite() is 8-bit, and when only ~15% of the total range does something, 8-bit is a bit granular.
I (arbitrarily) settled on 10-bit PWM is a little more precise and its longer output speed is valid enough for this case due to the motor's momentum. I should experiment with PWM more, because it seems there are better ways to make a tradeoff that works well for this case.
This was a prototype, and it has a few issues:
I should've probably used a 3.3V uC, because it currently uses an Arduino Pro Micro at 5V, and when using the regulator the input needs to be >6V for it to function at all.
Batteries (the thing takes 4 AAs) would quickly dip below that when actually still mostly full, so don't really work. So it's currently working off a 6V wallwart instead.
Also, that important seems to have a tiny capacitor, because when the motor engages, the voltage dips and the Micro resets, to recover a few seconds later.
At 7.5V it's immediate, but you certainly can't do that with batteries, and it makes the effective range for PWMing the motor basically nonexistent.