Society of Robots - Robot Forum
Electronics => Electronics => Topic started by: vipulan12 on August 01, 2013, 11:52:31 AM
-
i have these small motors that came from electronics of all kinds and i dont know how to find the RPM
is their an easy way to finding the rpm,is there a special too?
to solve my dilemma i am using my arduino to count the number of times the motor completes a rotation
however it seems to be very slow
it isnt detecting the complete rotations fast enough
my idea was to power the motor, the motor will be connected to an aluminum strip
for each rotation the aluminum strip will close and open a circuit connecting to my arduino
the arduino will serial print a 1 when is the circuit was closed(allowing current to flow) and a 0 when the circuit was open(no flow of current), this would be done in exactly one minute
the serial monitor would have groups of 1's (because of the baud rate)
so you would have to count the groups of 1s to count the number of rotations per minute
the problem is however when the circuit is being closed and open really fast the arduino isn't picking up the time when the circuit is opened(disconnected)
and the monitor shows up with a bunch of 1s
is what i am doing making sense or am i just wasting my time?
if there is a easier way in find RPM please reply
would this process be better if i used a photoresistor?
thanks
-
Even a pretty fast motor, like 10,000 rpm, would only do about 170 connections per second, which should be perfectly possible to track with an Arduino. Is it perhaps the case that your aluminum foil causes contact "bounce"?
That being said, reading the speed of a motor is a very common problem, and is typically done with either quadrature (relative) encoders, or absolute encoders, either optical or magnetic. You can buy encoders that you attach to your motor shaft or gearbox, and that will give you clean pulses to measure.
If you must build your own, I think a phototransistor and LED and a comparator or opamp will work pretty well. You should install a pin-change interrupt on the pin that the count signal comes in on, and have the interrupt routine count the number of ones or zeros.
-
do you have any encoders in mind?
-
I buy my motors with built-in encoders (like the Pololu gear motors) or as complete servos (like the Robotis servos.) I know that various hobby shops have encoders; encoders are also commonly sold by parts distributors like McMaster, Digi-Key or Mouser.
Twenty seconds on Google found this: http://www.robotshop.com/search/search.aspx?locale=en_us&keywords=encoder (http://www.robotshop.com/search/search.aspx?locale=en_us&keywords=encoder)
-
why do things the hard way? an led and phototransistor (no op amp required) or, better still, hall effect and magnet. arduino has many tach and freq counter sketches to make this easy.
-
If you have a variable frequency strobe light you could use the frequency to determine the rotations. Cut a hole in a disk place it on the end of the motor and turn it on. Then change the frequency until it stops convert the Hz frequency into minutes.
1 hertz = 60 revolution/minute
Cheers.
-
why do things the hard way?
I think that a rotary encoder that you just attach to the shaft is about as easy as it's going to get, but your mileage may vary.
Btw: There appears to be two interpretations of the question.
1) How to read the RPM while a motor without built-in encoder is working?
2) How to read the RPM of a motor under no-load conditions once, for characterization?
I agree that a strobe light and spinning disk might be quite sufficient (although for 10,000 rpm motors, you need 200 Hz or higher for the strobe)
-
why do things the hard way? an led and phototransistor (no op amp required) or, better still, hall effect and magnet. arduino has many tach and freq counter sketches to make this easy.
Yep, this is the easiest method.
Use a thin cardboard disk attached to the motor shaft with a hole for the LED/phototransistor (opto-interrupter). Run the phototransistor output to your Adrinuo and count the number of pulses in one second or other period of time.
Check how I measured RPM in this thread:
http://www.societyofrobots.com/robotforum/index.php?topic=17008.0 (http://www.societyofrobots.com/robotforum/index.php?topic=17008.0)
-
LED/phototransistor is not only easier but cheaper too. even easier (and cheaper) is two leds pointed at each other. note that an led not only emits light but can also act as light sensor.
-
how exactly would it be setup?
is using a photoresistor and LED godd enough for the job?
-
--> SCHEMATICS - INFRARED EMITTER DETECTOR (http://www.societyofrobots.com/schematics_infraredemitdet.shtml)
--> SENSORS - ROBOT ENCODER (SLOT, ROTARY, LINEAR) (http://www.societyofrobots.com/sensors_encoder.shtml)
-
could this sensor also be used to measure rpm?
https://www.sparkfun.com/products/9299 (https://www.sparkfun.com/products/9299)
it's cheap but i wonder about it's accuracy
-
Yes, that is perfect and is the type of sensor I use. The ones I use were salvaged from old printers.
it's cheap but i wonder about it's accuracy
What would not be accurate?
When the light beam is interrupted, blocked, the output is high when unblocked the output is low.
It is up to you how you measure the time of the intervals between high and low outputs.
Now, unsure you properly bias the LED. It does need a series current limiting resistor.