Project showcase
Fingerscan: Music at Your Fingertips

Fingerscan: Music at Your Fingertips © CC BY-NC-SA

A tactile music wearable, made of ten vibration motors attached to your fingernails…

  • 9,712 views
  • 6 comments
  • 29 respects

Components and supplies

Necessary tools and machines

09507 01
Soldering iron (generic)
Hy gluegun
Hot glue gun (generic)

About this project

This project is a tactile music wearable: 10 vibration motors (the same found in cellphones) are to be attached to fingernails. This device can be used to produce patterns for meditation/body consciousness, tactile music, 1-to-1 performances, music for deaf people, tactile communication systems, augmentation of perception (e.g. feeling the same sensation under a performing pianist’s skin), possible medical applications…

Realized as the last work in the frame of the research project touchmysound, in 2016, this prototype of a wearable tries to translate the musical elements to a tactile level. While sound is totally absent here, the focus is on the spatialization of the tactile sensation.

Two Arduinos control rhythm, duration and intensity of the vibration. The patterns can be programmed and then uploaded to the Arduinos or controlled in real-time via computer.

This prototype could be upgraded in various ways:

  • realize a design to properly and easily wear the device (maybe 3D-printed silicone gloves). Int he public presentation of the project, finger sleeves used to count banknotes were used to secure the motors to the fingersnails;
  • laser-cut a wooden case and include a battery to make it a mobile wearable;
  • include plugs to attach a set of 10 piezo sensors that, worn by another person, can transmit the vibration data to the vibrating motors (even via networked connection);
  • include a knob to control the maximum intensity of the vibration;
  • include a button to select the operational mode: different stand-alone programs, composition mode (attached to a PC via Arduino’s USB port for composing tactile music), direct piezo-to-motor communication;
  • compose different stand-alone patterns for when the device is used as a wearable;
  • set up a computer-based system for the composition of pieces;
  • imagine the same system fit in another design to be worn on other parts of the body. Will the same compositional strategy apply?

In the schematics shown hereunder, made with Fritzing, the two Arduinos run separately. In case you wanna sync the two hands, you need to send data from one Arduino to the other (via the TX and RX pins). The software has to be adapted accordingly.

This schematic is basically a development of the project found on Learning About Electronics, and the module which controls a vibration motor (3.3V) is repeated ten times. Since all the motors could be on at the same time, an external power supply is used, which feeds 9V directly to the Vin pin of the two Arduinos, while a switch regulator takes down the input to 3.3V to feed the then motors. For a better understanding of the powering of the Arduino board, see this article.

You may want to redesign this circuit using an Arduino Mega, or even one only Arduino Uno…

I programmed the patterns directly in Arduino Code.

An Arduino sketch was used activate the motors one by one on subsequent fingers, with a random timing:

 const int motorPin1 = 3;
  const int motorPin2 = 5;
  const int motorPin3 = 6;
  const int motorPin4 = 9;
  const int motorPin5 = 10;
  int randTime = 0;
void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(motorPin5, OUTPUT);
}
void loop() {
  steady(motorPin1);
  steady(motorPin2);
  steady(motorPin3);
  steady(motorPin4);
  steady(motorPin5);
}
void steady(int motorPin) {
  randTime = random(250);
  analogWrite(motorPin, 250);
  delay(randTime+50);
  analogWrite(motorPin, 0);
}

Another sketch was used to produce ramps (crescendo-diminuendo) on subsequent fingers:

 const int motorPin1 = 3;
  const int motorPin2 = 5;
  const int motorPin3 = 6;
  const int motorPin4 = 9;
  const int motorPin5 = 10;
void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(motorPin5, OUTPUT);
}
void loop() {
  ramp(motorPin1);
  ramp(motorPin2);
  ramp(motorPin3);
  ramp(motorPin4);
  ramp(motorPin5);
}
void ramp(int motorPin) {
  int randn;
   randn = random(10);
   for (int intensity = 0; intensity < 250; intensity++) {     analogWrite(motorPin, intensity);     delay(randn);   }   randn = random(20);    for (int intensity = 250; intensity > 0; intensity--) {
    analogWrite(motorPin, intensity);
    delay(randn);
  }
}

The prototype also resulted in a caterpillar-like self-moving robotic hand.

A modified versions of these sketches was then used by Argentinian composer Mariano Rocca during a sound-art workshop at Distat Terra 2016, Choele Choel (Argentina). The device was attached to the strings of an open vertical piano, with the pedal forced down, to let the strings resonate with the motors.

The project was publicly presented at the Nordic Sound-Art Symposium “Sound Disturbance”, February 10-12, 2017.

Fingerscan by Alessandro Perini is distributed under a Creative Commons License – Attribution – Non-commercial – Share Alike 4.0 International.

This project appears on www.alessandroperini.com

For further permissions: https://alessandroperini.com/contact/.

Code

Left handArduino
Upload to Arduino board A, modify at will!
  const int motorPin1 = 3;
  const int motorPin2 = 5;
  const int motorPin3 = 6;
  const int motorPin4 = 9;
  const int motorPin5 = 10;
  int randTime = 0;

void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(motorPin5, OUTPUT);
}

void loop() {
  steady(motorPin1);
  steady(motorPin2);
  steady(motorPin3);
  steady(motorPin4);
  steady(motorPin5);
}

void steady(int motorPin) {
  randTime = random(250);
  analogWrite(motorPin, 250);
  delay(randTime+50);
  analogWrite(motorPin, 0);
}
Right handArduino
Upload to Arduino board B, modify at will!
  const int motorPin1 = 3;
  const int motorPin2 = 5;
  const int motorPin3 = 6;
  const int motorPin4 = 9;
  const int motorPin5 = 10;

void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(motorPin5, OUTPUT);
}

void loop() {
  ramp(motorPin1);
  ramp(motorPin2);
  ramp(motorPin3);
  ramp(motorPin4);
  ramp(motorPin5);
}

void ramp(int motorPin) {
  int randn;
   randn = random(10);
   for (int intensity = 0; intensity < 250; intensity++) {     analogWrite(motorPin, intensity);     delay(randn);   }   randn = random(20);    for (int intensity = 250; intensity > 0; intensity--) {

    analogWrite(motorPin, intensity);
    delay(randn);
  }
}

Schematics

Fingerscan - schematics
see: https://goo.gl/9Gb5cq
Fingerscan web n3ocjogkfl

Comments

Similar projects you might like

New Electronic Music Instrument Design

Project showcase by cpeckmusic

  • 4,300 views
  • 0 comments
  • 16 respects

Interactive Toddler Music Box Toy

Project tutorial by Christopher Monreal and Nick Udell

  • 937 views
  • 0 comments
  • 2 respects

Integrated Solar ChargeController, Inverter, PowerBank, Lamp

Project tutorial by Shahariar

  • 7,733 views
  • 16 comments
  • 30 respects

Pinball Sounds and Music

Project tutorial by Bob Blomquist

  • 5,909 views
  • 3 comments
  • 17 respects

Newbie Music Player

Project in progress by Michael Marinis

  • 3,863 views
  • 2 comments
  • 12 respects

Music Adaptive RGB LED with Arduino and Processing

Project in progress by ounane mohamed elfarouk

  • 2,953 views
  • 8 comments
  • 24 respects
Add projectSign up / Login