The Muppet Box is a fidget device that incorporates a mini-game for those who aren’t simply content flicking a switch back and forth, using limit switches, LEDs, and vibrating disc motors.

The front view of the Muppet Box. Note that the wires and electronics are hidden.

The rear view of the Muppet Box.

A close up of the power button. Hypothetically, the only visible button interface of the Muppet Box.

 

The Muppet Box in action.

Process

Starting the project, I was much more concerned about the size and final shape of the cube, but decided to start with electronics given my available materials.

A breadboard-based prototype to test code only.

I made an Arduino Uno and breadboard prototype to set up the wiring and then moved onto soldering the pieces onto these small sawed-off proto boards. Everything went pretty swimmingly save for minor debugging and dumb wiring mistakes, as I was pretty new to the limit switches I used as well as soldering.

A set of 3 proto-board segments hooked up to the Arduino for testing.

One design issue that I had to take a moment to ponder is how I wanted the cube to incorporate the 5 proto-board segments. I was very set on the cube shape, but I also already had the idea of something soft and squishy in mind. I ended up starting off by soldering three of these segments together to make a corner, but not only was it precarious of a solder-job, but it also was not conducive to future debugging given the proximity of the pieces. There were a few regrettable decisions with the ground wires touching, for one.  I decided to put the assembly of the cube off until I decided what to do about the furry cover. Mid-way, I switched from the Uno to the Nano for size purposes, as per my original plans.

Sewing the blue fabric together.

A fortunate coincidence saddled me with this very soft blue fabric from Creative Reuse, so I decided to focus on how soft the project was gonna be. I started by cutting 6 squares of fabric out, then attaching two squares to each other. In the middle of sewing, it occurred to me that it would be much more exponentially difficult to sew in the electronics after finishing the fur cube, so I made a few rash decisions to sew each of the proto-board segments into the center of their respective square, then hope for the best. (Specifically, I threaded some string through the niche in the limit switch lever, fixed it to the fabric, then the LEDs, then tied it off.) The sewing process was doable but precarious. In the end it turned out weird and lumpy but acceptable. I nixed the idea of six proto-boards in the middle of this process. It was much easier to have one panel be a debug/power button/base side.

The final look of the Muppet Box, fresh from my hands.

However, the sixth panel being loose and about meant some quick thoughts regarding how to fix it into place. In an ideal world I would have used zippers, but I had no zippers at the time. I got away with some similarly-colored pipe cleaners sewn to the mouth of the box to both hold its shape and to be able to tie them together (with more pipe cleaner). For demonstration purposes I would simply tuck the ends into the box, which was overstuffed with wires anyway.

At this point, a lot of debugging went into the badly soldered insides of the box, and I had to battle fluff and poor lighting conditions to re-do some ground wires that had broken apart. Regrettable, but necessary and character-building. It really taught me that I should solder more tightly.

Discussion

Response to Critique

The vibrating aspect of it is creative and the lights are fun. I like how the lights are the same color as the fidget cube so you have to actually pay attention a little bit.”

I love the textile aspect to this! It’s so soft and calming, I love the vibrations and lights!”

The design and form factor is super cool, looking at this I wouldn’t even think it’s an Arduino project. The vibration and the fuzzy fabric feel really nice.”

Really ergonomic and fun looking fidget cube that will probably keep stressed people / hyperactive kids at bay  for a while”

One of the main factors of a fidget cube is tactile pleasure, which I tried to emphasize in the making of this project. I am certainly glad to hear that my attempts worked, and that it was successful as a toy.

“Really cool game. It’s really nice to feel and fun to find where the lights are. One aspect that may be interesting to pursue is to make it full integrated within the fur box. That way it becomes fully portable and doesn’t rely on a working external power source to function.”

Really really cool. It’s nice and compact, very impressive that you were able to fit all your electronics in there. Maybe finding a way to power it externally, instead of through your computer. “

One way you can possibly improve is by using a barrel jack and battery, that way it doesn’t have to be tethered to a computer to work. Other than that, really interesting and extremely unique project.”

This was a point of critique that really struck a chord with me. This device was always meant to be extremely portable and non-obstructive, so having it detached from an external power source was a very good idea. I implemented it immediately after hearing it, settling on coin batteries.

Self-Critique

To summarize my views on the project, I would say that it was an odd process. Starting with electronics was a bit of a mistake, because I had to design around what I had made without testing how it felt. This resulted in a weirdly lumpy spots and less than ideal wiring situations. In addition, the vibrating motors, while very pleasant to the touch and not a regrettable choice, did not work towards gameplay. I wish I had focused much more on playtesting what the game had to offer, which would have taken this project above and beyond. However, I am also cognizant of my (lack of) abilities in the hardware department, and can forgive myself for having spent so much time on re-soldering things over and over.

What I Learned

Some rather random things: I should do my planning more in advance, as so to deal with unexpected curveballs. Fluff sheds really badly, so do your soldering super well beforehand in order to not feel anxious over burnt fur. Make more prototypes to test how stuff would work before throwing all your chips in.

Next Time

I hope to incorporate the mistakes in planning. If I am to create a very tactile object, I should start with the tactile plans and work from there to the electronics. In addition, I would like to plan my soldering better and be more careful with exposed wires to cut down time in that part of the process. I would like to incorporate fabric earlier, as the combining of electronics and fabrics was ungainly, to say the least. The vibrating motors may need tweaking, as they weren’t as precise as I wanted them to be. The switches, while nicely tactile, are too easy to press. I should test other buttons under fabric. The fur is obscenely blue, and while it might be okay, one might prefer calmer colors for a calming item.

Technical Information

Schematic

/*
 * Muppet Box
 * Sophia Cao (sccao)
 * 
 * This code runs a short game based on a modifiable 
 * number of limit switches and equal number of LED and 
 * vibrating disc motor outputs. 
 * 
 */
 
// initializing the pins for the hardware
const int LVRPINS[] = {2,3,4,5,10}; 
const int LVRNUM = (sizeof(LVRPINS))/(sizeof(const int));
int PREOUT[LVRNUM];
int LVROUT[LVRNUM];

const int LEDS[] = {8,7,6,9,11}; 
int LEDOUT[LVRNUM];

const int VIBS[] = {A1,A2,A3,A0,A4  }; 
int VIBTENSITY = 128;

//necessary variables
int curr;
const int debounce= 100;
int timer;
bool paused;
int pause_amt = 500;

//initialize the pins
void setup() {
  for (int i=0;i<LVRNUM;i++){
    pinMode(LVRPINS[i],INPUT);
    pinMode(LEDS[i],OUTPUT);
    pinMode(VIBS[i],OUTPUT);
  }
  Serial.begin(9600);
}

void loop() {
  timer++;

  //pause state
  if (paused==true) {
    set_items(-1);
    if (timer>pause_amt){
      paused=false;
    }
    return;
  } else {
    
    set_items(curr);
  }
  
  //check buttons for press. serial input for if the correct 
  //button was pressed.
  for (int i=0;i<LVRNUM;i++){
    PREOUT[i] = LVROUT[i];
    LVROUT[i] = digitalRead(LVRPINS[i]);
    if ((PREOUT[i]!=LVROUT[i]) && !LVROUT[i]){
      if (i==curr) {
        init_curr();
        Serial.println("winner winner chicken dinner!");
        timer=0;
        paused = true;
      } else {
        init_curr();
        Serial.println("you lose!");
      }
    }
  }
  delay(debounce);
  
}

//picks a new unit to set off
void init_curr(){
  curr = (int) random(0,LVRNUM);
}

// activates the pin (c) that needs to be activated.
// else, deactivates all other pins.
void set_items(int c) {
  for (int i=0;i<LVRNUM;i++){
      if (c==i){
        digitalWrite(LEDS[i],HIGH);
        analogWrite(VIBS[i],VIBTENSITY);
      } else {
        digitalWrite(LEDS[i],LOW);
        analogWrite(VIBS[i],0);
      }
  }
}