Be(e)ing Moved
Made by Yael Canaan · UNLISTED (SHOWN IN POOLS)
Made by Yael Canaan · UNLISTED (SHOWN IN POOLS)
The goal of the project is to provide inanimate objects that usually are expected to provide comfort with a voice that may sometimes be considered 'spooky'.
Created: March 5th, 2021
The intent of this project was to provide a voice to an inanimate object that is typically seen as a a source of comfort and support. This is meant to be spooky and unnerving as your trust is betrayed by the most unassuming object you own. The initial idea was for a stuffed animal to tweet where you are based off of longitude and latitude data, thus exposing to the world where you are at any given moment.
I was able to create a bee that tweeted whenever it was being moved. Using the accelerometer on the circuit playground bluefruit that was attached to the bee, the device communicated over bluetooth with my phone, which in turn communicated with the Adafruit IO website regarding whether there was a significant change in the accelerometer data. If there was, the data was transferred to IFTTT which then either sent a tweet or an email that the bee was being moved. By the final iteration, this processes worked rather seamlessly and quickly, with only a short delay between the movement of the bee and a tweet or email.
In order to determine if the bee was being moved or not, I examined the accelerometer data and determined that if the x, y, or z coordinates changed by '2', the device should output a 1, otherwise the device should continuously output 0s. Through this binary, I instructed IFTTT to only respond to a 1 in order to publish a tweet or send an email.
One of the projects that inspired me to try and make a tweeting bee was the House of Coates. I was intrigued by the concept of a house - the place where you seek comfort and hide from the prying eyes of others - that could tweet and reveal small things that were happening within to strangers outside. The House of Coates gets rather close to tweeting about personal topics, however not as close as I was interested in exploring. The house would welcome Tom Coates home, but not mention when he left. Occasionally, however, it would say something rather strange and I found that to be most interesting.
Initially, I had planned to make the bee report precise locations based on geotags. I wanted to assign longitude and latitude data to specific locations so that the bee would tweet when I took it to specific locations, such as different buildings on campus. This proved to be rather difficult to communicate over UART connection and the adafruit connect app. So instead I opted for something simpler. For a while, I worked on making the bee respond to touch and make it tweet when it was being touched, but I ran into more problems. A third attempt using accelerometer data proved to be successful after some more trial.
Throughout the entire process, there was a lot of 'googling' and debugging. An early success was figuring out how to transmit text through UART where I sent the word 'hello' over and over. Later on, what was transmitted became more relevant as I developed a better grip on the code and tools.
An immediate next step would be to figure out how to slow down the data transfer time. The code itself is running on a significant delay, which means that somewhere between Adafruit IO and IFTTT old data is being repeated over and over until new data arrives. This causes the bee to tweet or send too many emails at a time.
Something else I'd like to explore is what other data inputs I can add for the bee to collect, such as temperature and light sensitivity. I think it would also be interesting to allow the bee to connect with outside data. For example, it could detect the inside temperature and check the outside temperature and make a tweet regarding if I have all the windows closed in the apartment, or even make a judgmental statement that I'm using air conditioning on such a pleasant day outside.
I think it would also be interesting to explore other ways to make the bee spooky, such as having it tweet mostly normal information with strange tweets occasionally mixed in.
I learned a lot making this project. This was my first time doing anything nearly this complicated, so because of that, I learned a lot about problem solving and different websites to google for help. Looking back, I should have simplified my project earlier on and checked in regarding the scope of my project early on. For a while, the project was too complicated for me and induced a lot of unneeded stress. Had I simplified the project earlier on, some of that stress could have been avoided.
In the end, the project did what I wanted it to. It took data from my bee and tweeted it and I thought that start to finish process was rather amazing, both as something that could actually happen and because I was able to do it.
https://twitter.com/houseofcoates
https://courses.ideate.cmu.edu/16-376/s2021/ref/CircuitPython/cpb_ble_sensor.py (some code from this page)
My CS major roommate
Lots of Adafruit tutorial pages
# cpb_ble_sensor.py
# Provide a remote sensing service over Bluetooth Low-Energy (BLE).
# This runs on an Adafruit Circuit Playground Bluefruit.
# This example works with either:
# 1. host_ble_receiver.py running on a host computer
# 2. the Plotter function of the Bluefruit Connect iOS app
# ----------------------------------------------------------------
# Import the standard Python time functions.
import time
# Import the board-specific input/output library.
from adafruit_circuitplayground import cp
# Import the Adafruit Bluetooth library. Technical reference:
# https://circuitpython.readthedocs.io/projects/ble/en/latest/api.html
from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService
# ----------------------------------------------------------------
# Initialize global variables for the main loop.
ble = BLERadio()
uart = UARTService()
advertisement = ProvideServicesAdvertisement(uart)
# Flags for detecting state changes.
advertised = False
connected = False
# The sensor sampling rate is precisely regulated using the following timer variables.
sampling_timer = 0.0
last_time = time.monotonic()
sampling_interval = 0.10
# ----------------------------------------------------------------
# Begin the main processing loop.
while True:
# Read the accelerometer at regular intervals. Measure elapsed time and
# wait until the update timer has elapsed.
now = time.monotonic()
interval = now - last_time
last_time = now
sampling_timer -= interval
if sampling_timer < 0.0:
sampling_timer += sampling_interval
xold, yold, zold = x, y, z
x, y, z = cp.acceleration
else:
x = None
y = None
z = None
if not advertised:
ble.start_advertising(advertisement)
print("Waiting for connection.")
advertised = True
if not connected and ble.connected:
print("Connection received.")
connected = True
cp.red_led = True
if connected:
time.sleep(5)
if not ble.connected:
print("Connection lost.")
connected = False
advertised = False
cp.red_led = False
else:
if x is not None:
if(xold - x > 2 or xold - x < -2 or yold - y > 2 or yold - y < -2 or zold - z > 2 or zold - z < -2):
uart.write(b"%.3f\n" % 1)
else:
uart.write(b"%.3f\n" % 0)
#uart.write(b"%.3f,%.3f,%.3f\n" % (x, y, z))
Click to Expand
This project is only listed in this pool. Be considerate and think twice before sharing.
As part of this project-based course, we’ll get hands-on with emerging technologies, concepts and applications in the internet of things through a critical socio-technical lens. Over it’s 15-weeks,...more
The goal of the project is to provide inanimate objects that usually are expected to provide comfort with a voice that may sometimes be considered 'spooky'.