Bob - The Retired Frost Freight Lamp
Made by dongtaob
Made by dongtaob
Everyone needs a retirement, who doesn't? Even when one used to be an everyday worker, he/she would be reluctant to return to work after retirement. Our old friend, Bob - a notorious frost-fright lamp, refused to return for service when summoned. To give him some persuasion, we had to work really hard to keep him nice and warm... Bob starts panicking immediately after being woken up, then he starts to feel more comfortable as he is getting a hug. (a huge one)
Created: February 17th, 2023
Everyone needs a retirement, who doesn't? Even when one used to be an everyday worker, he/she would be reluctant to return to work after retirement. Our old friend, Bob - a notorious frost-fright lamp, refused to return for service when summoned. To give him some persuasion, we had to work really hard to keep him nice and warm... Bob starts panicking immediately after being woken up, then he starts to feel more comfortable as he is getting a hug.
high-res 2.mp4 from Dongtao Bi on Vimeo.
Being inspired by one of my childhood bedtime readings - 'Lino the Lamp Is Afraid of the Dark'; This project sought to represent an intriguing idea about animistic every-day objects. What if a utilitarian object in the household was found reluctant to work? Just like what a human being would feel like on a Monday morning. In this case, Bob is a retired lamp with his hood sagging on the ground. He is not obeying human instructions anymore. However, he could be convinced with a little extensive hug session - cheering him back up into working order.
In order to understand whether Bob feels comfortable enough to return to work, the project uses a humidity/temperature sensor to detect his condition of him. When bob feels too cold or lacks moisture - he will start to panic and blink his light at random intervals. In order to calm him down, one has to keep hugging Bob on his hood using his palms.
As Bob becomes more comfortable, his blinking-panic state will gradually settle down with more continuous emission of light. Eventually, with the continuous hugging session, Bob becomes happy with the condition and gets back to work happily - returning a smiley face on his hood.
This project is mainly composed of three components:
1) Sensor: A Humidity/temperature sensor (reads the 'comfort level' of Bob).
2) Micro-controller: An Arduino BLE 33 Nano microcontroller.
3) Object: An IKEA lamp (dedicate to representing Bob).
4) Utility Object: A 3.3v relay controller (articulating the on/off status of the lamp).
As an overview, the components work in a sequence together as:
--> Humid/Temp sensor detects ambient humidity and temperature level
--> Humid/Temp sensor sending data back to the Arduino board
--> Arduino board controls on/off status of the 3.3v relay based on temp/humid level.
--> The lamp is turned on/off based on the actions of the relay.
--> Humid/Temp sensor continues to detect data as the user warms it up.
The challenging part during the development of this project was attempting to make the humidity/sensor work - the sensor works best with a 5-volt power source, but it is only compatible with a 3.3-volt power source with the BLE Nano 33 board. However, once it is successfully connected, the reading is sufficiently effective and successfully drives the functionality of the relay. On the other hand, the sensor (Adafruit DTH-22) is not particularly accurate at capturing ambient humidity changes, but very effective at responding to temperature changes.
- One of the next steps of this project is mobilizing the expression of Bob to be more animated - making it a real-life motivated character. It would be compelling to design a casing for the wiring and sensor; allowing the 'hugging' action to be more realistic and embodied.
- Another aspect of the pursuit would be alternating the Arduino code to better represent Bob's panic mode; making the blink session more unsettling and anxious - triggering the user to give Bob a good hug immediately.
- On the other hand, just like a cat would make a 'meow' reaction when being picked up, Bob should also have an instant responsive reaction when being hugged at. He would also find it insecure and sad when the user stops hugging him, which should trigger another immediate response.
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
#include "DHT.h" //DTH sensor module
#define DHTPIN D5 // Digital pin connected to the DHT sensor
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
int relayPin = D2;
float HUMID_PANICPARAM_LOW = 40.0;
float HUMID_PANICPARAM_HIGH = 85.0;
//define temperature baseline based on current ambient temperature
float TEMP_PANICPARAM_LOW = 74;
float TEMP_PANICPARAM_HIGH = TEMP_PANICPARAM_LOW + 8;
// Initialize DHT sensor.
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
// Wait one second before the things starts.
delay(1000);
pinMode(relayPin, OUTPUT);
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float readHumid = dht.readHumidity();
// Read temperature as Fahrenheit (isFahrenheit = true)
float readTemp = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(readHumid) || isnan(readTemp)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;}
//print to represent current humidity and temperature readings.
Serial.print(F("Humidity: "));
Serial.print(readHumid);
Serial.print(F("% Temperature: "));
Serial.print(readTemp);
Serial.println(F("F"));
// fully turn on Bob when temp and humid level reaches 'happy level'
if ((readHumid > HUMID_PANICPARAM_HIGH ) && (readTemp > TEMP_PANICPARAM_HIGH)) {
Serial.println("Bob is happy");
digitalWrite(relayPin, HIGH); // Call the relay panic mode function with the current temperature
delay(5000);
}
// when temp and humid level drops below 'happy level' Bob begins to panic/blinking and defined interval
else if ((readHumid < HUMID_PANICPARAM_HIGH ) || ((readTemp < TEMP_PANICPARAM_HIGH) && (readTemp > TEMP_PANICPARAM_LOW ))) {
Serial.println("Bob is panicing");
relayPanicMode(readTemp); // Call the relay panic mode function with the current temperature
}
//Bob 'dies' when the humid and temp level drops below acceptable range
else {
digitalWrite(relayPin, LOW);
Serial.println("Bob is dead");
delay(3000);
}
}
//panic mode function to define the blinking interval of Bob.
void relayPanicMode(float currentTemp) {
//random factor to randomize interval a bit
int rd1 = random(-300, 300);
int rd2 = random(-1000, 1000);
//parameters for on/off time of Bob when panicing
int onTimeMax = 2500 + rd2;
int onTimeMin = 50 + rd1;
int offTimeMax = 2500 + rd2;
int offTimeMin = 50 + rd1;
//remap temperature level to corresponding panic time interval
int remapOnTime = constrain(map(currentTemp, TEMP_PANICPARAM_LOW, TEMP_PANICPARAM_HIGH, onTimeMin, onTimeMax),50, 3000);
int remapOffTime = constrain(map(currentTemp, TEMP_PANICPARAM_LOW, TEMP_PANICPARAM_HIGH, offTimeMax, offTimeMin),50, 3000);
//send data to control the on/off status of the relay
digitalWrite(relayPin, HIGH); // Turn on the relay
Serial.print("Bob ON time: ");
Serial.println( remapOnTime);
delay(remapOnTime); // Wait for the on time
digitalWrite(relayPin, LOW); // Turn off the relay
delay(remapOffTime); // Wait for the off time
Serial.print("Bob OFF time: ");
Serial.println( remapOffTime);
}
Click to Expand
As an investigation experiment, this project went pretty well overall in terms of technical implementations. However, it would be more compelling to mix in other fabrication/ computing methods in articulating the objects, such as woodworking/ 3D printing / Tiny Machine Learning - the remixed method will open up more possibilities in animating everyday objects while mobilizing more interactive features in its functionalities.
On the other hand, safety measures in the working process is also a critical factor. For instance, unlike other components in the Arduino circuit system, the relay is actually connected to high-voltage power sources. It would be critically important to make sure its exposed metal compartments are properly insulated before powering it up - exposed metal tips on the back of the circuit board of a relay could potentially cause electrical shocks to the user.
Everyone needs a retirement, who doesn't? Even when one used to be an everyday worker, he/she would be reluctant to return to work after retirement. Our old friend, Bob - a notorious frost-fright lamp, refused to return for service when summoned. To give him some persuasion, we had to work really hard to keep him nice and warm... Bob starts panicking immediately after being woken up, then he starts to feel more comfortable as he is getting a hug. (a huge one)