A Python-based desktop application designed to assist school hydroponic teams in automating plant system monitoring and control through Arduino integration, a structured SQL database, and a user-friendly graphical interface.
In collaboration with Cathy, a student leader maintaining our school’s hydroponic systems, this project addresses two major pain points:
- Manual operation of lighting and fan systems.
- Tedious daily measurement of environmental data (e.g., water level, temperature).
To reduce this workload and prevent crop failure from human error, Cathy and I designed an application that:
- Connects with Arduino sensors and controllers
- Stores and analyzes data using an SQLite database
- Provides a GUI with user-access control and visual feedback
“I want the application to provide different functions to the guests and our members of the project.” — Cathy, client interview
- Real-time monitoring of multiple hydroponic systems
- Secure login with user authority levels (Guest, Admin, Super Admin)
- Auto-generated graphs and reports
- GUI-based system control (e.g., lighting schedules)
- Local SQLite database with potential for future cloud migration
- Frontend: Python
tkinter,tkcalendar,tktimepicker - Backend: Python + SQLite3
- Data Visualization:
pygmt - Hardware Interface: Arduino integration via PySerial (planned)
- ✔️ GUI includes login, tabs, sliders, time selectors, and graphs
- ✔️ Access varies by user role: Guests (read-only), Admins (limited input), Super Admins (full control)
- ✔️ Values displayed clearly with unit labels and decimal formatting
- ✔️ Interactive date/time pickers for modeling and input
- ✔️ Scalable graphs with dynamic axis adjustment
- ✔️ SQLite database synchronized with GUI
- ✔️ Sensor simulation via multithreading mock data generator
- ✔️ Editable data fields and responsive data display
- ✔️ User management system with admin control panel
- ✔️ Secure login with password masking and storage outside GUI
⚠️ Lighting successfully controlled via Arduino LED setup⚠️ Other sensors not yet tested due to hardware constraints
- Multithreading (mock sensor simulation)
- Inheritance and modular class structure
- Secure SQLite data transactions
- GUI layout using prebuilt libraries to save development time
- Custom status analysis logic using value thresholds
IF current > high:
result = "very high"
alarmText += f"{type} is too high. Please check it immediately!"| Task | Description | Status |
|---|---|---|
| Initial client interview | Define project needs | ✅ |
| UML, wireframes, pseudocode | Technical design | ✅ |
| DB setup + mock data simulation | Back-end foundation | ✅ |
| GUI + data visual tools | Front-end layout | ✅ |
| Arduino LED control | Partial hardware integration | ✅ |
| Full sensor communication | Not completed | ❌ |
| Client testing & feedback | Final evaluation | ✅ |
“The program works well, but I want to upload the database to the cloud and make the GUI prettier.” — Cathy, feedback interview
- Cloud database migration for multi-device access
- UI enhancements for better readability and design
- On-screen usage instructions for novice users
- Dynamic system scaling to manage more than 10 hydroponic setups
- SQLite Home Page — SQLite team
- PyGMT Documentation — PyGMT developers
- “Python GUI Programming with Tkinter – Real Python” — David Amos
- “Python Serial Port Communication” — Instructables
- Tkcalendar Docs
- Threading in Python