Arduino ยท C++ ยท No screen to check

No buttons.
Just flip it.

Pomodoro Gravity Cube reads its own orientation with an accelerometer โ€” flip it to a different face, get a different countdown. No app, no touchscreen, no notification competing for your attention.

MPU6050 accelerometer 128ร—64 OLED 3.7V LiPo Handcrafted wood shell
No hardware required

Try it in your browser.

The exact firmware, running against a virtual MPU6050. Click the switch to power on, then drag the sensor's X/Y/Z axes and watch the OLED and LED react in real time.

No install, no account, no cube required.

Cube states

One light. Five signals.

Face 1โ€“4 pointing up

Timer active

Solid green. 5, 15, 25, or 45 minutes, depending on which face is up.

30 seconds remaining

Warning

Blinking yellow โ€” time to wrap up your last thought.

Countdown reaches 00:00

Time's up

Blinking red. Flip to any face to reset and start again.

Screen face pointing up

Paused

Solid blue. Flip back to the same face to resume exactly where you left off.

No face detected yet

Idle

Off. Sitting flat, waiting.

Hardware

What's actually inside.

MicrocontrollerArduino Nano / Pro Micro
Motion sensorMPU6050 โ€” 6-axis accel + gyro, I2C
DisplaySSD1306 OLED, 128ร—64, I2C
Visual feedbackRGB LED (common cathode) + 3ร— 330ฮฉ
ChargingTP4056 LiPo module
Power3.7V LiPo battery
EnclosureCustom handcrafted wood shell

Firmware libraries:

Wire.hAdafruit_MPU6050Adafruit_SensorAdafruit_GFXAdafruit_SSD1306
Why it's built this way

A few deliberate choices.

01

No buttons, on purpose

Orientation is instantly learnable โ€” no documentation, no menu. Flipping the cube to start a session is a small physical ritual that reinforces the intent to focus.

02

millis(), not delay()

A blocking delay() would freeze the device mid-countdown, deaf to orientation changes. Tracking elapsed time by hand keeps the accelerometer polled every loop.

03

The 7.0 threshold is empirical

Tuned by testing on this specific enclosure, so incidental tilts while moving the cube across a desk don't accidentally switch timers. Different enclosure or mount? Expect to retune it.

Get started

Build your own.

01

Clone the repository

git clone https://github.com/mirconegri/PomodoroGravityCube.git
02

Install the libraries

Via the Arduino Library Manager: Adafruit MPU6050, Adafruit Unified Sensor, Adafruit GFX Library, Adafruit SSD1306.

03

Wire it up

MPU6050 and SSD1306 on the I2C bus (SDA/SCL). RGB LED on three PWM pins through 330ฮฉ resistors. Diagrams are in assets/.

04

Upload

Open src/cubo_pomodoro.ino in the Arduino IDE, select your board and port, and upload.

Built in the open, and in wood.

Look at the firmware, try the simulation, or build your own enclosure.