Bluetooth Headmouse

Bluetooth Headmouse

Project Image

This projects provides a method for an alternative mouse input over Bluetooth with head movement. The project uses one or more RN-42 Bluetooth module (version 6.03 or later) to send HID (mouse pointer and button commands) reports to a computer or phone. Mouse movements are related to the movement of an MPU6050 (gyroscope) placed on the side of the users head (e.g. respirator mask, headband, hat, eye glasses earpiece…). This has been tested on Android (Apple phones won’t work), Windows and Ubuntu.

Optional: Any switch that the person can access. I use 4 micro light switches (2 head mounted and one each for my left and right index fingers).

The C++ code is straightforward.
I have ALS and only limited head and finger movement but I am able to completely control my phone (almost like having working hands again). I have full access to my computer (I use a lot of Fusion 360 and this system works great).

The schematics, code, and 3D print files for power wheelchair button mounts (left and right, hand and head) are available at the GitHub repository linked below.


Connect Arduino MEGA, RN-42 (use one module for each device) , 4 buttons and the MPU6050 as outlined in HeadMouse.fzz.

Run HID_Config.ino, to configure the RN-42 Bluetooth Module. This sets the RN-42 to the combo(mouse and keyboard ) profile.

Pair RN-42 modules with devices (phone and computer). This step is simply pairing a Bluetooth device from the phone or computer.

Upload headMouse.ino to the microcontroller.


If the pointer moves while the MPU 6050 is stationary, run calibrate_gyro.ino with the MPU6050 stationary. Update values of averageX and averageZ in headMouse.ino.




Project Need

Created by

Capabilities Needed

Time to Complete

Cost to Build

Creative Commons License




Project Page

Project Page