ðŸŒąâš”ïļ In-cube-ator

Beat the boss. Water the plant.

A plant cube with a pixel game on its screen. When the soil gets dry, a boss shows up. Win the fight and the plant drinks. 💧

👇 Watch it in action

https://youtu.be/13E1jMrh5Tc


ðŸ’Ą Inspiration

Plants are easy to forget. We wanted a plant that asks for help in a way you would actually notice, so we gave it a video game. Thirsty plant, boss fight, water.

ðŸŽŪ What it does

A character walks endlessly on screen, so the game is always playable even when the plants are fine. When a plant's soil reads dry, a boss appears and a turn-based battle starts. Win, and the cube runs a small pump to water that plant.

┌──────────────────────────────┐
│ 💧 Water ███████░░░  72%     │  <- status bar, top left
│ ☀ïļ Light ██████████  100%    │
│ ðŸŒŋ Plant A                   │
│                              │
│   ðŸšķ  . . .  walking...      │
│                              │
│   ⚠ïļ SOIL DRY! BOSS APPEARS  │
└──────────────────────────────┘

How a round plays out

Step What happens Who does it
1 ðŸŒŋ Soil sensor reads dry ESP32
2 ðŸ‘đ A boss walks in Game
3 ⚔ïļ You win the battle You
4 💧 Pump waters the plant Relay and pump
5 ðŸŒą Boss leaves, walk resumes Game

The cube also has

  • ðŸ“Ą Two NFC readers, one per pot, so the cube knows which plant is which
  • ðŸ’Ą A grow light that switches on a timer
  • ðŸ–Ĩïļ A status bar showing water, sunlight and other meters

🔘 The demo button

Real soil dries slowly, so the game has a Demo Boss button. It spawns the boss on cue. After that it plays exactly like a real boss, including watering the plant when you win.


🛠ïļ How we built it

Part Tech Job
🧠 Cube brain ESP32 (Arduino, C++) Reads sensors, switches relays
ðŸŒą Soil sensing 2 capacitive soil sensors Lower number means wetter soil
📟 Plant ID 2 PN532 NFC readers One per pot, each on its own I2C bus
🔌 Switching 4-channel relay Controls 2 USB pumps and the grow light
ðŸ“Ą Messaging MQTT (Mosquitto) ESP32 and Jetson talk through it
ðŸ–Ĩïļ Game server NVIDIA Jetson Orin Nano (Python) Boss logic and battles
ðŸ•đïļ Game HTML5 canvas and WebSockets The pixel game on screen

🔒 Safety built into the firmware. Each pump run has a time cap and a minimum gap between runs, so a bug in the game can never flood a pot.

ðŸ‘Ĩ Team of three. One person on hardware and firmware, one on the Jetson and boss logic, one on the game, art and demo.


🚧 Challenges we ran into

  • 🔀 Both NFC readers use the same I2C address, so each needed its own bus.
  • ðŸĨķ A reader interrupted mid-conversation would freeze after an upload, so we worked on a software reset using its reset pin.
  • ⚡ Wiring a relay board to switch pumps safely, with everything off at boot.
  • 📉 Soil readings are noisy, so we average them and use two thresholds so the boss does not flicker.
  • ⏱ïļ Turning slow drying soil into something you can show in a short demo.

🧠 What we learned

How capacitive soil sensors read, how relays and shared grounds work, how to split a system between a microcontroller and a bigger computer over MQTT, and why a safety limit belongs in the firmware as well as in the game.

ðŸ”Ū What's next

  • 📷 Use the Jetson's camera for a second opinion on light and plant health
  • ðŸ‘đ More boss types
  • ðŸŠī More plants per cube
  • ðŸ“Ķ A tidier enclosure

Built With

Share this project:

Updates

Submission history