Social Robots

This was the model of Hades that I created, but ran out of time to implement electronics into.

 

This odd soft egg shape made of foam slowly rotates around its center axis, making a grinding, rolling sound. As you go closer to it, it starts to rotate faster.

Process

My first idea was to analyze the most commonly used personality dimensions (Extroversion, agreeableness, contentiousness, neuroticism, openness) and assign each robot a random combination of these traits.

Once I started to define the robots based on their dimensions, I realized that I am limited in how much personality I can show with these forms. For example, it is difficult to show the level of openness that something that is not creative.

I still broke down the dimensions of each social robot that I planned to make, but the factors that seemed to influence them the most was their levels of extroversion and agreeableness.

I originally planned to make three distinct robots with different personalities, but due to time and how surprisingly challenging it was to make Hermes, I did not make Hades or Oizys. Hades was intended to be a hard rigid form that would have a temper and be antisocial. Oizys was designed to be anxious and nervous.

The interactions that I mapped out for each social robot helped me to define them in my head and get a sense of how they should react when approached to socialize.

This was my original plan for Hermes which I more or less followed when constructing it. The main idea was to have a servo with a weight on the end of it continuously moving and shifting Herme’s center of gravity.

 

Process Reflection

The process for designing and constructing Hermes was fun but rough. I enjoyed making its shell out of foam, it’s rare that I can make something so organic and intentionally imperfect as Hermes. Most of my struggles came after that when I was trying to implement the electronics into this form. I had the idea to try and put the Arduino, servo, battery pack and breadboard into a tin can and then core out the shell and put the self contained can in. I was on the right track with this method and it’s something I’m going to implement into my work in the future, but did not fan out how I planned in this case. The main issue was that the servo needed to be able to rotate a full 360 degrees to get the action that I wanted, but this required the servo to have wide clearance in a small space. The shell of Hermes should have been slightly bigger to allow me more space to work with, but in the end I was able to make everything fit.

The biggest other issue I ran into was Hermes not animating in the way that I was expecting. I chose a tin can to house the electronics because this would also allow me to make a bow in the bottom for Hermes to rotate on. I make this bow by hammering the bottom of the can, but because of this, the bottom was not a symmetrical hemisphere for Hermes to rotate on. Looking back, I should have 3D printed the electronics housing to ensure that I had space for the servo and the bottom was symmetrical. I also did not have enough weight on the end of the servo for it to make Hermes sway the amount that I had intended. However, the end result of a little wiggle that Hermes does is surprisingly still communicative of the happy/social personality that I wanted Hermes to have.

I also ran into some issues with the distance sensor. Initially I planned on using a laser ranger distance sensor, but after a failed attempt to make that sensor work, I reported to the ultrasonic range finder. This sensor is functional, but will randomly report incorrect numbers with will confuse the servo and so the motion of Hermes is not always connected to distance.

 

//Social robots
//Casandra Rausch
//A project to physically animate and give personality to unique forms.
//This code detects the distance and changes the speed of a continuously rotating servo in response.

#include <NewPing.h>
#include <Servo.h>

#define TRIGGER_PIN 9
#define ECHO_PIN 8
#define MAX_DISTANCE 200
const int GAUGEMOTORPIN = 3;

Servo gaugeMotor;

// NewPing setup of pins and maximum distance
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
  Serial.begin(9600);
  gaugeMotor.attach(GAUGEMOTORPIN);
}

void loop() {
  delay(50);
  unsigned int distance = sonar.ping_cm();
  Serial.print(distance);
  Serial.println("cm");

  int Dist = analogRead(distance);
  int Level = 0;
  Level = map(Dist, 0, 200, 1, 9);

  if (Level = 1) {
    gaugeMotor.write(90);
    delay(5000);
  }
    if (Level = 2) {
    gaugeMotor.write(80);
    delay(4500);
  }
      if (Level = 3) {
    gaugeMotor.write(70);
    delay(4000);
  }
    if (Level = 4) {
    gaugeMotor.write(60);
    delay(3500);
  }
      if (Level = 5) {
    gaugeMotor.write(50);
    delay(3000);
  }
      if (Level = 6) {
    gaugeMotor.write(40);
    delay(2500);
  }
      if (Level = 7) {
    gaugeMotor.write(30);
    delay(2000);
  }
      if (Level = 8) {
    gaugeMotor.write(20);
    delay(1500);
  }
      if (Level = 9) {
    gaugeMotor.write(10);
    delay(1000);
  }
}