The Smart Waterer project was created by my friend and me with the goal of helping people who often forget to water their plants. As a result, plants sometimes dry out and have to be thrown away – our project aims to prevent that.
The device works in a simple way: a soil moisture sensor monitors the water level and compares it with configurable settings. When the soil becomes too dry, a 12V pump automatically waters the plant. Watering can also be triggered remotely through a web interface. On the website, users can configure detailed parameters such as watering duration, intervals between measurements, the number of samples, or the soil moisture threshold that triggers the pump.
I’m also aware that the PCB we designed doesn’t look particularly impressive – but that’s because I’m still learning. This was one of my very first PCB projects, and while it’s not perfect, it gave me a lot of valuable experience for the future.
Technically, this was one of our more challenging projects because we decided to implement it in ESP-IDF using the C language with FreeRTOS and multithreading. In our system, different tasks (sensor reading, pump control, and web interface handling) run in separate threads, and communication between threads is handled via queues. This allows each thread to operate independently while safely passing data, avoiding conflicts and ensuring the system runs reliably.
If you’d like to read more about this project or see the code, feel free to check out our GitHub repository.




