Connect with us

How do get Arduino to read the angular speed of a rotating shaft?

Discussion in 'Microcontrollers, Programming and IoT' started by safibta, Sep 21, 2015.

  1. safibta


    Sep 21, 2015
    I am working on a project that involves multiple rotating shafts. My main objective is to get Arduino to read the speeds of all these shafts.

    What I have looked into:
    - Tachometer:
    There are two types of tachometer. One that gives me the digital output and one that gives me the output as a needle on a physical scale.
    - Rotary Encoder:
    I saw it attached to a DC motor.

    But how do I get an Arduino to read of this angular speed?

  2. Martaine2005


    May 12, 2015
  3. AnalogKid


    Jun 10, 2015
    I don't know what kind of pre-written functions are available for the Arduino, but the basics are pretty much the same. A sensor on or near the rotating shaft sends pulse to an arduino input. Assuming once per revolution, start an internal timer when an edge arrives, stop it when the next edge arrives, subtract the two times and invert the result. If the timer is counting in seconds, the result will be in RPS. If there are multiple pulses per revolution, divide the timer result.

  4. Minder


    Apr 24, 2015
    Tachometer by definition usually functions as a rpm or shaft rotation rate, for position and direction control either a Quadrature encoder (2 pulses 90° apart), or a absolute encoder is used.
    The link by Martin is an explanation of the Quadrature type.
  5. hevans1944

    hevans1944 Hop - AC8NS

    Jun 21, 2012
    There are more than two types of rotary shaft tachometers, some digital and some analog in nature. The simplest digital tachometer sensor is any device that produces one or more pulses per shaft revolution. A typical analog sensor produces a voltage that is proportional to shaft rotation rate and is mechanically coupled to the shaft. Analog sensors are ancient history and are seldom specified for new designs.

    You need to decide what type of digital sensor you are going to use to interface to your Arduino. For relatively slow shaft speeds this could be something as simple as a magnetic reed switch that is actuated by a permanent magnet attached to the shaft. Two magnets attached to the shaft opposite each other would be better to maintain dynamic balance, but this type of sensor has a low maximum speed because of limitations on how fast the magnetic reed switch can operate. A inductive pick-up coil can be used in place of the magnetic reed switch for higher revolution rates, but the output is a series of bi-polar pulses whose amplitude is a function of shaft speed. These pulses would normally be conditioned by electronics to produce pulses of uniform amplitude and pulse width for counting and timing by the Arduino as described by @AnalogKid in post #3 above.

    I have recently used Hall-effect magnetic sensors to measure shaft rotation speed on a mechanical vacuum pump, using a missing-pulse detector circuit to determine when the shaft is no longer rotating because of motor or drive belt failure. These come in two types, one with a built-in magnet for sensing ferromagnetic objects (like the steel spokes on my vacuum pump pulley) and one without a built-in magnet that requires an external magnet to actuate it. They are very reliable and easy to interface to an Arduino.

    My favorite inexpensive digital sensor is a retro-reflective optical sensor. This is a light emitter, typically an infrared LED, adjacent to a photo-transistor or photo-diode. and usually in the same package. Optics built into the emitter and detector provide a sensing range on the order of a few millimeters. A contrasting reflecting tape is applied to the shaft to produce an output when it is aligned with the emitter/detector pair. Again, signal conditioning electronics is required to produce pulses of uniform amplitude and suitable logic levels for counting and timing by the Arduino. One small disadvantage of the retro-reflective optical sensor is possible sensitivity to, and interference by, ambient light sources, unless a shroud is used to exclude ambient light.

    There are numerous commercial devices available that will provide 0 to +5 volt pulses that can be processed by the Arduino. I would suggest you do a Google search to find something suitable to your purpose and then come back here for help (if you need it) on how to program the Arduino to measure shaft rate from multiple sensors. That is a non-trivial task for a single Arduino sketch, but you could use one Arduino for each sensor and that would be a "piece of cake" to program. An Arduino Nano is a suitable candidate here and they are "dirt cheap".
    Last edited: Sep 21, 2015
  6. Minder


    Apr 24, 2015
    You can also use a opto slot sensor as a rpm/tachometer, as well as the retro reflective type that uses white paint or 3m reflector tape on the shaft as mentioned.
    Depending on the range of rpm, and whether a Arduino can use a 32Khz watch crystal, it can be used to create a 1 sec clock for ease of rpm measurement.
    I typically do this with a Pic, but I have never used Arduino.
    Depending on the range being measured, a 1pulse/rev is often enough.
Ask a Question
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.
Electronics Point Logo
Continue to site
Quote of the day