back to all cubes

Exhibitionist Cube

This opaque cube turns transparent when tapped on, revealing its insides

Eran's first idea was to create a "shy" cube, which turns opaque when someone approaches it.

We got samples from Chiefway Optronics, which works on 110VAC, so we also ordered converters to converts battery's 12V DC current into 110V AC. The electric films worked the opposite way than we hoped: When electric current runs through them, they turn transparent. We figured we cannot keep them working most of the time (this would deplete the batteries too often), so we changed the concept of the cube to be an "exhibitionist" cube, that is, it turns transparent when someone approaches it!

At first, we tried to use the films as both input an output, by using them as capacitive sensors. This turned out to be very problematic, because they had high capacitance and relatively high resistance, so after using them as output, the readings of the capacitance went crazy and were inconsistent.

We moved to using a vibration sensor, taken from a car alarm mechanism, based on a piezo transducer enhanced with a little weight attached to it. This sensor being very sensitive allowed us to set the level of sensitivity required for the cube to function properly. On one hand, we want the cube respond to the lightest touch, and on the other, we didn't want it to "expose itself" from random vibrations transferred from the table. It turned out very difficult to set an optimal sensitivity, because when the "cubes" project has lots of visitors (especially children), the table vibrates quite intensely...

Arduino code - download here

  CUBES originally created by the interaction Lab, Holon Institute of Technology for the Design Museum Holon.
  This work is licensed under a Creative Commons Attribution 3.0 Unported License

  Exhibitionist Cube by Eran Gal-Or

#define INVERTER_PIN 2     // output pin connected to inverter (transform the 11.1V of the battery to ~110VAC for the smart film)
#define START_THRESHOLD 80 // minimum piezo read to account as "knock"
#define HOLD_THRESHOLD 1   // keep transparent until the sensor is quiet again
#define RELAX_TIME 500     // time to keep transparent after sensor feels no mor vibrations

int val;
boolean showing = false;
long relaxTime;

void setup() {
  pinMode (13, OUTPUT);

void loop() {
  val = analogRead(0);
  if (!showing && val>START_THRESHOLD) {
    digitalWrite (INVERTER_PIN, HIGH);
    digitalWrite (13,HIGH);
    showing = true;
  if (showing) {
    if (val < HOLD_THRESHOLD) {
      if (millis() - relaxTime > RELAX_TIME) {
        digitalWrite (INVERTER_PIN, LOW);
        digitalWrite (13,LOW);
        showing = false;
    } else {
      relaxTime = millis();


(1x) Arduino Mini Pro 5V

6x Smartfilm samples from Chiefway Optronics

(1x) 110V AC Inverter

(1x) TIP112 - Darlington Transistor

(1x) 1N914 Fast Switching Diode

(1x) Reused Piezo transducer with weight from Car Alarm System

(1x) 1MOhm Resistors

(1x) 1N4733A - Zener Diode 5.1V

(1x) 10.8V Li-Po Battery

(1x) Audio Jack Socket