ðąâïļ 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
ðĄ 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
- arduino
- c++
- capacitive-soil-sensor
- esp32
- html5
- javascript
- mosquitto
- mqtt
- nfc
- nvidia-jetson-orin-nano
- pn532
- python
- relay
- websockets
Log in or sign up for Devpost to join the conversation.