Introduction: Arduino Mouse Wiggler
It is kind of annoying every time when the computer goes into sleep, especially when you are in the middle of a PowerPoint presentation, or working from home but supposed to appear available online all the time. This simple device will wiggle (jiggle) your mouse for you every 30 seconds or so and keep your computer always awake. This device simply simulates the physical mouse movement, there's no App or driver to be installed, so it is 'stealth' and won't violate the company IT policy or expose yourself to dangerous software.
Step 1: Make the Device
The entire mouse wiggler is 3D printed. The files are attached. Print the parts with your favorite color.
Step 2: Hardware and Assembly
The mouse wiggler uses parts that are available from many retailers. Following hardware are needed:
- Arduino Nano (or clone,don't solder the pins to the Nano)
- SG90 Servo and hardware pack
- Mini USB cable
- Some wires
Following are the steps to wire the servo to the Arduino Nano and installation of the servo and wheel.
The servo has a connector with 3 female pins. The orange one is the PMW pin that needs to be connected to the D9 pin on the Arduino Nano. The center Red wire is Vcc that goes to the +5V on the Nano and the Brown is ground that is connected to the GND on the nano. I used 3 male pins and soldered it to the wires from the Nano to make the wiring easier.
Use one of the servo horn and the screws to secure the SG90 servo to the mouse wiggler body, and install the wheel on the servo output. Make sure the wheel is level and does not interfere with the mouse. Optionally you can print the pattern and place it on top of the wheel to improve aesthetics and make the mouse move more consistent. I used white address labels for this.
Attachments
Step 3: Code
The Arduino sketch is attached. Make sure you have the Servo.h and SimpleTimer.h libraries installed before uploading the sketch to your nano. You may change the angle in which the servo will travel, and the time interval that the servo will move. The default setting is the servo will move the wheel 30 degrees to the left then 30 degrees to the right every 30 seconds. This will make your mouse move for about 10 mm which is enough for keeping the computer from sleep, yet not too much to lost track of the mouse cursor. You may adjust these values as you desire.
Attachments
Step 4: Let the Mouse Move
Place your mouse on top of the Mouse Wiggler and make sure the optical sensor on top of the wheel. Power the device up use a USB power adapter and you're good to go.

Runner Up in the
Automation Contest 2017

Participated in the
Make It Move Contest 2017

Participated in the
Plastics Contest

Participated in the
Lazy Life Challenge
30 Comments
2 years ago on Step 4
I've update my code. I discovered that detaching the servo between moves eliminates the servo 'buzz' that often occurred. I also wanted a random move time, so set a min and max time to create a random move time.
I then went overboard and put in a load of (unnecessary) serial debug info which can be enabled by uncommenting 1 line :)
New code:
Reply 2 years ago
I downloaded the code and when I try to compile / verify it I get the error message SimpleTimer.h: no such file or directory.
Reply 2 years ago
Have you installed simple timer? If you're using the Arduino IDE you'll find it by clicking Sketch then Include Library then Manage Libraries. Type in SimpleTimer (no spaces) and one by Alexander Kiryanenko will appear. That's the one I used.
You'll probably find it on GitHub too.
Reply 2 years ago
Thank you for the information.
Ed
3 years ago on Step 3
Hey great project, I have run into a snag while compiling the Arduino sketch. I received this error and was wondering if anybody knew how to fix it. The code seems right and is unchanged, so it could be a version issue. ANy help is appreciated, Thanks!
Reply 2 years ago
Same error here. The modified code I posted in another comment works.
Reply 3 years ago
It looks like you might be trying to use a different version of SimpleTimer. You can obtain a compatible version of the SimpleTimer used from Arduino Playground. https://playground.arduino.cc/Code/SimpleTimer/#Ge...
You just need to get the SimpleTimer.ccp file and the SimpleTimer.h file. Then replace one line in the main code that is posted in the article.
In the main code, change the include line to:
#include "SimpleTimer.h"
See images below:
3 years ago
Hi, its the second "wiggler" I am trying to make after the long break. I am doing everything the same as last time but no success this time. Need some help here please..
Reply 2 years ago
I'm 4 months later to the party but I had the same error when I used the SimpleTimer downloaded from the Arduino Library Manager.
I've posted code that works in another comment.
Reply 3 years ago
Try moving the entire function of "void mouseMove" above the "void setup" function and then compile. See attached image for example. Hope that helps.
Reply 3 years ago
Hey did you ever figure this out?
Reply 3 years ago
Looks there are some grammatical errors in your sketch. Did you try to download the sketch again? The article hasn't changed since it was published.
2 years ago
This code will work for the version of SimpleTimer that I got from the Ardiono Library Manager:
5 years ago
could you put out the code in the article because i cant open the file.
Reply 5 years ago
I just tried the sketch can be downloaded without issue. It can be opened by Arduino IDE, or a text editor.
Reply 5 years ago
Could you send me an email or something because the computer I use cannot open the file.
Reply 5 years ago
*email text file of the code or a picture of the code
Reply 2 years ago
You can open the file with Notepad++
Here is the code:
/**The MIT License (MIT)
Copyright (c) 2017 by Bin Sun
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <Servo.h>
#include <SimpleTimer.h>
int servoPin = 9;
int mousePos = 30; // set the limit of mouse move
Servo servo;
SimpleTimer timer;
int angle = 0; // servo position in degrees
void setup()
{
servo.attach(servoPin);
timer.setInterval(30000L, mouseMove); //wiggle every 30 seconds
}
void mouseMove()
{
// scan from 0 to mousePos degrees
for(angle = 0; angle < mousePos; angle++)
{
servo.write(angle);
delay(15);
}
// now scan back from mousePos to 0 degrees
for(angle = mousePos; angle > 0; angle--)
{
servo.write(angle);
delay(15);
}
}
void loop()
{
timer.run(); //Initiate SimpleTimer
}
5 years ago
just get an Atmega32u4 and send mouse commands. no empty mouse batteries, no loud servo, 1-2 lines of code in the loop
Reply 3 years ago
I'd be interested in this, you should do an instructable on it.