Ideation and Introduction

After I gave up all my previous unsatisfying ideas, a digital blind box conjured up in my mind.

The name of the blind box is unclear where it originated. In Japan, where it was born, its original name was mini-figures. Later, due to people's consensus, it was also called a blind box. As it means literally, the blind box is a box containing different styles of doll figures. A series of blind boxes may have about 5~12 figures, but consumers don’t know which one is in it. The blind box is all about luck, Sometimes you will get the most popular ones, and sometimes you will get the ones you don’t like so much several times. There are also some blind box series with hidden figures.

LEGO also produces a blind box series every year called LEGA mini figures

LEGO mini-figures - Harry Potter™ Series 2L

LEGO mini-figures - Harry Potter™ Series 2L

The digital blind box I want to build has two ends: a physical box to "unfold" the surprises and a p5 sketch containing digital figures. It may be a solution to reduce the materials involved in toy manufacture(LOL), but physical art toys do have more attractions.

Physical End

I made a pop-up card box to simulate the process of opening a traditional blind box. And in this action, the acceleration change in a certain direction is very obvious, so I decided to use a triple-axis accelerometer Bosch BMA220 to sense the tiny movement. Bosch BMA220 is an ultra-small triaxial, low-g acceleration sensor with an I2C interface. According to all these advantages, I think it is proper to be hidden behind the little box I made, but the wires weakened them...

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/570a3cee-9c45-4e17-9ce3-6979d4dc13ec/IMG_2175.heic

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9bf742d0-775b-4255-ae03-eb2988c50678/IMG_2177.heic

The pop-up box is a very basic structure in pop-up book skills, but it offered me a pretty understanding physical interface.

Schematic diagram(draw by  TinkerCAD)

Schematic diagram(draw by TinkerCAD)

The code in Arduino was directly borrowed from DRFRobots sample code of BMA220, I just changed some Serial output patterns so that I could send the data to p5:

#include <Wire.h>
byte Version[3];
int8_t x_data;
int8_t y_data;
int8_t z_data;
byte range=0x00;
float divi=16;
float x,y,z;
void setup()
{
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(0x0A); // address of the accelerometer
  // range settings
  Wire.write(0x22); //register address
  Wire.write(range); //can be set at"0x00""0x01""0x02""0x03", refer to Datashhet on wiki
  // low pass filter
  Wire.write(0x20); //register address
  Wire.write(0x05); //can be set at"0x05""0x04"......"0x01""0x00", refer to Datashhet on wiki
  Wire.endTransmission();
}

void AccelerometerInit()
{
  Wire.beginTransmission(0x0A); // address of the accelerometer
  // reset the accelerometer
  Wire.write(0x04); // Y data
  Wire.endTransmission();
  Wire.requestFrom(0x0A,1);    // request 6 bytes from slave device #2
  while(Wire.available())    // slave may send less than requested
  {
    Version[0] = Wire.read(); // receive a byte as characte
  }
  x_data=(int8_t)Version[0]>>2;

  Wire.beginTransmission(0x0A); // address of the accelerometer
  // reset the accelerometer
  Wire.write(0x06); // Y data
  Wire.endTransmission();
  Wire.requestFrom(0x0A,1);    // request 6 bytes from slave device #2
  while(Wire.available())    // slave may send less than requested
  {
    Version[1] = Wire.read(); // receive a byte as characte
  }
  y_data=(int8_t)Version[1]>>2;

  Wire.beginTransmission(0x0A); // address of the accelerometer
  // reset the accelerometer
  Wire.write(0x08); // Y data
  Wire.endTransmission();
  Wire.requestFrom(0x0A,1);    // request 6 bytes from slave device #2
   while(Wire.available())    // slave may send less than requested
  {
    Version[2] = Wire.read(); // receive a byte as characte
  }
   z_data=(int8_t)Version[2]>>2;
   x=(float)x_data/divi;
   y=(float)y_data/divi;
   z=(float)z_data/divi;
//   Serial.print("X=");
   Serial.print(x);        
   Serial.print(",");
//   Serial.print("Y=");
   Serial.print(y);         
   Serial.print(",");
//   Serial.print("Z=");          
   Serial.println(z);
}

void loop()
{
  switch(range)  //change the data dealing method based on the range u've set
  {
  case 0x00:divi=16;  break;
  case 0x01:divi=8;  break;
  case 0x02:divi=4;  break;
  case 0x03:divi=2;  break;
  default: Serial.println("range setting is Wrong,range:from 0to 3.Please check!");while(1);
  }
  AccelerometerInit();
 delay(100);
}

Digital End

Although I have never bought a blind box, I like a series of blind boxes called Sticky Monster Lab, which I used as a visual reference for the digital part.

Sticky Monster Lab Blind Box

Sticky Monster Lab Blind Box

I created 6 tiny animations as the figures for my blind box, they are all simple and small moments in life.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9ab34e82-bf6a-43d1-8825-4b0d3a38a6d6/box1.gif

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/dda872c3-a6b8-4e5c-8f3a-74065b95a35e/box4.gif

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1c76fd83-b113-46fd-9660-95c57edaa819/box2.gif

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/74a02ddc-7541-4ba5-a60f-93c325ca0dac/box5.gif