Final Project – Like Me Harder

What we did

We created a vibrating dildo that stimulates the user based on how many new Facebook likes (s)he has. Here’s how it works:

  1. Attach the dildo’s cord to the computer’s USB port
  2. Insert the dildo into desired orifice
  3. Run the program (dildo.py) on the computer
  4. Enjoy one pulse of vibration for every new like
  5. Then receive 2 seconds of stimulation for each like
  6. Remove the device from the sweet spot
  7. Wait for the next batch of likes* 😉

*Popular ways to build up like count include: posting a good profile picture, adding more friends, posting better status updates, getting a photo with a celebrity, liking more items on your News Feed (friends will likely reciprocate).

Why Facebook likes? Why a dildo?  

What does it mean to be social? With the continuously increasing popularity of social media, people have the opportunity to be more connected than they ever have been. But does hyperconnectivity directly translate to better social relationships?

Sites like Facebook have created a platform for people to share details of their lives with other users. “Liking” another user’s posts is one of the ways to respond to the information that is “shared” with us. This form of feedback has shown to be of great importance to some users of Facebook. The number of likes on a particular Facebook post is sometimes seen as an indicator of success for that particular post. After all, the number of likes is a quantitative measure for how “liked” that post is. This number can often evoke either gratification or disappointment from publisher of that post. We found this phenomenon to be very interesting and thought-provoking, which is why we isolated it and drew the sexual connection.

Video

[Video coming soon]

How the magic happens

There are three major components that went into the making of our dildo: hardware, software, and fabrication.

Hardware:

The circuit consists of a Teensy 2.0 microcontroller, an N-Channel MOSFET, an 11V LiPo Battery, and a DC motor with a small weight attached to one side of the rotating shaft. When this off-balanced motor is powered it produces vibration to stimulate the genitalia. See the schematic below for more information:

Vibrator

Software:

There are two programs running simultaneously. On a computer, there is a python script running that checks a Gmail account for unread Facebook like notifications. The Gmail account used in this code is set to receive all “like” notifications from a Facebook account. The script then logs into this Gmail account, counts the number of unread notification emails, sends that number to the microcontroller in the dildo, and then marks all of these new notifications as “Read” so that no likes will be double counted. This script uses the Pyserial module to communicate with the microcontroller.

import imaplib
import serial

user = 'dildie69@gmail.com'
password = '**********' #real password not shown
host = imaplib.IMAP4_SSL('imap.gmail.com','993')

ser = serial.Serial('/dev/tty.usbmodem12341', 9600, timeout=0.25)

#sign in to gmail
def enterGmail():
    host.login(user, password)

#check email for notifications and mark as read
def extractNotifs():
    host.select()
    host.search(None, 'UnSeen')
    emailList = host.search(None, 'UnSeen')[1][0].split()
    notifs = len(emailList)
    #mark all 'unseen' as 'seen'
    for email_id in emailList: #comment out for debugging
        markAsRead(email_id)
    return notifs


def markAsRead(email_id):
    host.store(email_id, '+FLAGS', '(SEEN)')


#send number of notifs to dildo as a string
def sendToDildo(notifs):
   if ser:
   ser.write(notifs)
   ser.flush()
   ser.close()

def executeAll():
    enterGmail()
    notifs = extractNotifs()
    if notifs > 0:
        sendToDildo(str(notifs))

executeAll()

The above code communicates with the Teensy 2.0 which runs the following code in order to execute the stimulation:

const int motorPin = PIN_B0;

int motorState = LOW; //motor is off
int notifs = 0; //notifications

void setup(){
    // initialize motor pin as output
    pinMode(motorPin, OUTPUT);
    Serial.begin(9600);
}

void motorOn(){
    digitalWrite(motorPin, HIGH);
}

void motorOff(){
    digitalWrite(motorPin, LOW);
}

void pulseVibe(int pulses){ 
    //pulse once for each notification
    for (int curPulse = 0; curPulse < pulses; curPulse++){
        // define pulse as 0.3 seconds on then 0.6 seconds off
        motorOn();
        delay(300);
        motorOff();
        delay(600);
    }
}

void steadyOn(int n){
    int timePerNotif = 2000; // 2 seconds of stimulation per notif
    int stimTime = (timePerNotif*n);
    motorOn();
    delay(stimTime);
}

void stimulate(){
    pulseVibe(notifs); //pulse once for each notification
    steadyOn(notifs); //stimulate steadily for specified time
    motorOff(); 
}

void updateNotifs(){
    // setup communication with computer
    // the next 6 lines are modified from an online tutorial at:
    // https://github.com/PunchThrough/FacebookFlagger/blob/master    // /Facebook_Flagger_Sketch/Facebook_Flagger_Sketch.ino
    char buffer[64];
    size_t readLength = 64;
    uint8_t length = 0;
    length = Serial.readBytes(buffer, readLength);
    if (length > 0){
        for (int i=0; i<length; i++){
            if (buffer[i] != 0){
                int rawSignal = int(buffer[i]);
                int offset = int('0');
                int newNotifs = rawSignal - offset;
                notifs = notifs + newNotifs;
            }
        }
    }
}

void loop(){
    // Once dildo is connected to computer, check for new likes
    // and stimulate accordingly.
    // Notifications will reset after first loop (see dildo.py)
    updateNotifs(); 
    stimulate();
}

Fabrication:

We thought it would be appropriate to create the physical form in the shape the Facebook Like thumbs up icon. We extruded this icon in SolidWorks to make a 3D model, which we filleted on the edges of the thumb to avoid any sharp corners. We translated that positive model into a negative shell that we 3D-printed and used as a mold for casting our first physical prototype.

We had to pay close attention to the organization of our circuitry so that it would fit properly inside of the mold while leaving enough room for the rubber to surround it. Each component of our circuitry except the rechargeable battery needed to be encased so that they would not become saturated with rubber. For this reason, we created an encasement for the protoboard out of InstaMorph moldable plastic. We used this same material to house the battery’s terminals and we made sure that this housing is accessible from the outside of the object for easy recharging. We encased the vibrating motor on one end with a 3D-printed case that extends slightly into the thumb of the dildo. We also enclosed the shaft end of the motor in a cylindrical wooden case to keep rubber and circuitry from interfering with the rotating weight.

We used Poly PT Flex 50 RTV Liquid Rubber for the exterior of the dildo. We mixed both parts of the rubber solution, then poured a thin layer of it in the mold and let it set before carefully placing the circuitry into the mold. We finally covered the rest of the circuitry and filled the mold with the liquid rubber. We let this set for several hours before we extracted the protoype.