Camera Capabilities Unlocked From A Mouse

Small camera with greyscale image

There is a point where taking technology for granted hides some of the incredible capabilities of seemingly simple devices. Optical mice are a great example of this principle, using what are more or less entirely self-contained cameras just for moving the cursor across your screen. Don’t believe us? Check out this camera made from an old optical mouse from [Dycus]!

For those unfamiliar with optical mice, the sensor used for tracking movement, like a camera, is just an array of photosensitive sensors. This allows a simple on-board microcontroller to convert the small changes from the visual sensor into acceleration/movement information to be sent to the computer.

Proving how capable these sensors can truly be, [Dycus]’s camera manages a whole 30×30 array of picture quality. Along with glorious greyscale, the pictures achieved from such a camera are more than recognizable. Putting together the camera didn’t even require anything crazy beyond the sensor itself. What appears to be a Teensy LC board, basic buttons, and a small screen are essentially everything required to replicate the camera’s functionality. Pictures, both standard and “panoramic”, can be viewed in a variety of color palettes stored on board. Along with a surprisingly impressive feature set, the idea is impressive.

Limitations are often the mother of innovation, no matter if self-imposed or not, as seen here. However, [Dycus] still had a whole 30×30 array to photograph. What about a single pixel? Let’s make it even harder; we can’t look directly at the subject! This is exactly what was done here in this impressive demonstration of clever engineering.

Thanks to JohnU and Thinkerer for the tip!

21 thoughts on “Camera Capabilities Unlocked From A Mouse

      1. Should be no problem for you to run a 16×16 sensor grid with these and have an FPGA read them. Your mind is the limit, but so is your freedom if they dislike your academic curiosity.

    1. Thank you for pointing this out. This could be a very cheap high speed camera, for which this community can certainly find a use for. Filming 100 ms at 9 kHz is about the RAM of an ESP32/RP2350 (500 kB), which is 30 seconds at 30 fps. If you feel up for it, build it :)

  1. In the 1990s this was an Int 33 system function call. In DOS, even.
    Not a standalone camera though :-)
    I wonder if modern Windows even still supports it, or even if the notion of a system call is still a thing.

    1. Not via interrupts, but programs make calls to the OS via the system APIs. Basically the application has a list of functions it wants to call with their names, and when the OS loads the program, it supplies the pointers to those functions, which are in the same memory space as the application. I’m not sure how the handover to the OS context works.

      1. Not via interrupts … I’m not sure how the handover to the OS context works.

        typically, the program loads a service number and arguments into registers and generates a trap which is [wait for it] a type of interrupt.

  2. A few thoughts:

    (a) How is this not an awesome “component abuse” candidate?

    (b) The end-result evokes memories of 80’s “hacks” that turned decapped DRAMs into image sensors

    (c) This is simply cool. Well done.

  3. people also forget that the mouse sensor has a dsp right on the chip. this offloads the heavy math for point tracking from the mcu that handles being a mouse. many modern sensors this is programmed at the factory and essentially set in stone, but on some of the older ones you can program the dsp to serve your own needs. ms sidewinder joysticks used the same sensor on their joysticks of the late ’90s early ’00s. so the possibilities for these sensors far exceeds mouseness, joystickness or even cameraness. maybe that should be the next had challenge.

    1. and first sensor that started it all, the HP->Agilent->Avago HDNS-2000 chip from 1999 Microsoft IntelliMouse Optical had no DSP at all! DSP was too costly, slow and impractical in 1999 so the mad lads went Analog Computing:

      Travis Blalock Oral History https://www.youtube.com/watch?v=wmqa9XJED-Q https://archive.computerhistory.org/resources/access/text/2018/10/102717371-05-01-acc.pdf

      “each array element had nearest neighbor connectivity so you would calculate nine correlations, an autocorrelation and eight cross-correlations, with each of your eight nearest neighbors, the diagonals and the perpendicular, and then you could interpolate in correlation space where the best fit was.”

      “And the reason we did difference squared instead of multiplication is because in the analog domain I could implement a difference-squared circuit with six transistors and so I was like “Okay, six transistors. I can’t do multiplication that cheaply so sold, difference squared, that’s how we’re going to do it.”

      “little chip running in the 0.8 micron CMOS could do the equivalent operations per second to 1-1/2 giga operations per second and it was doing this for under 200 milliwatts, nothing you could have approached at that time in the digital domain.”

Leave a Reply to rasz_plCancel reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.