Buzz Bear
Made by Matthew M, hdw and gracielg · UNLISTED (SHOWN IN POOLS)
To create a connected Teddy Bear that wakes one's partner up in the morning.
Created: March 6th, 2018
//COMMUNICATING VARIABLES
// This value will store the last time we published an event
long lastPublishedAt = 0;
// this is the time delay before we should publish a new event
// from this device
int publishAfter = 10000;
// VIBRATING VARIABLES
int vibrate = D0;
//BUTTON VARIABLES
int buttonState = 0;
int previousState = 0;
int buttonPin = D6;
void setup()
{
// vibrator actions
pinMode( vibrate, OUTPUT ); // sets pin as output
digitalWrite( vibrate, LOW);
// button actions
pinMode( buttonPin , INPUT_PULLDOWN); // sets pin as input
Particle.subscribe( "diot/2018/paired/teddybear" , handleSharedEvent);
}
void loop()
{
buttonState = digitalRead( buttonPin );
Serial.println(buttonState);
if (buttonState == 1)
{
publishMyEvent();
}
delay(1000);
}
void publishMyEvent()
{
// Remember that a device can publish at rate of about 1 event/sec,
// with bursts of up to 4 allowed in 1 second.
// Back to back burst of 4 messages will take 4 seconds to recover.
// So we want to limit the amount of publish events that happen.
// check that it's been 10 secondds since our last publish
if( lastPublishedAt + publishAfter < millis() )
{
// Remember our subscribe is matching "db2018/paired/"
// We'll append the device id to get more specific
// about where the event came from
// System.deviceID() provides an easy way to extract the device
// ID of your device. It returns a String object of the device ID,
// which is used to identify your device.
String pushPaw = "diot/2018/paired/teddybear" + System.deviceID();
// now we have something like "db2018/paired/0123456789abcdef"
// and that corresponds to this devices info
// then we share it out
Particle.publish( pushPaw, "Paw Pressed" );
// And this will get shared out to all devices using this code
// we just pubished so capture this.
lastPublishedAt = millis();
}
}
// Our event handlde requires two bits of information
// This gives us:
// A character array that consists of the event name
// A character array that contains the data published in the event we're responding to.
void handleSharedEvent(const char *event, const char *data)
{
Serial.println("got event");
// Now we're getting ALL events published using "db2018/paired/"
// This includes events from this device.
// So we need to ignore any events that we sent.
// Let's check the event name
String pushPaw = String( event ); // convert to a string object
// This gives us access to a bunch of built in methods
// Like indexOf()
// Locates a character or String within another String.
// By default, searches from the beginning of the String,
// but can also start from a given index,
// allowing for the locating of all instances of the character or String.
// It Returns: The index of val within the String, or -1 if not found.
// We can use this to check if our event name contains the
// id of this device
String deviceID = System.deviceID();
if( pushPaw.indexOf( deviceID ) != -1 ){
// if we get anything other than -1
// the event came from this device.
// so stop doing stuff
return; //return call kicks us out of this function
}
// otherwise do your stuff to respond to
// the paired device here
//if we don't get kicked out of the function, go ahead and blink 5 times;
beginVibrating();
}
void beginVibrating() {
digitalWrite( vibrate, HIGH);
delay(3000);
digitalWrite( vibrate, LOW);
delay(2000);
}
Click to Expand
Project breakdown
1) Brainstorming & Group Activity
Initially, we rapid brainstormed a list of ideas for three minutes. Some of our favorite ideas were:
a cup that vibrates when it's been empty, full, or untouched for too long (good for social drinking)
a remote app that allows the owner to interact and take care of their pet
an app for detecting the stress level of and soothing a long-distance partner
a remote night-light that allows one to communicate their status, especially if they're up to talk or not.
At the end, we decided we liked the idea of strengthening long-distance relationships. After some time, we chose an idea of a two teddy-bear system that could poke their partner awake.