|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#31
|
||||
|
||||
|
Re: Disc Lauching Velocity
Quote:
*5,300 RPM |
|
#32
|
||||
|
||||
|
Re: Disc Lauching Velocity
Thanks for the detailed answer.
I was wondering if you could achieve a similar result using only one sensor instead of two by interrupting on both rising and falling edges of that sensor (using the diameter of the frisbee as the distance). |
|
#33
|
||||
|
||||
|
Re: Disc Lauching Velocity
Quote:
Quote:
Although, given the timing measurements we are seeing for this year's challenge, that should not be too much of an issue. |
|
#34
|
|||
|
|||
|
Re: Disc Lauching Velocity
Lol yes, if you look I have corrected the post. That was a typo (a pretty major one I might add).
|
|
#35
|
||||
|
||||
|
Re: Disc Lauching Velocity
Quote:
So as you said, since the frisbee speed is plenty slow, it's not a concern. The reason I brought this up is, using the single-sensor approach it might be easier to set up to measure the speed of the frisbee as it is passing thru the shooter at various locations. This might produce some very revealing data about slippage. |
|
#36
|
||||
|
||||
|
Re: Disc Lauching Velocity
Quote:
I'm not certain it would give any useful information that the off board Chronograph couldn't supply, but it would always be present and available for measurement. Real time feedback during a shot may not be possible, but by no means impossible. We plan on using our free standing unit to profile our system. We will also make it available at the Sacramento Regional to any team that would like to test with it. Now, you have piqued interest. I just HAVE to write the code for a single sensor Chronograph!! Stay tuned for code. |
|
#37
|
||||
|
||||
|
Re: Disc Lauching Velocity
Quote:
This "should" work for a single sensor It is untested, but based off a working two sensor version. I left the original code in place but commented out. BTW. it is already set up to print it's data to an I2C connected LCD. Modifying it to send data to the cRio would be quite simple. Code:
/*******************************************************************************************
* This Sketch is for a Chronograph that uses the "micros" function to capture two points in*
* time and determines how much time has elapsed between them in microseconds. By knowing *
* the distance between the to sensors, the velocity of the object can be determined. *
* Bill Kendall, Jan. 15, 2013 *
* I2C LCD Display function added 01/18/13 *
* Modified for single sensor 01/24/13 *
*******************************************************************************************/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,20,4); //Create object "lcd" at address 0x30, 20 X 4 display
//float SENSOR_DIST = 12; //This value is the distance between the sensors in inches
float DISK_DIAMETER = 11.0; // Diameter of Frisbee in inches.
float distance;
unsigned long event1 = 0; // value in 'micros" at the time of this first trigger
unsigned long event2 = 0; // value in 'micros" at the time of this second trigger
int firstint = 0; //Set to 1 if Interrupt 0 has occurred
int calculate = 0; // If set to 1, a calculation and display of the velocity will occur
unsigned long duration = 0; // Amount of elapsed time between events
float velocity = 0;
int sample = 0;
int flasher = 13; //LED attached to pin 13
void setup (void)
{
attachInterrupt (0, ISR0, CHANGE); // Interupt 0 (pin 2) calls "ISR0" Thie is the first trigger
//attachInterrupt (1, ISR1, RISING); // Interupt 1 (pin 3) calls "ISR1" This is the second trigger
//distance = (SENSOR_DIST/12.0); // Convert sensor spacing to feet
distance = (DISK_DIAMETER/12.0); // Convert disk diameter to feet
pinMode(flasher, OUTPUT);
Serial.begin(115200); // connect to the serial port
lcd.init(); // initialize the lcd
// Print our characters on the LCD
lcd.backlight(); //Backlight ON if under program control
lcd.setCursor(3,1); //Start at character 3 on line 1
lcd.print("2073 Cronograph");
delay(2000);
lcd.clear();
//lcd.setCursor(2,1);
//lcd.print("From YourDuino");
//delay(1000);
lcd.setCursor(8,0);
lcd.print("2013");
lcd.setCursor(3,1);
lcd.print("Ultimate Ascent");
lcd.setCursor(2,3);
delay(1000);
lcd.print("PGHSRobotics.com");
}
void ISR0 (void)
{
if (firstint == 0)
{
event1 = micros(); // record the microseconds counter
firstint = 1;
}
else
{
event2 = micros(); // record the microseconds counter
firstint = 0; // reset firstint
calculate = 1;
}
}
/*void ISR0 (void)
{
event1 = micros(); // record the microseconds counter
firstint = 1;
}
void ISR1 (void)
{
event2 = micros(); // record the microseconds counter
calculate = 1;
}*/
void loop (void)
{
if (calculate == 1)
{
RunMath ();
}
delay (500);
}
void RunMath (void)
{
digitalWrite(flasher, HIGH);
delay(250);
digitalWrite(flasher, LOW);
duration = (event2 - event1); // elapsed time between triggers in u seconds
velocity = (((distance)*1000000)/(duration)); // Calculate velocity in feet per second
sample ++;
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Frisbee velocity is");
lcd.setCursor(3,1);
lcd.print (velocity,2);
lcd.print(" ft./sec.");
lcd.setCursor(9,3);
lcd.print("Sample #");
lcd.print(sample); // Prints # of samples since reset
/* Serial.print("The Frisbee is moving at ");
Serial.print (velocity,2);
Serial.println(" ft./sec.");*/
calculate = 0;
firstint = 0;
}
|
|
#38
|
||||
|
||||
|
Re: Disc Lauching Velocity
Quote:
If this alignment is not possible, or convenient, a simple modification to "DISK_DIAMETER" is required. Just enter the chord length of the Frisbee where the sample will be taken. Two digit precision is all that is needed. |
|
#39
|
||||
|
||||
|
Re: Disc Lauching Velocity
Very cool! Thanks for posting that update
You've inspired me. For teams on a really tight budget that can't afford an Arduino, I wrote a small app that will run on any Pentium-based laptop or PC1 with a parallel port. It uses that port's status pins2 to get the elapsed time between rising and falling edges of a single sensor, or between the rising edges of two separate sensors, with +/- 2 μs accuracy. If there's enough interest3, I'll clean it up and post a white paper. 1especially on the old junker ones with 133MHz Pentium 2these are pulled up to +3.3 volts on most parallel ports and need only be grounded to generate a signal. 3PM me if you'd be interested. |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|