loading

This instructable is for making an optical USB mouse into a pen style Mousepen. Or Penmouse.

My starting point was from seeing this instructable but wanting to improve the mechanical design a little and add the left-right click switches back.

It's also an entry in the "Before and After" up-cycling competition:

Before: Cheap plastic mouse with failing scroll-wheel.

After: Useful digital art tool that doesn't cost a fortune!

Step 1: Reason for the Project

Freehand detailed drawing/artwork with a mouse is harder work than with a pencil. I usually end up sketching with a pencil/pen and scanning the result in, before continuing digitally from there.

I sat and thought about why. Why is drawing with a mouse hard? The two main blockages I came up with were ...

1) The area the mouse roams over.

On paper: Size is size. You can traverse the whole A4/A3 sheet to fit the drawing in.

With a mouse: My screen is 540mm diagonal, yet I'm drawing in a box around 45mm diagonal. I didn't realize it was so tiny. That is like trying to draw on a large postage stamp. It means that tiny errors, tremors, sticking/mistracking of the mouse are magnified.

2) The muscles used to move the mouse.

When writing/drawing on paper: Fine control comes from flexing two fingers and a thumb, medium control from wrist/hand rotation, and coarse control from arm movement.

When holding a mouse: Your fingers are usually in a locked position for operating buttons, and sprawled over the mouse. This takes away the finest level of control. Your wrist and arm do most of the work. It's like when a child writes/draws with a pen held in a fist!

Step 2: Fixing the Problems

The area the mouse roams over can be fixed in software, by changing the speed response. But holding the mouse more like a pen would help things along on the fine control front.

I used a cheap optical mouse (£2) and a bingo marker pen to create a pen-mouse/mouse-pen. To keep the sensor flat to the paper, even when the pen is angled naturally, I needed a flexible joint -- and found one in the form of a camera-stand for an old NISIS USB camera. This allows the pen body to be moved with the fingers like a real pen.

Step 3: Parts

  • HM3303A Optical Mouse, unbranded £2
  • Bingo Marker (Fat pen)
  • Bic Biro (Skinny pen)
  • 38 SWG Enamelled copper wire
  • 2 x momentary push buttons
  • 3 x nylon washers
  • Polymorph
  • Scotch Tape
  • PVA glue
  • Superglue

Step 4: Disassemble Stand/Fit Pen Body

The stand has a lead weight in the bottom, remove this. Also slacken off the two screws holding the metal plate to allow the joint to pivot easier, in normal use for the camera this joint is stiff and "positionable". Loosen it so it slides more freely.

The camera holder comes off if you release the plastic peg inside it.

The diameter of this grey peg fits neatly into a cheap biro, which in turn fits into the open end of the bingo marker. So a small "adaptor" was made from a piece of a biro pen.

Step 5: Chop Up the Mouse

Well, probably note down all the connections and the circuit diagram first, otherwise it will never work again :)

There were two ways to trim the pcb, I chose the one which left all the needed components and USB attachment point on the weird triangular piece. The mouse buttons and scroll wheel are gone either way.

The two electrolytic capacitors stand too tall. I de-soldered these and wired them back in, insulating the legs and gluing them down with PVA glue.

Cover the optical sensor! I used Scotch Tape to stop dust getting into the pinhole sensor.

The board was attacked with a drill, and the sawn/sanded to clean up the edges. Although many tracks were cut through, only a ground line (0v) needed to be replaced with a short wire link. All other lost tracks were redundant OR went to the switches. This was good luck :)

The scroll wheel and middle mouse button were abandoned. Only left and right will be implemented.

Step 6: Rebuild Base

The optical block -- without modification -- drops in to place, and I used the base of the stand as a template to work out the cutting pattern/template for cutting the mouse's base up (later).

To wire the buttons down into the body, I drilled a fine hole through the plastic of the joint, and threaded a wire through to check clear passage.

Step 7: Build Pen Body

The position of the two buttons was found by holding the device, and seeing where my index finger naturally lies.

That's the "left" click. Above that, by about 0.75" is the "right" click button.

The buttons are mounted into the pen body: Small holes allow the actuators through, larger holes, which are a tight fit on the switch body, allow them to push in from the back.

A third hole, between the switches, takes the wiring into the pen body.

These switches are superglued in place.

Step 8: Wire in the Switches

The enamelled copper wire is used to connect one side (of both switches) to ground, and one wire from each switch to the left and right mouse button tracks.

These wires are then threaded through the pen body, through the joint, and coiled up onto the PCB, where they are soldered down, and taped in place.

Step 9: Securing Things and Finishing Off

The original mouse base was cut closely to match the shape of the base, using the template from above.

The buttons are very exposed at the back, so a short piece of plastic tube was bonded over to protect them. This also helps keep the pen pointing "forward" when held.

The base originally skated on four cheap shiny stick-on labels. These were lost in the mouse-base butchery. So I used three nylon (slippy) washers glued in place.

The mouse base and case are closed together, almost neatly, with Polymorph mouldable plastic, which was extruded into a long sausage and pressed into place before smoothing it over.

Step 10: Software Adjustments 1

I use this device under Linux, with GIMP (bitmap) and Karbon (vector) tools. No settings are needed in the applications, but to slow the mouse "speed" right down, while keeping resolution needs a tweak.

Additionally, this tweak was put into a "udev" rule, so that it is applied whenever this mouse is plugged in.

Note that this tweak only affects the named mouse device, so you can use a regular system mouse AS WELL as this device, they both work.

Manual adjustment/first time setup :-

I use the device name, not the id number, as the name of the device is fixed in hardware, and assigned id numbers may change!

Find the NAME of your mousepen device, by typing

xinput list

Example output

 Virtual core pointer                         id=2    [master pointer  (3)]
   Virtual core XTEST pointer               id=4    [slave  pointer  (2)]
   SIGMACHIP Usb Mouse                      id=10   [slave  pointer  (2)] <-- system mouse
   HID 04f3:0103                            id=9    [slave  pointer  (2)]
    USB OPTICAL MOUSE                       id=11   [slave  pointer  (2)] <-- the mousepen
 Virtual core keyboard                        id=3    [master keyboard (2)]
     Virtual core XTEST keyboard              id=5    [slave  keyboard (3)]
     Power Button                             id=6    [slave  keyboard (3)]
     Power Button                             id=7    [slave  keyboard (3)]
     HID 04f3:0103                            id=8    [slave  keyboard (3)]

Note there is a spurious space before "USB OPTICAL MOUSE", yes, you actually need that space if you have the same cheap mouse I used!

Then get the name of properties you can alter with

xinput list-props " USB OPTICAL MOUSE"

Example output

Device ' USB OPTICAL MOUSE':
        Device Enabled (128):   1
        Coordinate Transformation Matrix (130): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (250):     0
        Device Accel Constant Deceleration (251):       1.000000 <---------- THIS ONE
        Device Accel Adaptive Deceleration (252):       1.000000
        Device Accel Velocity Scaling (253):    10.000000
        Evdev Axis Inversion (254):     0, 0
        Evdev Axes Swap (256):  0
        Axis Labels (257):      "Rel X" (138), "Rel Y" (139)
        Button Labels (258):    "Button Left" (131), "Button Middle" (132), "Button Right" (133), "Button Wheel Up" (134), "Button Wheel Down" (135), "Button Horiz Wheel Left" (136), "Button Horiz Wheel Right" (137)
        Evdev Middle Button Emulation (259):    0
        Evdev Middle Button Timeout (260):      50
        Evdev Wheel Emulation (261):    0
        Evdev Wheel Emulation Axes (262):       0, 0, 4, 5
        Evdev Wheel Emulation Inertia (263):    10
        Evdev Wheel Emulation Timeout (264):    200
        Evdev Wheel Emulation Button (265):     4
        Evdev Drag Lock Buttons (266):  0

In amongst that lot is the property you need to change -- number 251. But let's stick with names.

To reduce the mouse speed, meaning you mouse over a larger area, use factors larger than 1.0 ... e.g.

xinput set-prop " USB OPTICAL MOUSE" "Device Accel Constant Deceleration" 8.0

For my mousepen, with 8.0, I get about an A3 sheet's worth of mousing now to cover the whole screen!

Step 11: Software Adjustments 2

If your Linux system uses udev, then you can do the above step automatically every time you plug in :-

Create a file in /etc/udev/rules.d/ called 68-mousepen.rules and put something like this in it :-

# Set mouse sensitivity reduction for optical mouse-pen
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="15d9", ATTRS{idProduct}=="0a4c", RUN+="/usr/local/bin/mousepen"

You will need to use lsusb to find the vendor:productcode numbers for your particular mouse.

Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 005: ID 15d9:0a4c This Is Your Mouse <---- this one!
Bus 003 Device 004: ID 1c4f:0034 SiGma Micro 

This udev rule means that whenever a USB device is plugged in that matches your mousepen, run the named script.

And then create /usr/local/bin/mousepen, owned by root, and executable (chmod 700/usr/local/bin/mousepen), with the following contents

#!/bin/tcsh
setenv DISPLAY ":0.0"
setenv XAUTHORITY "/home/YOURHOME/.Xauthority"
( sleep 5 ; xinput set-prop " USB OPTICAL MOUSE" "Device Accel Constant Deceleration" 8.0  ) &

The XAUTHORITY line needs to point to your home directory to pick up that file. Otherwise it won't work!

The final line returns straight back to udev, allowing it to get on with creating the USB device, but hangs around here for 5 seconds before attempting to set it up. This delay is important, otherwise the mouse hasn't yet been "found" and again, it won't work.

Step 12: Result!

As I hoped, it's much easier to draw on a larger area, with something that feels more like a pen!

Curves have fewer "jaggies" in them. Shading-style motions work better too, closer packed and more even.

It's not as good as a real tablet, but for just over £2 and less than a day's work, I think it's good value!

applepen<br>
Give the pen a little space to move and put left click under the pen. If you press the pen down, you left click.<br>Also, use a laserpen. It already has a place to hold 2 batteries. (Wireless mouse)
<p>I have an idea... arrange a freely-moving ball in front of the sensor. Thisi should pick up any rolling around on the table and also feel more like a real pen.</p><p>roliop</p>
<p>That's a good thought -- get building then, post the results :)</p><p>Got any spare rubber-coated mouseballs? That would give a good non-slip, textured surface, I think.</p><p>Remember that the direction of tracking will be flipped in both directions, so you'll need to fix that in software or turn the mouse around (tail toward you).</p>
<p>Never heard of a mousepen before.</p><p>If this could be done with a wireless mouse i think it would be even better.Perhaps even having the cable leave from the pen body instead of the base would help remove the cable friction.</p>
<p>I plan to use this also with a Raspberry PI which has a wireless mouse already -- I don't know if it would conflict having two wireless mouse devices. Also wireless mouse means finding somewhere to hide the batteries :)</p><p>The cable doesn't seem to cause much friction, it just trails down the drawing board. If anything, it helps keep the base the right way up, like a tail on a kite.</p><p>Also -- I did think of bringing the USB lead out of the top of the pen, but 1) it makes the pen a bit more top heavy, and 2) the joint I used wouldn't pass a USB cable easily -- hence using enamelled copper wire (magnet wire) for the buttons.</p>
<p>Wow, very thorough i'ble! Interesting approach. I'm constantly talking myself out of buying a tablet. Sometimes I draw on my phone and then put the phone drawing into the Gimp and make cool backgrounds. Or I try to invent new ways of drawing with the mouse and Gimp. I can see the improvement with your mouse pen, so I'm gonna study your project and see if I can do it. Thanks for sharing!</p>
<p>Thanks! What does not show up in the examples is how CAREFULLY you have to mouse (with a mouse) and still end up with some rough edges. With the pen-mouse, you can squiggle/stroke more quickly, and it comes out neater!</p>

About This Instructable

16,879views

143favorites

License:

Bio: Software geek, electronics enthusiast, musician, artist ... I enjoy making stuff, and discovering new things!
More by MikB:Backlit Faux Stained-Glass Picture Frames Made With Flames! Simple Framed Watercolour Paintings 
Add instructable to: