Kaonashi

Anthropomorphized Electronics

Design Objective

The goal of this project is to get people to rethink their interactions with objects, by adding a human voice to an inanimate object which is triggered by the participant rolling it around in their hands.

The Project

The project was split into two parts. The creation of a functional prototype to test the behaviors of the object and to gauge the reaction people might have to it.

kaonashi-signage2kaonashi-signage3

The functional prototype played different phrases and sound bite depending on the orientation of the object. The four clips used cycled the Kaonashi from being friendly, confrontational, creepy and to laugh in the hands of the participant; thus taking an object that has no human characteristics and anthropomorphizing it.

Story Board

Kaonashi storyboard

Functional Prototype

It was built using an Arduino mini, an accelerometer, MP3 Trigger board, an audio amplifier, batteries and a speaker. The contents where then enclosed in a project box for initial user testing. The board senses the position it is being held at through the accelerometer and triggers a sound clip mapped to that range of values. There is a delay added to the code so that it can complete one action before jumping to the next, avoiding cueing the next clip too fast if the movement is quick.

 

Functional prototype electronics
Functional prototype electronics, including the Arduino brain, mp3 board, accelerometer and the power supply and management.

Electronic in the functional prototype box
Electronic in the functional prototype box.

Arduino Code

 

#include <SoftwareSerial.h>
#include <MP3Trigger.h>

SoftwareSerial trigSerial = SoftwareSerial(2, 3); // RX, TX
MP3Trigger trigger;

//Analog read pins
const int xPin = 1;
const int yPin = 2;
const int zPin = 3;


int led = 9;           // the pin that the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by


  int playTimer = 0;

//The minimum and maximum values that came from
//the accelerometer while standing still
//You very well may need to change these
int minVal = 305;
int maxVal = 477;


//to hold the calculated values
double x;
double y;
double z;

void setup()
{
  // initialize serial communications
  Serial.begin(9600);
 // Serial.begin( MP3Trigger::serialRate() );
 delay(2000);
  trigger.setup(&trigSerial);
  trigSerial.begin( MP3Trigger::serialRate() );
  // declare pin 4 to be an output:
  pinMode(led, OUTPUT);
}

void loop(){
  //read the analog values from the accelerometer
  int xRead = analogRead(xPin);
  int yRead = analogRead(yPin);
  int zRead = analogRead(zPin);

  //convert read values to degrees -90 to 90 - Needed for atan2
  int xAng = map(xRead, minVal, maxVal, -90, 90);
  int yAng = map(yRead, minVal, maxVal, -90, 90);
  int zAng = map(zRead, minVal, maxVal, -90, 90);

  //Caculate 360deg values like so: atan2(-yAng, -zAng)
  //atan2 outputs the value of -π to π (radians)
  //We are then converting the radians to degrees
  x = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI);
  y = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI);
  z = RAD_TO_DEG * (atan2(-yAng, -xAng) + PI);

  //Output the calculations
  Serial.print("x: ");
  Serial.print(x);
  Serial.print(" | y: ");
  Serial.print(y);
  Serial.print(" | z: ");
  Serial.println(z);
 
  fadingLED();
  
  delay(500);//just here to slow down the serial output - Easier to read
  
  if(playTimer == 0) {
    if(x < 260 && x > 230) {
      Serial.println("i'm not sure i like this?");
      trigger.play(3);
      playTimer = 2;
    
    } else if (y < 215 && y > 200) {
       Serial.println("giggle");
       trigger.play(1);
       playTimer = 10;
    
    } else if(x < 250 && x > 280) {
       Serial.println("ooo nice");
       trigger.play(2);
       playTimer = 4;
       
    } else if(z < 200 && z > 180) {
       Serial.println("that tickles");
       trigger.play(4);
       playTimer = 4;
       
    } else if(z < 350 && z > 270) {
       Serial.println("what are you doing");
       trigger.play(5);
       playTimer = 2;
    }
    trigger.update();
  } else {
    playTimer--;
  }  
}

void fadingLED() {
  // set the brightness of pin 5:
  analogWrite(led, brightness);    

  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;

  // reverse the direction of the fading at the ends of the fade:
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }    
  // wait for 30 milliseconds to see the dimming effect    
  delay(10);   
}

The code was complied from a number of sources mostly David Wicks MP3 Trigger code.

The audio files that where loaded in and triggered according to Kaonashi’s orientation where as follows:

Looks-Like Prototype

kaonashi looks-like-prototype being held

The name is taken from a character in the Miyazaki film Spirited Away. Kaonashi goes almost unnoticed, having only a very subtle personality until he is interacted with. This Kaonashi’s personality discovered when it is pick up, otherwise it sits slowly pulsing.

The shape is a simple organic form, with a squishy rubber exterior to invite the user to pick it up. Inside would be a miniaturization of the component found in the functional prototype. The power will be a rechargeable battery that will require a plug to be inserted through the rubber shell to the jack inside. Illustrated is the illuminated looks-like prototype.

 

 

 

 

Conclusion

Initial reactions from the prototype were mixed, some people found they became enamored with it, others felt creeped out having an object speak to them. I believe that the polarized reactions speak to the issue of giving human emotions to inanimate objects, and that it is an interesting area to conduct further research.

← Play Token →