
Lessons Learned
Senior Design
Week 13:
This week's work showed the importance of non-blocking code in arduino code, especially when handling multiple components like sensors, motors, and user interfaces. Relying on delay() caused significant issues, such as missed touch inputs and unresponsive behavior, demonstrating the need for efficient timing solutions. Implementing millis() showed a way to manage tasks asynchronously, improving responsiveness and efficiency. Switching to the Adafruit DHT library showed the value of choosing appropriate tools for specific requirements. The library's non-blocking design allowed sensor measurements to integrate seamlessly with other processes, avoiding conflicts that previously caused system freezes. This reinforced the lesson that carefully selecting libraries can simplify code while maintaining functionality.
Week 12:
This week's work showed the importance of non-blocking code in arduino code, especially when handling multiple components like sensors, motors, and user interfaces. Relying on delay() caused significant issues, such as missed touch inputs and unresponsive behavior, demonstrating the need for efficient timing solutions. Implementing millis() showed a way to manage tasks asynchronously, improving responsiveness and efficiency. Switching to the Adafruit DHT library showed the value of choosing appropriate tools for specific requirements. The library's non-blocking design allowed sensor measurements to integrate seamlessly with other processes, avoiding conflicts that previously caused system freezes. This reinforced the lesson that carefully selecting libraries can simplify code while maintaining functionality.
Week 11:
This week taught me the importance of adaptability in both hardware and software troubleshooting. Testing the NPK sensor with an Arduino Mega after compatibility issues on the Arduino R4 showed that switching hardware can offer insights, but also complicate diagnostics, leading me to conclude that the sensor itself may be faulty. Setting up Blynk for our companion app was a major improvement, allowing web and mobile interfaces to display real-time data, though the lack of scheduling features reminded me to account for changing software capabilities. Devon’s work on aligning the motor for smoother NPK sensor transitions across trays and re-routing water tubing to the tank’s base showed how even small mechanical adjustments can enhance system efficiency. These combined experiences emphasized the value of testing, flexibility, and iterative improvement across all project components.
Week 10:
This week underscored the importance of flexibility, persistence, and resourcefulness when working with complex hardware and software systems. My deep dive into troubleshooting the NPK sensor highlighted that device manuals may sometimes be unreliable, and that addressing such issues often requires extensive research across various online communities. Through this process, I learned that code customization, such as adjusting CRC addresses, can sometimes reveal device-specific requirements not listed in official documentation. This experience reinforced that thorough troubleshooting testing multiple solutions and verifying output consistency across setups is vital to ensure accurate results, especially when device reliability is uncertain.
I also learned the value of adaptability in problem-solving when working with incompatible software and library conflicts, as seen in the PCF8574 and DHT11 sensor integration. By experimenting and refactoring code to reinitialize certain components at strategic points, I was able to maintain both devices’ functionality on the same setup. This taught me that small, iterative code adjustments can sometimes offer solutions without significant structural changes to the codebase, which is often more efficient than switching hardware or adding new components.
Week 9:
This week’s challenges highlighted several critical insights into working with new hardware and troubleshooting complex systems. First, compatibility issues with the Arduino R4 underscored the importance of carefully considering library and hardware support before fully committing to newer components. Many third-party components and libraries are slow to update for new board models, which can lead to significant compatibility challenges later on. Testing these elements as early as possible would help ensure smooth integration.
Additionally, I found that thoroughly consulting manufacturer documentation and resources can be invaluable when troubleshooting. The CRC addressing issue on the NPK sensor, which required specific values only available in the user manual, emphasized how manufacturer-provided tools and guides can clarify essential details often overlooked in community resources. Having access to diagnostic tools from the beginning can also streamline troubleshooting, helping avoid guesswork when components don’t perform as expected.
Week 8:
Over the past week, I’ve gained valuable insights into the importance of balancing functionality with user experience in a design project. One major takeaway is that clear and intuitive UI design is essential for ensuring smooth user interactions. By reorganizing the sensor data and manual controls into separate sections, I realized how critical it is to prioritize accessibility and ease of navigation. Another key lesson involves the responsiveness of the interface. The delays caused by the delay() function in the code were a significant issue, as they interrupted the main loop() and led to slow system responses.
Week 7:
Throughout this phase of the project, I encountered several key challenges and gained valuable insights that have helped shape the direction of our work. First, the rendering and design adjustments proved to be a significant learning experience. Initially, I focused on adding custom stand legs to support additional sheet metal. However, after physical testing, I realized that this modification was unnecessary. This highlighted the importance of balancing design choices with functionality and cost. It also reinforced the need for flexibility in design decisions, as overengineering can lead to wasted resources and time. Prioritizing the main functionality, such as data recording, became essential to keep the project on track.
Week 6:
From Jon's work this week, several key lessons emerged. The first is the importance of thorough testing and iteration when implementing graphical displays. Initially, Jon faced issues with the display failing to refresh correctly, which highlighted how small oversights in code logic can have significant impacts on functionality. Through persistent troubleshooting, Jon learned the value of experimenting with different approaches and refining his solution until the desired result was achieved. The process of integrating the NPK data into the display also underscored the need for effective data management.
Week 5:
This week was very informative on lessons in both the mechanical and software aspects of our project. On the mechanical side, Devon’s work with the frame and grow lights showed the importance of choosing practical attachment methods, like cold weld epoxy, which saved time and effort compared to mechanical fasteners. We also learned that careful placement of grow light is crucial to prevent plant damage from overheating, while the use of zip ties for easy adjustments and cable management was both resourceful and effective. Repurposing leftover sheet metal for planter alignment frames for grow tray holders added benefits of recycling resources. On the software side, Jon’s work on scaling touch inputs using the `map()` function reinforced the need for precise calibration in user interactions. Managing memory proved challenging as pixel-by-pixel updates for real-time data became intensive, teaching us the importance of reducing code redundancy.
Week 4:
This week’s work on the smart plug and NPK sensor provided valuable lessons in troubleshooting, patience, and the importance of detailed preparation. The construction of the smart plug began with careful mapping of the wires to ensure the correct connections for live, neutral, and ground, using a multimeter to verify each. This step was essential in connecting the wires to the relay properly, and it reinforced the importance of verifying each component before assembly to avoid mistakes and ensure safety. Another takeaway was understanding the power requirements of different components. The 5V relay used for the Arduino was straightforward, but the NPK sensor required a separate 15V power supply, emphasizing the need to confirm each component’s voltage needs before beginning work. Lastly, despite the setbacks, Jon was able to resolve issues with the moisture sensor, and significant progress was made in diagnosing the display issue related to the RA8875 driver and TFT display. Troubleshooting issues require persistence and patience when projects get complex or frustrating.
Week 3:
This week’s work on the smart plug and NPK sensor provided valuable lessons in troubleshooting, patience, and the importance of detailed preparation. The construction of the smart plug began with careful mapping of the wires to ensure the correct connections for live, neutral, and ground, using a multimeter to verify each. This step was essential in connecting the wires to the relay properly, and it reinforced the importance of verifying each component before assembly to avoid mistakes and ensure safety. Another takeaway was understanding the power requirements of different components. The 5V relay used for the Arduino was straightforward, but the NPK sensor required a separate 15V power supply, emphasizing the need to confirm each component’s voltage needs before beginning work. Lastly, despite the setbacks, Jon was able to resolve issues with the moisture sensor, and significant progress was made in diagnosing the display issue related to the RA8875 driver and TFT display. Troubleshooting issues require persistence and patience when projects get complex or frustrating.
Week 2:
This week, Deven made progress by completing the frame construction and beginning work on the NPK sensor but faced challenges integrating the sensor with the Raspberry Pi. The instructions and sturdy materials for the frame highlighted the importance of good documentation and quality components. Testing the LCD separately before full integration showed the value of verifying individual components to simplify troubleshooting. However, Deven struggled with adapting code from an Arduino to a Raspberry Pi, emphasizing the complexities of porting code between different platforms. Jon experienced delays due to shipping issues but used simulations to develop and test code for pumps, fans, and moisture sensors. His research into the 7.0" TFT display revealed that direct Arduino integration was impractical due to resolution limits, leading him to find the RA8875 driver board as an alternative. This underscored the importance of thorough research, adaptability, and exploring alternative solutions in engineering projects.
Week 1:
This week there were several important lessons about managing a project. First, it’s important to evaluate all available options before purchasing components. The team’s decision to choose an aquarium tank stand for the housing unit, rather than building one from scratch, was due to the size, weight, and cost. Additionally, using simulation tools like Tinkercad proved invaluable. These tools allowed the team to test and simulate designs before physical construction. It showed potential issues early, saving time by successfully simulating the moisture and temperature sensors. The integration of sensors and components highlighted the importance of ensuring compatibility with the microcontroller and required libraries. For instance, the temperature sensor needed specific wiring and a library, which required additional research to resolve. Testing was also critical; accurate performance of components, such as water pumps and sensors, needed to be accurate through testing sensor outputs to ensure the system functions correctly.