Introduction: DIGITAL TACHOMETER

This is a Digital Tachometer using Hall Effect Magnetic Sensor, Arduino Nano and show the result on 4 Digit 7 Segment Display.

Its very simple project to build.

As you see on circuit diagram, we only need 4 resistors to limit the current for the 7 segment display.

COMPONENTS:

  1. ARDUINO NANO V3
  2. HALL EFFECT SENSOR MODULE
  3. 4 DIGIT 7 SEGMENT DISPLAY (12 PINS)
  4. 4 X 330OHM RESISTOR 1/4W 5%

Step 1: CREATE PCB & CODE

I'm using Fritzing Apps to create a PCB.

The size is about 40mm x 40mm using Single Layer PCB

There are four jumper on PCB.

THE CODE:

// DIGITAL TACHOMETER
// 4 DIGIT 7 SEGMENT DISPLAY // by SAFT7ROBOTICS.com

int sensorvalue; int state1 = HIGH; int state2; float rps; float rpm; long prevMillis = 0; long interval = 200; long currentTime; long prevTime = 1; long diffTime; int sensorthreshold = 30;

//ABCDEFG,dp const int numeral[10] = { B11111100, //0 B01100000, //1 B11011010, //2 B11110010, //3 B01100110, //4 B10110110, //5 B00111110, //6 B11100000, //7 B11111110, //8 B11100110, //9 };

//pins for decimal point and each segment //dp, G, F, E, D, C, B, A const int segmentPins[] = { 4, 7, 8, 6, 5, 3, 2, 9}; const int numberofDigits = 4; const int digitPins[numberofDigits] = { 10, 11, 12, 13}; //digits 1, 2, 3, 4

void setup() { //set segment and DP pins to output for (int i = 0; i < 8; i++) pinMode(segmentPins[i], OUTPUT);

//sets the digit pins as outputs for (int i = 0; i < numberofDigits; i++) pinMode(digitPins[i], OUTPUT); }

void loop() { sensorvalue = analogRead(0); // read from pin 0 if (sensorvalue < sensorthreshold) state1 = HIGH; else state1 = LOW; if (state2 != state1) { if (state2 > state1) { currentTime = micros(); // Get the arduino time in microseconds diffTime = currentTime - prevTime; rpm = 60000000 / diffTime; // calculate how many rev per minute

unsigned long currentMillis = millis();

if (currentMillis - prevMillis > interval) { prevMillis = currentMillis; } showNumber(rpm); prevTime = currentTime; } state2 = state1; } }

void showNumber (int number) { if (number == 0) showDigit (0, numberofDigits - 1); //display 0 in the rightmost digit else { for (int digit = numberofDigits - 1; digit >= 0; digit--) { if (number > 0) { showDigit(number % 10, digit); number = number / 10; } } } }

//Displays given number on a 7-segment display at the given digit position void showDigit (int number, int digit) { digitalWrite(digitPins[digit], HIGH); for (int segment = 1; segment < 8; segment++) { boolean isBitSet = bitRead(numeral[number], segment);

//isBitSet= ! isBitSet; //remove this line if common cathode display digitalWrite(segmentPins[segment], isBitSet); } delay(5); digitalWrite(digitPins[digit], LOW); }

Step 2: TESTING..

I test this tachometer using computer fan with attached magnet on fan blade.

Finally I put Hall Effect Sensor Module on my Mini Drill Machine, and test the sensor.

Tachometer running well.... YEAY!!