Terminal Velocity

Unhook the O-ring between the Turn Table and the pot before running this.

// Boolean values

#define TRUE 1

#define FALSE 0

// Hardware Pin Information

#define PHOTO_PIN 1

#define BUTTON 5

#define M1_PWM 3

#define M1_DIR 12

// Variables

#define PHOTO_THRESHOLD 100

boolean foundCargo, atCargo, startCheck;

unsigned long cargoCounter;

// Timer Variables

unsigned long startTime, stopTime;

double runTime;

void setup(){

// Initialization and Setup

Serial.begin(115200);

pinMode (M1_PWM,OUTPUT); digitalWrite (M1_PWM,LOW);

pinMode (M1_DIR,OUTPUT); digitalWrite (M1_DIR,LOW);

analogWrite (M1_PWM, 0);

// Start of Code

Serial.println("Please press the General Button to start accelerating the Turn Table");

Serial.println();

// Pause until Button Press

while(analogRead(BUTTON) != 0) {delay (10);}

Serial.println("Please wait a while until the Turn Table has visually reached Terminal Velocity!");

Serial.println();

// Ramp up the Turn Table speed a bit

RampMotor();

}

void loop() {

// Initialize the variables

foundCargo = FALSE;

atCargo = FALSE;

startCheck = FALSE;

cargoCounter = 0;

Serial.println("When ready, please press the General Button to start recording data, the test will run for 15 seconds.");

// Pause until Button Press

while (analogRead(BUTTON) != 0) {delay (10);}

// Run until we see the first cargo and pass it

while (!startCheck) {

// Check Photo-sensor

foundCargo = PhotoCheck();

// Condition Check

if (foundCargo && !atCargo) {

atCargo = TRUE;

}

if (!foundCargo && atCargo) {

atCargo = FALSE;

startCheck = TRUE;

}

}

// Start recording data

startTime = millis();

stopTime = startTime;

while ( (stopTime-startTime) < 15000 ) {

// Check Photo-sensor

foundCargo = PhotoCheck();

// Condition Check

if (foundCargo && !atCargo) {

atCargo = TRUE;

cargoCounter++;

}

if (!foundCargo && atCargo) {

atCargo = FALSE;

}

stopTime = millis();

}

runTime = stopTime-startTime;

runTime = runTime/1000;

Serial.println("Test Done");

Serial.print("Time (sec): ");

Serial.println(runTime,3);

Serial.print("Counter: ");

Serial.println(cargoCounter,DEC);

Serial.print("RPM: ");

Serial.println(60 * cargoCounter / runTime , 3);

}

// Check Photo-sensor

boolean PhotoCheck() {

if (analogRead(PHOTO_PIN) > PHOTO_THRESHOLD) {

return TRUE;

}

else {

return FALSE;

}

}

// Ramp up the motor

void RampMotor() {

digitalWrite(M1_DIR,HIGH);

analogWrite(M1_PWM,abs(100));

delay(1000);

analogWrite(M1_PWM,abs(200));

delay(1000);

analogWrite(M1_PWM,abs(255));

}