Академический Документы
Профессиональный Документы
Культура Документы
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum
5V
54 (15 provide PWM output)
16
40mA
50mA
256Kb
9600Hz but can be changed (see below for details)
Up to 1Mbps
Note: 9600Hz ADC sample rate suggest each analog read will take about 100us
Changing the ADC sample rate up to 77KHz does not significantly affect precision of the value.
Arduino Mega can be powered via the USB connection or with an external power supply. (7-12V battery
recommended) If external power supply has to be used, connect to the power jack on the Arduino board
or through VIN pin.
4. Go to device manager on your Windows (click on start icon and right click computer. Then click
properties. You will see general information about your computer and see few link tabs on the
left. Click on the device manager)
5. Look under ports (COM & LPT). You will see a port named Arduino Mega (COMxx)
6. Right clock the port and choose update driver software
7. Choose the browse my computer for Driver software option and navigate to Drivers folder
located inside your Arduino environment (from step 1)
Above steps will allow the Arduino to be properly recognized by your computer. Next, you need to let
the Arduino environment know that you are using Arduino Mega (see below image)
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum
Temperature sensor
The sensor output varies from 0-5V
The sensor output follows the formula shown below:
Temperature in Celsius = [(Vout in mV) 500] / 10;
For example if the sensor output is 1V, that means (1000 500) / 10 = 50 Celsius.
Voltage Sensor
Unlike other sensors used for this project, the specification sheet did not reveal the relationship
between sensor output voltage and its actual readings. The formula had to be calculated through
measurements and resources in the lab. (Steps shown below)
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum
1. Arduino readings range from 0 to 1024 (which corresponds to 0 to 5V). Voltage sensor reading
varies from -30 to 30V. When zero voltage was detected, Arduino read 512. The output of the
voltage sensor range from 0.5 to 4.5V. Small table shown below shows the relations ship
between these values
Arduino readings
102
512
922
Voltage sensor
-30
0
30
readings
Voltage sensor output 0.5
2.5
4.5
2. By looking at above table, the relationship between voltage sensor reading and Arduino
readings can be seen. Calculation with small explanation is given below
Arduino reading of 922 -> refers to 30V on voltage sensor
Arduino reading of 512 -> refers to 0 V on voltage sensor
Assuming linear relationship (why shouldnt it be)
922 512 = 410 units
30 V / 410 = 0.073 volts per unit
Formula for voltage
(Arduino reading 512) * 0.073 = Actual voltage measured by sensor
The formula above may change slightly for each sensor
Current Sensor
The current sensor formula wasnt provided and relationship between its output voltages to actual
sensor readings had to be figured out again using method in the voltage sensor section
Formula
Actual current measured by sensor = (Arduino reading - 512) * 0.074;
RPM sensor
A circuit consisting of IR emitting diode and phototransistor is used to calculate the rpm (shown below).
The idea was to detect the falling edge of the output. Normally, the output is kept at 0V until
interruption occurs between IR diode and phototransistor. The moment interruption is detected, the
output is pulled up to 5V until interruption disappears.
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum
Sample code from Bicycle Adapted Generator Project with detailed comments
Below is a sample code from Bicycle Adapted Generator (comments are shown in green or red)
Pay Special attention to the Red comment text about early initialization of the analog pin and how to
communicate properly with the PLX-DAQ program. (Further information about the PLX-DAQ described in
the next section)
int tspin = 0; //The variables declared here refer to pin number that Arduino will read from
int tspin_1 = 1; // for example tspin = 0 will read in information from analog pin 0 (shown later)
int tspin_2 = 2;
int current = 3;
int volt_read = 4;
int current_5 = 5;
int current_6 = 6;
int voltvalue = 0; // The variables decloased below are used for calculations. You do not have to declare
them here but I prefer to keep them in one place
float volt = 0;
int ampvalue = 0;
float amps = 0;
int ampvalue_5 = 0;
float amps_5 = 0;
int ampvalue_6 = 0;
float amps_6 = 0;
int reading_1 = 0;
int reading_2 = 0;
float aref_volt = 5; //reference voltage that Arduino will read the values in
float d_ratio = 1023.00; // resolution of the Arduino (12 bit resolution => 2^12)
float tot_data;
int ledPin = 13; // digital pin 13 will supply voltage to IR LED for rpm readings
volatile byte rpmcount;
unsigned int rpm;
unsigned long timeold;
void rpm_fun()
{
//function for generating rpm values. rpmcount refers to number of interruptions possible
rpmcount++;
}
void setup() //initialization of the arduino
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum
{
Serial.begin(9600);
//analogReference(); //This is a code that can be used to increase the accuracy reading of arduino by
changing analog voltage reference (instead of 5/2^12 you can change this to 3.3 for 3.3/2^12)
attachInterrupt(0, rpm_fun, FALLING); // Function for detecting interrupt. Number 0 refers to digital
pin 2 of the arduino. Everytime falling edge is detected from digital pin 2, the function rpm_fun will run
//Turn on IR LED
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
rpmcount = 0;
rpm = 0;
timeold = 0;
Serial.println("CLEARDATA"); //Serial.println are modified to allow PLX-DAQ program to understand the
data coming off the Arduino
Serial.println("LABEL, ,rpm, temp, amps_1, volts_1, amps_2, amps_3"); //Column labels for each data
}
void loop()
{
detachInterrupt(0); // stop reading the interruption from digital pin 2
rpm = 31*1000/(millis() - timeold)*rpmcount; //formula to calculate rpm
timeold = millis();
rpmcount = 0;
attachInterrupt(0,rpm_fun,FALLING); //start reading the interruption
int reading = analogRead(tspin);
float voltage = reading * aref_volt;
voltage /= d_ratio;
float temperature = (voltage - 0.5)*100; //formula to calculate temperature
Serial.print("DATA,TIME,"); //initialize the recording of data in PLX-DAQ. Will record the data in each
column of excel separated by comma. Also will record time for each data measurement
Serial.print(rpm); Serial.print(","); //record rpm and move on to next column (comma)
Serial.print(temperature); Serial.print(",");
reading_1 = analogRead(tspin_1); // Initialize the analog pin to charge the sample and hold capacitor
early
delay(100);//Delay to allow charging of the capacitor
reading_1 = analogRead(tspin_1);
float voltage_1 = reading_1 * aref_volt;
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum
voltage_1 /= d_ratio;
float temperature_1 = (voltage_1 - 0.5) * 100;
reading_2 = analogRead(tspin_2);
delay(100);
reading_2 = analogRead(tspin_2);
float voltage_2 = reading_2 * aref_volt;
voltage_2 /= d_ratio;
float temperature_2 = (voltage_2 - 0.5) * 100;
ampvalue = analogRead(current);
delay(100);
ampvalue = analogRead(current);
amps = (ampvalue - 509) * 0.074; //formula for calculating current
Serial.print(amps); Serial.print(",");
voltvalue = analogRead(volt_read);
delay(100);
voltvalue = analogRead(volt_read);
volt= (voltvalue - 570) * 0.0685; //formula for calculating voltage
Serial.print(volt); Serial.print(",");
ampvalue_5 = analogRead(current_5);
delay(100);
ampvalue_5 = analogRead(current_5);
amps_5 = (ampvalue_5 - 511) * 0.074;
Serial.print(amps_5); Serial.print(",");
ampvalue_6 = analogRead(current_6);
delay(100);
ampvalue_6 = analogRead(current_6);
amps_6 = (ampvalue_6 - 511) * 0.074;
for(int k=0;k<60;k++) {//measure average current instead of instantaneous current
ampvalue_6 = analogRead(current_6);
amps_6 = (ampvalue_6 - 511) * 0.074;
tot_data += amps_6;
}
Serial.println(tot_data/60);
tot_data = 0;
delay(400); //delay of 400ms to allow total of 1sec for each measurements
}
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum
PLX-DAQ
The program PLX-DAQ (it is actually excel macro) is designed to receive data from the propeller
(microcontroller from company Parallax) and export the data into an excel spreadsheet.
Since it uses Serial transmission and USB cable to transfer data, I used this program and modified the
Arduino code slightly to let PLX-DAQ understand the data it receives from Arduino.
An example of the excel spread sheet using PLX-DAQ is shown below.(using some the sample code
above)
5:13:12
5:13:13
5:13:14
5:13:15
5:13:16
5:13:17
5:13:18
5:13:19
5:13:20
5:13:21
5:13:22
5:13:23
5:13:24
5:13:25
5:13:26
5:13:27
5:13:28
5:13:29
5:13:30
5:13:31
5:13:32
5:13:33
5:13:34
5:13:35
5:13:36
5:13:37
5:13:38
5:13:39
5:13:40
5:13:41
5:13:42
5:13:43
5:13:44
5:13:45
5:13:47
5:13:48
5:13:49
rpm
65535.00
90.00
150.00
120.00
150.00
120.00
120.00
120.00
150.00
150.00
150.00
150.00
150.00
180.00
150.00
150.00
180.00
150.00
180.00
150.00
150.00
150.00
120.00
150.00
150.00
150.00
180.00
150.00
180.00
150.00
180.00
150.00
150.00
150.00
150.00
180.00
120.00
amps_1
2.52
3.11
2.81
2.81
3.18
2.74
2.89
3.03
2.89
3.03
2.96
3.26
3.18
3.03
3.03
2.96
2.89
2.81
3.11
2.89
3.11
2.81
3.11
3.26
2.96
2.89
3.18
3.18
3.18
3.4
3.33
3.11
3.18
3.03
3.33
3.18
3.18
volts_1
8.15
8.56
8.36
8.43
8.56
9.25
8.63
8.43
8.77
9.11
9.32
8.84
8.77
8.84
8.84
9.18
9.11
9.32
9.11
9.45
9.32
8.77
9.18
9.38
9.45
9.73
8.97
9.38
9.86
9.73
10
9.8
10
9.86
9.66
9.66
9.93
amps_2
0.07
0.07
0.07
0.07
0.07
0.07
0.07
0.07
0
0
0.07
0
0
0.07
0
0
0.07
0
0
0
0.07
0
0
0
0.07
0.07
0
0.07
0
0
0
0.07
0.07
0
0
0
0
amps_3
9.4
4.44
8.44
9.79
-0.75
3.91
9.8
8.55
1.09
8.46
2.63
6.76
8.14
9.58
7.31
8.99
9.96
6.96
6.19
7.06
6.56
11.7
5.08
4.73
5.92
11.24
7.22
7.3
2.96
4.98
5.38
4.66
4.52
3
-1.62
9.81
2.55
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum
5:13:50
5:13:51
5:13:52
5:13:53
5:13:54
5:13:55
5:13:56
5:13:57
5:13:58
5:13:59
5:14:00
5:14:01
5:14:02
5:14:03
5:14:04
5:14:05
5:14:06
5:14:07
5:14:08
5:14:09
5:14:10
5:14:11
5:14:12
5:14:13
5:14:14
5:14:15
5:14:16
5:14:17
5:14:18
5:14:19
5:14:20
5:14:21
5:14:22
5:14:23
5:14:24
5:14:25
5:14:26
5:14:27
5:14:28
5:14:29
5:14:30
5:14:31
5:14:32
5:14:33
5:14:34
5:14:35
5:14:36
5:14:37
150.00
180.00
150.00
150.00
180.00
180.00
150.00
150.00
150.00
120.00
150.00
120.00
120.00
150.00
150.00
120.00
150.00
150.00
120.00
120.00
150.00
150.00
150.00
150.00
150.00
120.00
150.00
150.00
120.00
180.00
120.00
120.00
150.00
120.00
120.00
90.00
120.00
90.00
120.00
60.00
120.00
90.00
120.00
120.00
60.00
90.00
120.00
90.00
3.48
3.33
3.63
3.7
3.4
3.4
3.26
3.33
3.4
4.07
3.85
3.18
3.7
3.85
3.7
3.85
3.7
3.7
4
3.33
3.85
3.77
3.92
3.7
4
4.14
4.22
4.14
3.48
3.92
3.55
4.29
3.85
3.77
2.96
4
3.03
3.26
2.74
3.4
2.59
4.14
2.52
2.22
2.52
3.77
2.81
2.44
10.55
11.23
10.75
10.82
10.96
11.85
11.3
12.4
11.03
11.37
12.95
11.44
11.85
10.82
13.43
13.01
12.47
11.03
12.74
13.01
12.6
12.47
11.99
12.26
12.26
11.51
12.67
13.08
13.49
13.29
11.44
12.74
13.01
9.8
13.36
11.85
10.96
13.36
7.47
8.7
12.33
12.74
8.97
7.74
9.86
11.03
7.33
9.93
0.07
0
0.07
0
0
0
0.07
0.07
0
0
0
0
0.07
0.07
0.07
0.07
0
0.07
0
0.07
0.07
0.07
0
0
0
0.07
0
0
0
0
0.07
0
0
0
0.15
0
0.07
0
0
0.07
0
0
0
0.07
0
0
0.07
0
3.57
1.16
5.37
1.1
2.49
4.72
2.66
-1.18
8.98
4.99
0.46
8.99
7.93
4.78
0.36
-1.21
2.03
5.56
0.42
2.94
0.48
1.03
3.13
2.6
2.7
1.33
-1.07
3.72
1.15
0.18
6.72
-0.73
1.57
-0.21
2.53
-0.8
5.06
-1.58
-2.33
0.38
3.7
-2.37
4.2
0.05
0.24
-1.2
0.16
0.61
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum
5:14:38
5:14:39
5:14:40
5:14:41
5:14:42
5:14:43
5:14:44
5:14:45
5:14:46
5:14:47
5:14:48
5:14:49
5:14:50
5:14:51
5:14:52
5:14:53
5:14:54
5:14:55
5:14:56
5:14:57
5:14:58
5:14:59
5:15:00
5:15:01
5:15:02
5:15:03
5:15:04
5:15:06
5:15:07
5:15:08
5:15:09
5:15:10
5:15:11
5:15:12
5:15:13
5:15:14
5:15:15
5:15:16
5:15:17
90.00
120.00
90.00
120.00
120.00
60.00
120.00
90.00
90.00
90.00
120.00
90.00
90.00
90.00
120.00
120.00
90.00
90.00
90.00
120.00
90.00
90.00
120.00
90.00
120.00
120.00
90.00
120.00
90.00
120.00
120.00
90.00
120.00
90.00
120.00
120.00
120.00
120.00
30.00
3.03
3.4
3.26
3.92
2.07
2.96
4
2.29
3.48
2.66
4
2.96
2.29
3.7
3.18
2
3.92
3.92
3.26
2.59
4
2.96
3.4
3.77
2.96
4
2.81
3.77
3.26
2.81
3.85
3.03
3.77
3.55
3.7
3.85
2.89
3.48
0
12.6
9.8
13.15
10.21
6.78
11.3
12.12
6.37
8.29
11.71
12.4
7.67
8.36
13.15
8.22
8.84
12.54
10.55
7.88
11.44
12.26
7.67
13.01
10.14
11.92
12.47
8.36
13.56
8.08
10.75
11.23
7.81
13.22
9.8
12.95
9.52
12.54
8.01
-11.17
0
0
0.07
0.07
0
0
0
0.07
0
0.07
0
0
0
0.07
0
0
0
0.07
-0.07
0
0
0.07
0
0
0
0
0.07
0
0.07
0
0
0
0
0.07
0
0.07
0.07
0
0
-0.04
0.47
-0.49
-0.13
-1.76
0.73
-0.7
-2.51
0.05
2.12
-2.11
-0.15
1.29
-0.35
0.68
3.1
-1.94
-2.13
0.15
0.67
-0.61
0.65
-0.89
-1.12
3.69
-0.4
0.58
-1.1
-0.25
5.45
-0.68
2.76
-1.35
0.51
-2.3
0.67
2.48
-0.06
-0.03
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum
4. Simply click connect (pay attention to baud rate shown on the settings above and from the
Arduino which is declared using Serial.begin(9600) code in the setup section. Make sure these
two are equal)
5. If the Arduino code is set up correctly, you should see the data being recorded every second.
Please refer to red comment text in the sample code for more information about
communication between PLX-DAQ and Arduino.
Written by Bicycle Adapted Generator Team with assistance from Arduino Forum