You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.6 KiB
81 lines
2.6 KiB
/* |
|
INSTRUCTIONS |
|
============ |
|
*** *** *** For testing the hall effect sensor and correct magnet polarity *** *** *** |
|
Connect the signal pin of the sensor to pin 2 on the Arduino (an interrupt pin). Connect the |
|
Ground to Gnd and Vcc to 5V. Set the detect_on variable to true. Upload the code to your Arduino. |
|
Open the serial monitor and set the Baud rate to 9600. All being well, when you bring the |
|
magnet close to the sensor, with the correct polarity, the serial monitor will print ‘detect’. |
|
|
|
*** *** *** To output hall effect RPM to a graph *** *** *** |
|
Connect the signal pin of the sensor to pin 2 on the Arduino (an interrupt pin). Connect the |
|
Ground to Gnd and Vcc to 5V. Set the detect_on variable to false. Set the number of magnets |
|
on the shaft using n_magnets. Upload the code to your Arduino. Open the serial plotter. When |
|
you spin the shaft with magnet(s) attached the RPM will be plotted. |
|
|
|
*** *** *** To output commutation RPM to a graph *** *** *** |
|
Connect up the commutation RPM sensor to the motor as per the manufacturers instructions. |
|
Connect the signal pin of the sensor to pin 2 on the Arduino (an interrupt pin). Connect the |
|
Ground to Gnd and Vcc to 5V. Set the detect_on variable to false. Set the number of poles in |
|
the motor using n_magnets. Upload the code to your Arduino. Open the serial plotter. When |
|
you power the shaft with magnet(s) attached the RPM will be plotted. |
|
*/ |
|
|
|
//Conversion factors |
|
#define MILLIS_TO_SEC 1000.0f |
|
#define SEC_TO_MIN 60.0f |
|
|
|
/* |
|
If you want to use the hall effect sensor to print 'detect' to the serial monitor when the magnet is |
|
near and the correct polarity is presented, set this to true. If you want to output an rpm value |
|
set this to false. |
|
*/ |
|
bool detect_on = true; |
|
|
|
|
|
/* Set the number of magnets on autorotation wheel / shaft or the number of poles on the motor, |
|
depending on the type of sensor being used. */ |
|
int n_magnets = 1; |
|
|
|
volatile byte n_rev; |
|
float rpm; |
|
float prev_time; |
|
|
|
|
|
void setup() |
|
{ |
|
Serial.begin(9600); |
|
attachInterrupt(0, detect, RISING);//Initialize the intterrupt pin (Arduino digital pin 2) |
|
n_rev = 0; |
|
rpm = 0.0f; |
|
prev_time = 0.0f; |
|
} |
|
|
|
|
|
void loop()//Measure RPM |
|
{ |
|
//Only do rpm calculation after 20 rotations has past. |
|
if (n_rev >= 20) { |
|
rpm = SEC_TO_MIN*MILLIS_TO_SEC/(millis() - prev_time)*n_rev/n_magnets; |
|
|
|
//reset prev_time to now |
|
prev_time = millis(); |
|
|
|
//reset rotation counter |
|
n_rev = 0; |
|
|
|
//print rpm value to serial console |
|
Serial.println(rpm,DEC); |
|
} |
|
} |
|
|
|
|
|
//This function is called whenever a magnet/interrupt is detected by the arduino |
|
void detect() |
|
{ |
|
n_rev++; |
|
|
|
if (detect_on == true) { |
|
Serial.println("Magnet Detected"); |
|
} |
|
} |