Concept
Given the limited time constraint, the transforming robot presented a greater challenge, necessitating a reevaluation of the narrative and the concept as a whole.
At its core, the redesigned Project Utopia centers around an elegant yet challenging puzzle box. Each compartment represents a unique layer of interaction, requiring the user to solve riddles or manipulate physical components to unlock the next. Inside the compartments, users find carefully crafted informational cards and audio prompts that guide or enrich the experience.
Also, this redesign was inspired by the constraints of available technology, but it provided an opportunity to reimagine how interactive installations can connect with users through simplicity and creativity.
Features
At its heart, Project Utopia revolves around a puzzle box with multiple compartments. Each compartment contains riddles, cards with hidden clues, and audio prompts powered by p5.js. However, the twist lies in ARIS, the robotic overseer. As users engage with the puzzle box, ARIS intervenes—blocking, guiding, or assisting—depending on the challenge. This integration transforms the project into a blend of physical interaction, robotics, and storytelling, elevating the experience for participants.
The Box
A 3-d painted box, it has compartments which each secured with a unique mechanism, requiring users to solve challenges to access. The clearing of puzzles means that the person would be able to access the prompts and clues inside.
The Bot
The bot moves on two motored wheels with a castor wheel in the front for stability. It has one servo motor powered hand (made of cardboard), and
- LCD Screen Eyes: Display emotions like suspicion, curiosity, or delight.
- Servo Hand: Blocks premature access to the box.
it also is an expressive robot, meaning that major actions from the user will prompt expressions and sound from him.
The Code so far
#include <LiquidCrystal.h> #include <Servo.h> // Initialize LCDs LiquidCrystal lcdLeft(2, 3, 4, 5, 6, 7); LiquidCrystal lcdRight(8, 9, 10, 11, 12, 13); // Initialize the servos Servo servoLeft; Servo servoRight; // Custom character arrays for expressions byte happyEye[8] = { B00000, B01010, B00000, B10001, B01110, B00000, B00000, B00000 }; void setup() { // Begin LCDs lcdLeft.begin(16, 2); lcdRight.begin(16, 2); // Load custom characters lcdLeft.createChar(0, happyEye); // lcdLeft.createChar(1, confusedEye); lcdRight.createChar(0, happyEye); // lcdRight.createChar(1, confusedEye); // Start with a happy expression showHappyExpression(); } void loop() { // Alternate expressions every 3 seconds showHappyExpression(); delay(3000); } void showHappyExpression() { // Left Eye lcdLeft.clear(); lcdLeft.setCursor(0, 0); lcdLeft.write(byte(0)); // Happy Eye // Right Eye lcdRight.clear(); lcdRight.setCursor(0, 0); lcdRight.write(byte(0)); // Happy Eye }