
Software that automates agricultural drones to assist farmers with crop monitoring and management.
This project was developed during my Software Engineering course, where we created a drone control software that could automate agricultural tasks. The software was designed to eventually link to an actual drone and fly as instructed.
We first developed a GUI interface where users could plot structures on the farm area and have a simulated drone fly over those structures. Once the GUI was coded, tested, and working properly, we implemented the Adapter pattern to integrate a real DJI Tello drone using their SDK, allowing the physical drone to mimic the movements of our GUI drone.
Throughout the development process, I implemented various software engineering design patterns to create a robust, maintainable, and extensible system. This project provided hands-on experience with real-world software architecture principles and drone automation technologies.

Dashboard layout for the Agricultural Drone Software
Pre-programmed flight routes that allow drones to navigate fields autonomously, covering the entire area efficiently.
Sensors and cameras that collect data on crop health, growth patterns, and potential issues like pests or diseases.
Processing of collected data to provide actionable insights for farmers, helping them make informed decisions.
Consideration of weather conditions to adjust flight plans and ensure safe operation of the drones.
Intuitive dashboard that allows farmers to easily program, monitor, and control drone operations.
Modular design that allows for easy addition of new features and integration with other agricultural systems.
Seamless transition from simulated drone in the GUI to controlling a physical DJI Tello drone using the same interface and commands.
Implementation: Used for the drone controller to ensure only one instance controls the drone at any time, preventing conflicting commands.
Benefit: Provides a global point of access to the drone controller while ensuring that multiple instances don't interfere with each other, maintaining system stability.
Implementation: Applied to perform operations on different components of the drone system without changing their classes.
Benefit: Allows for adding new operations to existing object structures without modifying those structures, making the system more flexible and maintainable.
Implementation: Used to represent hierarchical structures of drone commands and flight paths.
Benefit: Enables clients to treat individual objects and compositions of objects uniformly, simplifying the client code and making it more intuitive.
Implementation: Implemented to integrate the DJI Tello drone with our software system. The Adapter pattern allowed our application to communicate with the Tello SDK without modifying our core application code.
Benefit: Enabled seamless transition from our GUI simulation to controlling a real drone, allowing the physical DJI Tello drone to mimic the movements of our simulated drone. This pattern facilitated the integration of hardware components and third-party systems with minimal changes to our existing codebase.
This project provided valuable experience in software engineering principles and practices:
Design Pattern Application: Gained practical experience implementing various design patterns and understanding their real-world applications.
Software Architecture: Developed skills in creating maintainable, extensible software architectures that can adapt to changing requirements.
Java Proficiency: Enhanced Java programming skills, particularly in object-oriented design and implementation.
Problem-Solving: Improved ability to analyze complex problems and develop elegant, efficient solutions using appropriate design patterns.
Check out the GitHub repository to see how I implemented these design patterns and created a comprehensive drone control system.