Reflection
Reflection
Lessons Learned
Throughout the development of this project, the team gained valuable insights into system design, communication protocols, and problem-solving techniques. Below are the top ten lessons learned:
- Thorough Hardware Testing is Essential β Many unexpected issues arose due to sensor failures, improper voltage regulation, and soldering errors. Careful testing and debugging helped resolve these issues.
- Strict Adherence to Datasheets Prevents Issues β Following hardware reference designs correctly, particularly for microcontrollers and voltage regulators, avoids hours of unnecessary troubleshooting.
- Message Structure Must Be Clear and Consistent β Initial versions of our byte-based message format led to misinterpretation among subsystems. Reworking this structure improved communication clarity.
- Software Debugging Requires a Methodical Approach β Debugging MPLAB code required structured testing using logical debugging tools rather than trial-and-error approaches.
- Synchronization Between Subsystems is Critical β Each component operates at different speeds, requiring proper timing delays to prevent miscommunication between the sensor, actuator, and user interface.
- Modular Code Design Improves Scalability β Dividing software into smaller, manageable sections allowed us to troubleshoot individual modules without affecting the entire system.
- Real-Time Monitoring Enhances System Reliability β Using an MQTT server ensured constant data availability, allowing users to remotely view temperature and motor states.
- Wireless Communication Adds Complexity β WiFi and Bluetooth integration introduced additional points of failure, highlighting the importance of structured error handling.
- Cross-Team Collaboration is Key to Success β Clear communication between team members ensured that everyoneβs subsystem aligned properly with the overall system objectives.
- Project Constraints Require Adaptability β Flexibility in adjusting sensor selection, actuator control, and communication protocols allowed us to overcome roadblocks effectively.
Recommendations for Future Students
- Understand Communication Protocols Early β Learning about UART, I2C, SPI, and MQTT beforehand will streamline development.
- Follow the Datasheets Precisely β Always double-check voltage ratings, timing requirements, and pin configurations before designing circuits.
- Use Debugging Tools Efficiently β Utilize tools like Logic Analyzers, Serial Monitors, and MPLAB Simulations to identify and correct software errors.
- Manage Time Wisely β Software debugging, hardware assembly, and testing always take longer than expectedβallocate extra time for troubleshooting.
- Work Closely with Your Team β Keeping all members informed on design decisions and code implementations ensures a smooth development process.
Version 2.0: Improving Communication Architecture
If we were to develop a Version 2.0 of the communication architecture, several improvements could enhance system reliability, debugging, and expandability:
- Refined Byte Structure: Instead of using a rigid 8-byte message format, a more dynamic, expandable protocol would allow easier modification for future updates, accommodating additional sensor types or actuator functions.
- Enhanced Debugging Capabilities: Implementing error-detection bytes and logging mechanisms directly into the message structure would make troubleshooting communication failures significantly easier.
- Optimized Code Division: Separating sensor reading logic, motor control functions, and display operations into distinct software modules would improve maintainability and scalability.
- Improved Wireless Communication Reliability: Adding redundancy checks for WiFi and Bluetooth signals ensures smooth data transmission without unexpected loss.
- Integration of More Peripherals: Expanding functionality by including additional sensors, more advanced motor control features, and improved data visualization methods would enhance overall usability.
- Simplified Protocol Design: Adopting a standardized packet format, similar to MQTT or Modbus, would allow for easier expansion, making it more robust for real-world applications.
These refinements would not only enhance system performance but also simplify debugging and improve long-term reliability, ensuring that the architecture remains adaptable and scalable for future applications.