05 October 2019

Expressive Emotion: Emotionally Disturbed Owls

GOAL: Create a simple kinetic interaction that expresses an emotion.

OBJECTIVE: To practice the melding of wiring, coding, kinetics, and concept.


MATERIALS USED: 

  • Elegoo UNO R3
  • 1x Servo
  • Two Owl Pencil Sharpeners
  • Some Cotton Balls
  • Fake Decorative Flora




Emotionally Disturbed Owls



Not much to write home about this time, but let's start with my concept--

Initially, I was going to tape my servo to the underside of a squishy llama and have it sigh after a long day, but that idea was scrapped after one too many failed attempts to thread a needle. Instead, after rummaging through my desk, I found two owl-shaped hollow pencil sharpeners and had an epiphany. I immediately began sketching:


He's been having a bad day since 1994

Inspired by their wide, petrified eyes, I decided to try and indicate 'nervous' as my expressive emotion, but then how does one show the state of being nervous? In people, we generalize it's normally sweating, gritted teeth, and a swirling stomach. In drawing, I usually use speed lines, wide eyes, and shading to get it across. For a servo? Here are the results:

NOTE: Volume warning(?). I forgot about my fan, and it is obnoxious.





Code is fairly straight-forward this time, though I did experiment with functions. In the future, I'd be curious to do this again, but with an ultrasonic sensor so that, depending on the pink owl's proximity, the blue owl's status changes (i.e. buddy system). I'm also pretty sure there's a better way of writing those 'for' loops, but I'll experiment with that soon-after.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <Servo.h>

// Create servo object
// Create variable to store position

Servo myservo;
int pos = 0;

void setup() {
  // Attach servo to 3rd pin
  myservo.attach(3);
}

void loop() {
  // Call movement functions
  slowSweep();
  rapidSweep();
}

// Function to move servo
void slowSweep() {
  // first slowly move to 150
  for (pos = 0; pos <= 150; pos++) {
    myservo.write(pos);
    delay(15);
  }
}

void rapidSweep() {
  // then trigger multiple sweeps for sick 360 no scopes
  for (pos = 150; pos <= 0; pos++) {
    myservo.write(pos);
    delay(5);
  }
  for (pos = 0; pos <= 130; pos++) {
    myservo.write(pos);
    delay(5);
  }
  for (pos = 130; pos <= 0; pos++) {
    myservo.write(pos);
    delay(5);
  }
  for (pos = 0; pos <= 130; pos++) {
    myservo.write(pos);
    delay(5);
  }
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.