Lab 10: Performance Test 3 – Code & Energy Optimization
Manan Kedia
Asad Idris
Kaixin Luo
Backwards Looking Summary
In the last two labs, the team approached the final stages of the project and began tweaking the finer details that made the AEV run efficiently and consistently. The team first tested out two different coding scenarios to identify which code works best now that the final design had been chosen. The first code was the teams current code which had been under development since the project started. This showed consistent runs but was still not as efficient as the team liked. The team first started by installing the servo and writing a code for it. The servo would be used for both coding scenarios as a test run on the first quarter of the track had proved to be successful in stopping the AEV consistently. However, in the past few labs the team faced a lot of hurdles which caused the team to struggle for time. A lot of time was taken to decide on an appropriate permanent position for the servo and how the brake would be implemented. The first few implementations were unsuccessful and the team finally made the breakthrough. The first code was uploaded into the AEV but it didn’t run successfully. This was due to the servo not reaching its coded angle which caused the whole code to reset. This was fixed and another test run was undertaken. The AEV once again ran unsuccessfully. The AEV would just stop running after the servo code was activated and no further codes would be run. The team kept making runs while trying to figure out the problem. Finally, after many failed runs the team realised the problem was in the code. Due to the Arduinos built in program the motors had to be reinitialized after the servo was activated. The two-line code acted as a buffer and had to be written every time the servo was activated.
motorSpeed(4,0);
goFor(0.5);
During the test runs the one of the propellers kept flying off the motor and caused even more time to be wasted as we had to restart the run. The team solved this by hot gluing the propellers to the motor. Unexpectedly this cause an increase in efficiency as the motor wasn’t running loose inside the propeller. Once that problem was solved the team started making consistent runs and was one of the few groups to complete successfully and consistently the MCR. This is the phase diagrams from the completed runs. The unexpected efficiency increase can be seen between the two phase diagrams.
Figure 1
The big peaks are where the motor is running and the little peaks are where the servo activated. The energy used was reduced by almost 60J. However, the team decided to pursue an even more efficient design. This is how the second coding scenario was introduced. This code used small bursts of high power instead of sustained power to power the AEV. It was hypothesized that this pulse thrust method would further reduce energy usage as the motors would only be run a shorter time. This code had not yet been test as the team was out of time.
The main takeaways from these labs were to be more prepared for the potential hurdles so that the team wouldn’t struggle for time and can make more test runs. Also, the team realized that no matter how much planning goes into a design or code. Sometimes real world tests show completely different results which is why test runs are so important.
Forwards looking plan.
With all the complications faced in the previous labs. The team was not able to complete the required tests. The teams plan is to test the current code against the pulse thrust code, which maybe more efficient, to see which one proves to be more efficient and then finalise a code for the AEV. The servo mechanism has been implemented but the team still must decide if this is an appropriate permanent location. Overall the team is progressing on schedule. Some team members came up with ideas that include using a fan as upward thrust to apparent weight of AEV while running, to use ducted propellers to reduce turbulence at the tip and have more efficient forward thrust, and to reduce power to one propeller when the AEV is turning to utilise torque vectoring to keep the AEV more stable in turns. But these ideas would only be tested if time permits as the project is now in its final stages. The team also needs to start working on the final draft report and update the project portfolio.
Appendix
Current Code
//First Quater
reverse(4);
motorSpeed(4,60); //both MOTORS SET TO 50% POWER
goToAbsolutePosition(105); //Last code continued until AEV reaches 105 marks
brake(4); //Brake all motors
goToAbsolutePosition(353);// Coast towards light gate
rotateServo(100.00); //Servo activated to stop AEV
goFor(2); //Stopped at gate for 7 seconds
rotateServo(00.00);// brakes released;
motorSpeed(4,0);
goFor(0.5);
goFor(6);
//Second Quarter
motorSpeed(4,60); //bOTH MOTORS SET TO 60% POWER for 4 seconds
goToAbsolutePosition(455);//Last code continued until AEV reaches 125 marks
brake(4);
goToAbsolutePosition(791);// Coast towards light gate
rotateServo(100.00); //Servo activated to stop AEV
goFor(2); //Stopped at gate for 7 seconds
rotateServo(00.00);// brakes released;
motorSpeed(4,0);
goFor(0.5);
goFor(4);
//Third Quater
reverse(4); //Reverse all motors;
motorSpeed(4,70); // Both motors set to 60% for 5 seconds
goToAbsolutePosition(600); //
brake(4); //Brake all motors and coast
goToAbsolutePosition(444); //coast to 450 marks
rotateServo(100.00); // brakes applied
goFor(2); //stay at gate
rotateServo(00.00); // brakes released
motorSpeed(4,0);
goFor(0.5);
goFor(6);
//Final Quater
motorSpeed(4,70); //
goToAbsolutePosition(175);
brake(4);
goToAbsolutePosition(10); //coast to 450 marks
rotateServo(100.00); // brakes applied
goFor(2); //stay at gate
rotateServo(00.00); // brakes released
Pulse Thrust code
//First Quarter
reverse(4);
motorSpeed(4,70); //both MOTORS SET TO 70% POWER
goToAbsolutePosition(75); //Last code continued until AEV reaches 75 marks
brake(4);
goToAbsolutePosition(150);
motorSpeed(4,70); //both MOTORS SET TO 70% POWER
goToAbsolutePosition(250); //Last code continued until AEV reaches 250 marks
brake(4); //Brake all motors
goToAbsolutePosition(353);// Coast towards light gate
rotateServo(100.00); //Servo activated to stop AEV
goFor(2); //Stopped at gate for 7 seconds
rotateServo(00.00);// brakes released;
motorSpeed(4,0);
goFor(0.5);
goFor(6);
Code Under Testing
//Second Quarter
motorSpeed(4,70); //bOTH MOTORS SET TO 70% POWER goToAbsolutePosition(370);//Last code continued until AEV reaches 370 marks
motorSpeed(4,70); //bOTH MOTORS SET TO 70% POWER goToAbsolutePosition(370);//Last code continued until AEV reaches 370 marks
brake(4);
goToAbsolutePosition(791);// Coast towards light gate
rotateServo(100.00); //Servo activated to stop AEV
goFor(2); //Stopped at gate for 7 seconds
rotateServo(00.00);// brakes released;
motorSpeed(4,0);
goFor(0.5);
goFor(4);
//Third Quater
reverse(4); //Reverse all motors;
motorSpeed(4,70); // Both motors set to 60% for 5 seconds
goToAbsolutePosition(600); //
brake(4); //Brake all motors and coast
goToAbsolutePosition(444); //coast to 450 marks
rotateServo(100.00); // brakes applied
goFor(2); //stay at gate
rotateServo(00.00); // brakes released
motorSpeed(4,0);
goFor(0.5);
goFor(6);
//Final Quater
motorSpeed(4,70); //
goToAbsolutePosition(175);
brake(4);
goToAbsolutePosition(10); //coast to 450 marks
rotateServo(100.00); // brakes applied
goFor(2); //stay at gate
rotateServo(00.00); // brakes released