Project:
Download our keyboard app!
Goals:
The project goals are:
-
Adjustable number of detents
Adjustable foce threshold
Software controlled damping
Implementation:
A brief overview:
The team's design utilizes several components:
Arduino Leonardo
Firgelli L16-50-35-12-P actuators (2x)
FSRs (4x)
TI L293D H bridge
MSU Eagle custom PCB print
These actuators support the positioning the joystick. As the user pushes the joystick, the actuators will either lengthen or shorten, but what's special about these is that they have potentiometer position referencing. This allows for equal positon based denting!
FSRs (Force Sensing Resistors) register force as pressure is placed on the pads. This value can be read through the analogue inputs of the Arduino.
The TI L293D allows the Arduino to drive the actuators in both forward and reverse directions. Using the h bridge is essential since the joystick will be able to talk quickly and reliably to the actuators. Here is the circuit schematic used to make this happen.
After creating the hardware prototyped in the video at top, the team used CadSoft EAGLE PCB design software and MSU fabricated the circuit. The PCB created can be used as a shield on top of the Arduino allowing the team to save space.
Software:
The code used for the controlling the Arduino is based off of standard libraries:
-
USB plug-and-play
Mouse HID
Keyboard HID
Here is some pseudocode and a flowchart for the operation of the Arduino:
LOOP
WHILE serial input check for serial input serial input
IF valid serial input specified parameter to new serial value
ELSE exit serial input check
IF joystick position is equal to maximum or minimum position prevent movement
IF force threshold value is met or exceeded
INITIALIZE new position value
INCREMENT position counter
WRITE actuator movement
WRITE cursor movement
IF pedal click present perform selected click routine
END of loop body
These libraries allow for easy programming and out-of-the-box functionality. Connect the joystick to any computer runing any modern operating system (Window, Mac OS X, or Linux) and you are good to go!
And finally, to compliment the joystick here is an onscreen keyboard that is designed to work with and control the joystick. The keyboard also works independently as well. The keyboard has been written with Processing using the Processing IDE.
The Arduino IDE was developed off of the Processing IDE so both IDEs share some commonalities, such as serial communication. The team selected the Processing IDE for several reasons:
-
Open-source environment
Cross platform
Solid serial communication with Arduino IDE
The keyboard supports a number of features:
-
Visual based design
Text-to-speech
User defined dictionary
Different sized layouts (4x4 to 12x12)
Processing IDE is designed with artists, hobbiest, and those new to programming. Being a visually based IDE not much
effort is needed to produce results, creating a keyboard, on the other hand requires understanding of libraries, java, and other backend features
One such feature is text-to-speech. This feature uses an internet connection to retrieve and cache small .mp3 files for text-to-speach feedback. Frequently used words will remain cached so bandwidth can be preserved.
Here is a picture of dictionary words. Note, different size keyboards can be selected by choosing the red squares on either side of the keyboard: