EVOLUTION OF DESIGN

The original design (pictured above) was slightly similar to the sample AEV but had an aerodynamic shell and the standoffs to create coaxial contra rotating propellers. The L-shaped arm is slightly off centered. The holes in the shell were created to aid in starting and stopping the AEV as well as wire management. Though theoretically sound, this design became problematic when testing. The main issues had to do with shell. The shell was too heavy, caused the AEV to be off balanced, and made it very difficult to maintain the Arduino and the wires connected with it. However, it was aerodynamic and aesthetically appealing. Additionally, the motors hanging underneath the AEV were insecure and could easily come out of their holders. Finally, this design uses a propeller configuration that is not as efficient as other configurations, and could be more efficient. For these reasons, the first design was modified as shown below.

The Final Design (pictured above) solves many of the problems from the first design. First, the shell was removed. This allowed for more flexibility in the design in general, and helped keep the AEV maintained. Wires, screws, and the battery were much easier to access with the shell removed. Additionally, the weight reduction from removing the shell caused the AEV to travel more efficiently and helped to make sure the AEV was balanced. Also, small rectangular pieces were added to secure the motors, and any wires were secured to the AEV using extra zip-ties to protect the wires. Finally, the propellers were moved to a configuration that was determined to be the most efficient coaxial contra-rotating propeller configuration (see Advanced R&D Experiment 2).

Between Performance Tests 1 and 2, the biggest change in the code was how it accounts for missing the gate area. In Performance Test 1, the code would check if the AEV was too far forward or back and it would spin the propellers until the AEV reached that location. This method would accelerate the AEV to speeds too fast to stop in the correct location if the AEV was too far from the gate. In performance test 2 the code was changed to check the position of the AEV every 0.25 seconds with a while loop. This allowed the AEV to go back and forth until it made it to the correct spot.

Between Performance Tests 2 and 3, the method for getting to the correct location at the gate was rewritten to “nudge” the AEV so that every # seconds it would spin the propellers for # seconds. This allowed the AEV to travel at a more controlled speed instead of accelerating all the way to the correct position. The propellers also spin in the opposite direction once that position is reached to completely stop the AEV quickly. The code also does not contain a segment to make the vehicle go backwards if it goes too far. Additionally, the positions that the AEV travels to was changed to be undershot, so that the AEV would always fall short and would never have a need to go backwards to correct its position in the while loop. This segment of code was added to each section where the AEV stops: the first side of the gate, the caboose, the second side of the gate, and the starting position.

Performance Test 1:

 reverse(2);

 motorSpeed(4,50);

 goToAbsolutePosition(220);

 motorSpeed(4,0);

 reverse(4);

 motorSpeed(4,50);

 goFor(1);

 reverse(4);

 motorSpeed(4,15);

 goToAbsolutePosition(290);

 brake(4);

 

 if (getVehiclePostion()<304) {

   motorSpeed(4,20);

   goToAbsolutePosition(300);

   brake(4);

 } else if (getVehiclePostion()>304) {

   reverse(4);

   motorSpeed(4,20);

   goToAbsolutePosition(306);

   brake(4);

   reverse(4);

 }

 

 goFor(7);

 motorSpeed(4,40);

 goFor(2);

 brake(4);

 

Performance Test 2:

 int i = 297;

 

 reverse(1);

 motorSpeed(4,40);

 goToAbsolutePosition(240);

 brake;

 reverse(4);

 motorSpeed(4,40);

 goFor(1.5);

 reverse(4);

//  motorSpeed(4,22);

//  goToAbsolutePosition(290);

 brake(4);

 

while (getVehiclePostion()<i-1||getVehiclePostion()>-+1) {

 if (getVehiclePostion()<i-1) {

   motorSpeed(4,19);

   goFor(0.25);

   brake(4);

 } else if (getVehiclePostion()>i+1) {

   reverse(4);

   motorSpeed(4,19);

   goFor(0.25);

   brake(4);

   reverse(4);

 }

}

 

 goFor(7);

 motorSpeed(4,40);

 goToAbsolutePosition(500);

 brake;

 reverse(4);

 motorSpeed(4,40);

 goFor(1.5);

 reverse(4);

 motorSpeed(4,18);

 goToAbsolutePosition(520);

 brake;

 goFor(5);

 reverse(4);

 motorSpeed(4,40);

 brake(4);

 

Performance Test 3

unsigned long time;

 int iClass = 298;

 int i = 299;

 int minSpeedClass = 23;

 int minSpeed = 27;

 

 reverse(1);

 motorSpeed(4,40);

 goToAbsolutePosition(230);

 brake(4);

 

 reverse(4);

 motorSpeed(4,50);

 goFor(1.1);

 reverse(4);

 brake(4);

 goFor(0.5);

 

 while (getVehiclePostion()<i) {

   motorSpeed(4,minSpeed);

   goFor(0.25);

   brake(4);

   goFor(0.2);

 }

 reverse(4);

 motorSpeed(4,minSpeed);

 goFor(0.75);

 reverse(4);

 brake(4);

 

 goFor(7);

 motorSpeed(4,40);

 goToAbsolutePosition(510);

 brake(4);

 

 reverse(4);

 motorSpeed(4,50);

 goFor(1.3);

 reverse(4);

 brake(4);

 goFor(0.5);

 

 //time = millis();

 while (getVehiclePostion()<i+342) {

   motorSpeed(4,minSpeed+7);

   goFor(0.25);

   brake(4);

   goFor(0.2);

 }

 reverse(4);

 motorSpeed(4,minSpeed-5);

 goFor(0.75);

 brake(4);

 reverse(4);

 

 goFor(5);

 reverse(4);

 motorSpeed(4,65);

 goToAbsolutePosition(455);

 motorSpeed(4,55);

 goToAbsolutePosition(440);

 brake(4);

 

 reverse(4);

 motorSpeed(4,65);

 goFor(1.25);

 reverse(4);

 brake(4);

 goFor(1);

 

 while (getVehiclePostion()>i+58) {

   motorSpeed(4,minSpeed+33);

   goFor(0.3);

   brake(4);

   goFor(0.1);

 }

 reverse(4);

 motorSpeed(4,minSpeed+10);

 goFor(0.75);

 reverse(4);

 brake(4);

 

 goFor(7);

 motorSpeed(4,75);

 goToAbsolutePosition(i);

 motorSpeed(4,65);

 goToAbsolutePosition(i-50);

 while(getVehiclePostion<150) {

 brake(4);

 }

 

 reverse(4);

 motorSpeed(4,30);

 goFor(2);

 reverse(4);

 brake(4);

 goFor(1.25);

 

 while (getVehiclePostion()>28) {

   brake(4);

 }

 reverse(4);

 motorSpeed(4,minSpeed+20);

 goFor(1);

 reverse(4);

 brake(4);